This commit is contained in:
Celogeek 2022-12-29 22:45:56 +01:00
parent 7a27473cb3
commit 260e6b6347
Signed by: celogeek
GPG Key ID: E6B7BDCFC446233A
2 changed files with 31 additions and 29 deletions

View File

@ -19,13 +19,6 @@ import (
imageconverter "go-comic-converter/internal/image-converter" imageconverter "go-comic-converter/internal/image-converter"
) )
type image struct {
Id int
Data *imageData
Width int
Height int
}
type EpubOptions struct { type EpubOptions struct {
Input string Input string
Output string Output string
@ -49,6 +42,13 @@ type ePub struct {
templateProcessor *template.Template templateProcessor *template.Template
} }
type image struct {
Id int
Data *imageData
Width int
Height int
}
type epubPart struct { type epubPart struct {
Cover *image Cover *image
Images []*image Images []*image
@ -137,12 +137,12 @@ func (e *ePub) loadCBZ() error {
e.imagesCount = len(images) e.imagesCount = len(images)
type Todo struct { type task struct {
Id int Id int
FZ *zip.File FZ *zip.File
} }
todo := make(chan *Todo) tasks := make(chan *task)
e.processingImages = func() chan *image { e.processingImages = func() chan *image {
// defer r.Close() // defer r.Close()
@ -152,8 +152,8 @@ func (e *ePub) loadCBZ() error {
wg.Add(1) wg.Add(1)
go func() { go func() {
defer wg.Done() defer wg.Done()
for task := range todo { for imgTask := range tasks {
reader, err := task.FZ.Open() reader, err := imgTask.FZ.Open()
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -164,12 +164,12 @@ func (e *ePub) loadCBZ() error {
e.ViewHeight, e.ViewHeight,
e.Quality, e.Quality,
) )
name := fmt.Sprintf("OEBPS/Images/%d.jpg", task.Id) name := fmt.Sprintf("OEBPS/Images/%d.jpg", imgTask.Id)
if task.Id == 0 { if imgTask.Id == 0 {
name = "OEBPS/Images/cover.jpg" name = "OEBPS/Images/cover.jpg"
} }
results <- &image{ results <- &image{
task.Id, imgTask.Id,
newImageData(name, data), newImageData(name, data),
w, w,
h, h,
@ -179,9 +179,9 @@ func (e *ePub) loadCBZ() error {
} }
go func() { go func() {
for i, fz := range images { for i, fz := range images {
todo <- &Todo{i, fz} tasks <- &task{i, fz}
} }
close(todo) close(tasks)
wg.Wait() wg.Wait()
r.Close() r.Close()
close(results) close(results)
@ -228,12 +228,12 @@ func (e *ePub) loadDir() error {
e.imagesCount = len(images) e.imagesCount = len(images)
type Todo struct { type task struct {
Id int Id int
Path string Path string
} }
todo := make(chan *Todo) tasks := make(chan *task)
e.processingImages = func() chan *image { e.processingImages = func() chan *image {
wg := &sync.WaitGroup{} wg := &sync.WaitGroup{}
@ -242,8 +242,8 @@ func (e *ePub) loadDir() error {
wg.Add(1) wg.Add(1)
go func() { go func() {
defer wg.Done() defer wg.Done()
for task := range todo { for imgTask := range tasks {
reader, err := os.Open(task.Path) reader, err := os.Open(imgTask.Path)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -254,12 +254,12 @@ func (e *ePub) loadDir() error {
e.ViewHeight, e.ViewHeight,
e.Quality, e.Quality,
) )
name := fmt.Sprintf("OEBPS/Images/%d.jpg", task.Id) name := fmt.Sprintf("OEBPS/Images/%d.jpg", imgTask.Id)
if task.Id == 0 { if imgTask.Id == 0 {
name = "OEBPS/Images/cover.jpg" name = "OEBPS/Images/cover.jpg"
} }
results <- &image{ results <- &image{
task.Id, imgTask.Id,
newImageData(name, data), newImageData(name, data),
w, w,
h, h,
@ -269,9 +269,9 @@ func (e *ePub) loadDir() error {
} }
go func() { go func() {
for i, path := range images { for i, path := range images {
todo <- &Todo{i, path} tasks <- &task{i, path}
} }
close(todo) close(tasks)
wg.Wait() wg.Wait()
close(results) close(results)
}() }()
@ -340,7 +340,7 @@ func (e *ePub) Write() error {
return err return err
} }
type ZipContent struct { type zipContent struct {
Name string Name string
Content any Content any
} }
@ -363,7 +363,7 @@ func (e *ePub) Write() error {
} }
defer wz.Close() defer wz.Close()
zipContent := []ZipContent{ content := []zipContent{
{"META-INF/container.xml", containerTmpl}, {"META-INF/container.xml", containerTmpl},
{"OEBPS/content.opf", e.render(contentTmpl, map[string]any{"Info": e, "Images": part.Images})}, {"OEBPS/content.opf", e.render(contentTmpl, map[string]any{"Info": e, "Images": part.Images})},
{"OEBPS/toc.ncx", e.render(tocTmpl, map[string]any{"Info": e, "Image": part.Images[0]})}, {"OEBPS/toc.ncx", e.render(tocTmpl, map[string]any{"Info": e, "Image": part.Images[0]})},
@ -379,7 +379,7 @@ func (e *ePub) Write() error {
if err = wz.WriteMagic(); err != nil { if err = wz.WriteMagic(); err != nil {
return err return err
} }
for _, content := range zipContent { for _, content := range content {
if err := wz.WriteFile(content.Name, content.Content); err != nil { if err := wz.WriteFile(content.Name, content.Content); err != nil {
return err return err
} }

View File

@ -43,7 +43,9 @@ func (o *Option) String() string {
limitmb = fmt.Sprintf("%d Mb", o.LimitMb) limitmb = fmt.Sprintf("%d Mb", o.LimitMb)
} }
return fmt.Sprintf(`Options: return fmt.Sprintf(`Go Comic Converter
Options:
Input : %s Input : %s
Output : %s Output : %s
Profile: %s - %s - %dx%d Profile: %s - %s - %dx%d