use sort path to support path with number

This commit is contained in:
Celogeek 2023-04-08 20:54:50 +02:00
parent 01b0486966
commit a46b02d38a
Signed by: celogeek
SSH Key Fingerprint: SHA256:njNJLzoLQdbV9PC6ehcruRb0QnEgxABoCYZ+0+aUIYc
2 changed files with 28 additions and 18 deletions

View File

@ -7,6 +7,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"regexp" "regexp"
"sort"
"strings" "strings"
"text/template" "text/template"
"time" "time"
@ -102,6 +103,16 @@ func (e *ePub) getParts() ([]*epubPart, error) {
return nil, err return nil, err
} }
sort.Slice(images, func(i, j int) bool {
if images[i].Id < images[j].Id {
return true
} else if images[i].Id == images[j].Id {
return images[i].Part < images[j].Part
} else {
return false
}
})
parts := make([]*epubPart, 0) parts := make([]*epubPart, 0)
cover := images[0] cover := images[0]
if e.HasCover { if e.HasCover {

View File

@ -16,13 +16,13 @@ import (
"strings" "strings"
"sync" "sync"
_ "golang.org/x/image/webp" "github.com/celogeek/go-comic-converter/v2/internal/epub/sortpath"
"github.com/disintegration/gift" "github.com/disintegration/gift"
"github.com/nwaples/rardecode" "github.com/nwaples/rardecode"
pdfimage "github.com/raff/pdfreader/image" pdfimage "github.com/raff/pdfreader/image"
"github.com/raff/pdfreader/pdfread" "github.com/raff/pdfreader/pdfread"
"golang.org/x/image/tiff" "golang.org/x/image/tiff"
_ "golang.org/x/image/webp"
) )
type Image struct { type Image struct {
@ -138,6 +138,7 @@ func LoadImages(path string, options *ImageOptions, dry bool) ([]*Image, error)
img.Path, img.Path,
}) })
} }
return images, nil return images, nil
} }
@ -233,15 +234,6 @@ func LoadImages(path string, options *ImageOptions, dry bool) ([]*Image, error)
return nil, fmt.Errorf("image not found") return nil, fmt.Errorf("image not found")
} }
sort.Slice(images, func(i, j int) bool {
if images[i].Id < images[j].Id {
return true
} else if images[i].Id == images[j].Id && images[i].Part < images[j].Part {
return true
}
return false
})
return images, nil return images, nil
} }
@ -275,7 +267,7 @@ func loadDir(input string) (int, chan *imageTask, error) {
return 0, nil, fmt.Errorf("image not found") return 0, nil, fmt.Errorf("image not found")
} }
sort.Strings(images) sort.Sort(sortpath.By(images))
output := make(chan *imageTask) output := make(chan *imageTask)
go func() { go func() {
@ -320,21 +312,28 @@ func loadCbz(input string) (int, chan *imageTask, error) {
return 0, nil, fmt.Errorf("no images found") return 0, nil, fmt.Errorf("no images found")
} }
sort.SliceStable(images, func(i, j int) bool { names := []string{}
return strings.Compare(images[i].Name, images[j].Name) < 0 for _, img := range images {
}) names = append(names, img.Name)
}
sort.Sort(sortpath.By(names))
indexedNames := make(map[string]int)
for i, name := range names {
indexedNames[name] = i
}
output := make(chan *imageTask) output := make(chan *imageTask)
go func() { go func() {
defer close(output) defer close(output)
for i, img := range images { for _, img := range images {
f, err := img.Open() f, err := img.Open()
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, err)
os.Exit(1) os.Exit(1)
} }
output <- &imageTask{ output <- &imageTask{
Id: i, Id: indexedNames[img.Name],
Reader: f, Reader: f,
Path: filepath.Dir(filepath.Clean(img.Name)), Path: filepath.Dir(filepath.Clean(img.Name)),
Filename: img.Name, Filename: img.Name,
@ -373,7 +372,7 @@ func loadCbr(input string) (int, chan *imageTask, error) {
return 0, nil, fmt.Errorf("no images found") return 0, nil, fmt.Errorf("no images found")
} }
sort.Strings(names) sort.Sort(sortpath.By(names))
indexedNames := make(map[string]int) indexedNames := make(map[string]int)
for i, name := range names { for i, name := range names {