From 3d31108aba0bcf680d34176b22fd33fb9c407d6d Mon Sep 17 00:00:00 2001 From: celogeek <65178+celogeek@users.noreply.github.com> Date: Sat, 11 May 2024 14:26:51 +0200 Subject: [PATCH] remove pointer from epub zip --- internal/epub/zip/epub_zip.go | 20 ++++++------- internal/epub/zip/epub_zip_image.go | 12 ++++---- internal/epub/zip/epub_zip_storage_image.go | 31 ++++++++++----------- 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/internal/epub/zip/epub_zip.go b/internal/epub/zip/epub_zip.go index 5c32b33..3dd054f 100644 --- a/internal/epub/zip/epub_zip.go +++ b/internal/epub/zip/epub_zip.go @@ -17,17 +17,17 @@ type EPUBZip struct { } // New create a new EPUB -func New(path string) (*EPUBZip, error) { +func New(path string) (EPUBZip, error) { w, err := os.Create(path) if err != nil { - return nil, err + return EPUBZip{}, err } wz := zip.NewWriter(w) - return &EPUBZip{w, wz}, nil + return EPUBZip{w, wz}, nil } // Close compress pipe and file. -func (e *EPUBZip) Close() error { +func (e EPUBZip) Close() error { if err := e.wz.Close(); err != nil { return err } @@ -37,10 +37,10 @@ func (e *EPUBZip) Close() error { // WriteMagic Write mimetype, in a very specific way. // // This will be valid with epubcheck tools. -func (e *EPUBZip) WriteMagic() error { +func (e EPUBZip) WriteMagic() error { t := time.Now().UTC() //goland:noinspection GoDeprecation - fh := &zip.FileHeader{ + fh := zip.FileHeader{ Name: "mimetype", Method: zip.Store, Modified: t, @@ -53,7 +53,7 @@ func (e *EPUBZip) WriteMagic() error { fh.CreatorVersion = fh.CreatorVersion&0xff00 | 20 // preserve compatibility byte fh.ReaderVersion = 20 fh.SetMode(0600) - m, err := e.wz.CreateRaw(fh) + m, err := e.wz.CreateRaw(&fh) if err != nil { return err @@ -62,12 +62,12 @@ func (e *EPUBZip) WriteMagic() error { return err } -func (e *EPUBZip) Copy(fz *zip.File) error { +func (e EPUBZip) Copy(fz *zip.File) error { return e.wz.Copy(fz) } // WriteRaw Write image. They are already compressed, so we write them down directly. -func (e *EPUBZip) WriteRaw(raw *ZipImage) error { +func (e EPUBZip) WriteRaw(raw ZipImage) error { m, err := e.wz.CreateRaw(raw.Header) if err != nil { return err @@ -77,7 +77,7 @@ func (e *EPUBZip) WriteRaw(raw *ZipImage) error { } // WriteContent Write file. Compressed it using deflate. -func (e *EPUBZip) WriteContent(file string, content []byte) error { +func (e EPUBZip) WriteContent(file string, content []byte) error { m, err := e.wz.CreateHeader(&zip.FileHeader{ Name: file, Modified: time.Now(), diff --git a/internal/epub/zip/epub_zip_image.go b/internal/epub/zip/epub_zip_image.go index 060cb86..5df69ae 100644 --- a/internal/epub/zip/epub_zip_image.go +++ b/internal/epub/zip/epub_zip_image.go @@ -18,7 +18,7 @@ type ZipImage struct { } // CompressImage create gzip encoded jpeg -func CompressImage(filename string, format string, img image.Image, quality int) (*ZipImage, error) { +func CompressImage(filename string, format string, img image.Image, quality int) (ZipImage, error) { var ( data, cdata bytes.Buffer err error @@ -33,27 +33,27 @@ func CompressImage(filename string, format string, img image.Image, quality int) err = fmt.Errorf("unknown format %q", format) } if err != nil { - return nil, err + return ZipImage{}, err } wcdata, err := flate.NewWriter(&cdata, flate.BestCompression) if err != nil { - return nil, err + return ZipImage{}, err } _, err = wcdata.Write(data.Bytes()) if err != nil { - return nil, err + return ZipImage{}, err } err = wcdata.Close() if err != nil { - return nil, err + return ZipImage{}, err } t := time.Now() //goland:noinspection GoDeprecation - return &ZipImage{ + return ZipImage{ &zip.FileHeader{ Name: filename, CompressedSize64: uint64(cdata.Len()), diff --git a/internal/epub/zip/epub_zip_storage_image.go b/internal/epub/zip/epub_zip_storage_image.go index dd918cd..f08f7d8 100644 --- a/internal/epub/zip/epub_zip_storage_image.go +++ b/internal/epub/zip/epub_zip_storage_image.go @@ -14,16 +14,16 @@ type StorageImageWriter struct { mut *sync.Mutex } -func NewStorageImageWriter(filename string, format string) (*StorageImageWriter, error) { +func NewStorageImageWriter(filename string, format string) (StorageImageWriter, error) { fh, err := os.Create(filename) if err != nil { - return nil, err + return StorageImageWriter{}, err } fz := zip.NewWriter(fh) - return &StorageImageWriter{fh, fz, format, &sync.Mutex{}}, nil + return StorageImageWriter{fh, fz, format, &sync.Mutex{}}, nil } -func (e *StorageImageWriter) Close() error { +func (e StorageImageWriter) Close() error { if err := e.fz.Close(); err != nil { _ = e.fh.Close() return err @@ -31,7 +31,7 @@ func (e *StorageImageWriter) Close() error { return e.fh.Close() } -func (e *StorageImageWriter) Add(filename string, img image.Image, quality int) error { +func (e StorageImageWriter) Add(filename string, img image.Image, quality int) error { zipImage, err := CompressImage(filename, e.format, img, quality) if err != nil { return err @@ -59,42 +59,41 @@ type StorageImageReader struct { files map[string]*zip.File } -func NewStorageImageReader(filename string) (*StorageImageReader, error) { +func NewStorageImageReader(filename string) (StorageImageReader, error) { fh, err := os.Open(filename) if err != nil { - return nil, err + return StorageImageReader{}, err } s, err := fh.Stat() if err != nil { - return nil, err + return StorageImageReader{}, err } fz, err := zip.NewReader(fh, s.Size()) if err != nil { - return nil, err + return StorageImageReader{}, err } files := map[string]*zip.File{} for _, z := range fz.File { files[z.Name] = z } - return &StorageImageReader{filename, fh, fz, files}, nil + return StorageImageReader{filename, fh, fz, files}, nil } -func (e *StorageImageReader) Get(filename string) *zip.File { +func (e StorageImageReader) Get(filename string) *zip.File { return e.files[filename] } -func (e *StorageImageReader) Size(filename string) uint64 { - img := e.Get(filename) - if img != nil { +func (e StorageImageReader) Size(filename string) uint64 { + if img, ok := e.files[filename]; ok { return img.CompressedSize64 + 30 + uint64(len(img.Name)) } return 0 } -func (e *StorageImageReader) Close() error { +func (e StorageImageReader) Close() error { return e.fh.Close() } -func (e *StorageImageReader) Remove() error { +func (e StorageImageReader) Remove() error { return os.Remove(e.filename) }