improve code

This commit is contained in:
Celogeek 2025-02-21 10:40:51 +01:00
parent dfb9a6fff3
commit c0bc8ea01a
Signed by: celogeek
GPG Key ID: 850295F3747870DD

View File

@ -12,7 +12,6 @@ import (
"io/fs" "io/fs"
"os" "os"
"path/filepath" "path/filepath"
"slices"
"sort" "sort"
"strings" "strings"
@ -69,7 +68,7 @@ func (e ePUBImagePassthrough) loadDir() (images []epubimage.EPUBImage, err error
return err return err
} }
if filterCopyPath(d.IsDir(), path) { if !d.IsDir() && e.isSupportedImage(path) {
imagesPath = append(imagesPath, path) imagesPath = append(imagesPath, path)
} }
@ -106,23 +105,18 @@ func (e ePUBImagePassthrough) loadDir() (images []epubimage.EPUBImage, err error
defer bar.Close() defer bar.Close()
for i, imgPath := range imagesPath { for i, imgPath := range imagesPath {
var f *os.File
f, err = os.Open(imgPath)
if err != nil {
return
}
var uncompressedData []byte
uncompressedData, err = io.ReadAll(f)
if err != nil {
return
}
f.Close()
var img epubimage.EPUBImage var img epubimage.EPUBImage
img, err = copyRawDataToStorage( img, err = e.copyRawDataToStorage(
imgStorage, imgStorage,
uncompressedData, func() ([]byte, error) {
f, err := os.Open(imgPath)
if err != nil {
return nil, err
}
defer f.Close()
return io.ReadAll(f)
},
i, i,
input, input,
imgPath, imgPath,
@ -155,7 +149,7 @@ func (e ePUBImagePassthrough) loadCbz() (images []epubimage.EPUBImage, err error
imagesZip := make([]*zip.File, 0) imagesZip := make([]*zip.File, 0)
for _, f := range r.File { for _, f := range r.File {
if filterCopyPath(f.FileInfo().IsDir(), f.Name) { if !f.FileInfo().IsDir() && e.isSupportedImage(f.Name) {
imagesZip = append(imagesZip, f) imagesZip = append(imagesZip, f)
} }
} }
@ -200,23 +194,18 @@ func (e ePUBImagePassthrough) loadCbz() (images []epubimage.EPUBImage, err error
continue continue
} }
var f io.ReadCloser
f, err = imgZip.Open()
if err != nil {
return
}
var uncompressedData []byte
uncompressedData, err = io.ReadAll(f)
if err != nil {
return
}
f.Close()
var img epubimage.EPUBImage var img epubimage.EPUBImage
img, err = copyRawDataToStorage( img, err = e.copyRawDataToStorage(
imgStorage, imgStorage,
uncompressedData, func() ([]byte, error) {
f, err := imgZip.Open()
if err != nil {
return nil, err
}
defer f.Close()
return io.ReadAll(f)
},
indexedNames[imgZip.Name], indexedNames[imgZip.Name],
"", "",
imgZip.Name, imgZip.Name,
@ -248,7 +237,7 @@ func (e ePUBImagePassthrough) loadCbr() (images []epubimage.EPUBImage, err error
names := make([]string, 0) names := make([]string, 0)
for _, f := range files { for _, f := range files {
if filterCopyPath(f.IsDir, f.Name) { if !f.IsDir && e.isSupportedImage(f.Name) {
if f.Solid { if f.Solid {
isSolid = true isSolid = true
} }
@ -308,16 +297,12 @@ func (e ePUBImagePassthrough) loadCbr() (images []epubimage.EPUBImage, err error
continue continue
} }
var uncompressedData []byte
uncompressedData, err = io.ReadAll(r)
if err != nil {
return
}
var img epubimage.EPUBImage var img epubimage.EPUBImage
img, err = copyRawDataToStorage( img, err = e.copyRawDataToStorage(
imgStorage, imgStorage,
uncompressedData, func() ([]byte, error) {
return io.ReadAll(r)
},
indexedNames[f.Name], indexedNames[f.Name],
"", "",
f.Name, f.Name,
@ -333,23 +318,17 @@ func (e ePUBImagePassthrough) loadCbr() (images []epubimage.EPUBImage, err error
} else { } else {
for _, file := range files { for _, file := range files {
if i, ok := indexedNames[file.Name]; ok { if i, ok := indexedNames[file.Name]; ok {
var f io.ReadCloser
f, err = file.Open()
if err != nil {
return
}
var uncompressedData []byte
uncompressedData, err = io.ReadAll(f)
if err != nil {
return
}
f.Close()
var img epubimage.EPUBImage var img epubimage.EPUBImage
img, err = copyRawDataToStorage( img, err = e.copyRawDataToStorage(
imgStorage, imgStorage,
uncompressedData, func() ([]byte, error) {
f, err := file.Open()
if err != nil {
return nil, err
}
defer f.Close()
return io.ReadAll(f)
},
i, i,
"", "",
file.Name, file.Name,
@ -372,19 +351,29 @@ func (e ePUBImagePassthrough) loadCbr() (images []epubimage.EPUBImage, err error
return return
} }
func filterCopyPath(isDir bool, filename string) bool { func (e ePUBImagePassthrough) isSupportedImage(path string) bool {
return !isDir && switch strings.ToLower(filepath.Ext(path)) {
!strings.HasPrefix(filepath.Base(filename), ".") && case ".jpg", ".jpeg", ".png":
slices.Contains([]string{".jpeg", ".jpg", ".png"}, strings.ToLower(filepath.Ext(filename))) {
return !strings.HasPrefix(filepath.Base(path), ".")
}
}
return false
} }
func copyRawDataToStorage( func (e ePUBImagePassthrough) copyRawDataToStorage(
imgStorage epubzip.StorageImageWriter, imgStorage epubzip.StorageImageWriter,
uncompressedData []byte, getData func() ([]byte, error),
id int, id int,
dirname string, dirname string,
filename string, filename string,
) (img epubimage.EPUBImage, err error) { ) (img epubimage.EPUBImage, err error) {
var uncompressedData []byte
uncompressedData, err = getData()
if err != nil {
return
}
p, fn := filepath.Split(filepath.Clean(filename)) p, fn := filepath.Split(filepath.Clean(filename))
if p == dirname { if p == dirname {
p = "" p = ""