diff --git a/cbz/cbz_creator.go b/cbz/cbz_creator.go index d4f2073..7df9434 100644 --- a/cbz/cbz_creator.go +++ b/cbz/cbz_creator.go @@ -18,7 +18,6 @@ func WriteChapterToCBZ(chapter *manga.Chapter, outputFilePath string) error { // Create a new ZIP writer zipWriter := zip.NewWriter(zipFile) - err = zipWriter.SetComment("Created by CBZOptimizer") if err != nil { return err } @@ -71,18 +70,11 @@ func WriteChapterToCBZ(chapter *manga.Chapter, outputFilePath string) error { } if chapter.IsConverted { - convertedWriter, err := zipWriter.CreateHeader(&zip.FileHeader{ - Name: "Converted.txt", - Method: zip.Deflate, - Modified: time.Now(), - }) - if err != nil { - return fmt.Errorf("failed to create Converted.txt in .cbz: %w", err) - } - _, err = convertedWriter.Write([]byte(fmt.Sprintf("%s\nThis chapter has been converted by CBZOptimizer.", chapter.ConvertedTime))) + convertedString := fmt.Sprintf("%s\nThis chapter has been converted by CBZOptimizer.", chapter.ConvertedTime) + err = zipWriter.SetComment(convertedString) if err != nil { - return fmt.Errorf("failed to write Converted.txt contents: %w", err) + return fmt.Errorf("failed to write comment: %w", err) } } diff --git a/cbz/cbz_creator_test.go b/cbz/cbz_creator_test.go index f015514..d8af32f 100644 --- a/cbz/cbz_creator_test.go +++ b/cbz/cbz_creator_test.go @@ -3,6 +3,7 @@ package cbz import ( "archive/zip" "bytes" + "fmt" "github.com/belphemur/CBZOptimizer/manga" "os" "testing" @@ -10,11 +11,14 @@ import ( ) func TestWriteChapterToCBZ(t *testing.T) { + currentTime := time.Now() + // Define test cases testCases := []struct { - name string - chapter *manga.Chapter - expectedFiles []string + name string + chapter *manga.Chapter + expectedFiles []string + expectedComment string }{ //test case where there is only one page and ComicInfo and the chapter is converted { @@ -29,9 +33,10 @@ func TestWriteChapterToCBZ(t *testing.T) { }, ComicInfoXml: "Boundless Necromancer", IsConverted: true, - ConvertedTime: time.Now(), + ConvertedTime: currentTime, }, - expectedFiles: []string{"0000.jpg", "ComicInfo.xml", "Converted.txt"}, + expectedFiles: []string{"0000.jpg", "ComicInfo.xml"}, + expectedComment: fmt.Sprintf("%s\nThis chapter has been converted by CBZOptimizer.", currentTime), }, //test case where there is only one page and no { @@ -125,6 +130,10 @@ func TestWriteChapterToCBZ(t *testing.T) { } } + if tc.expectedComment != "" && r.Comment != tc.expectedComment { + t.Errorf("Expected comment %s, but found %s", tc.expectedComment, r.Comment) + } + // Check if there are no unexpected files if len(filesInArchive) != len(tc.expectedFiles) { t.Errorf("Expected %d files, but found %d", len(tc.expectedFiles), len(filesInArchive)) diff --git a/cbz/cbz_loader.go b/cbz/cbz_loader.go index 7c6421e..b2ded20 100644 --- a/cbz/cbz_loader.go +++ b/cbz/cbz_loader.go @@ -23,6 +23,17 @@ func LoadChapter(filePath string) (*manga.Chapter, error) { chapter := &manga.Chapter{ FilePath: filePath, } + // Check for comment + if r.Comment != "" { + scanner := bufio.NewScanner(strings.NewReader(r.Comment)) + if scanner.Scan() { + convertedTime := scanner.Text() + chapter.ConvertedTime, err = dateparse.ParseAny(convertedTime) + if err == nil { + chapter.IsConverted = true + } + } + } for _, f := range r.File { if f.FileInfo().IsDir() { @@ -45,7 +56,7 @@ func LoadChapter(filePath string) (*manga.Chapter, error) { return nil, fmt.Errorf("failed to read ComicInfo.xml content: %w", err) } chapter.ComicInfoXml = string(xmlContent) - } else if ext == ".txt" && strings.ToLower(filepath.Base(f.Name)) == "converted.txt" { + } else if !chapter.IsConverted && ext == ".txt" && strings.ToLower(filepath.Base(f.Name)) == "converted.txt" { textContent, err := io.ReadAll(rc) if err != nil { rc.Close()