From ed005d3f2762420ca62aab18655df35b4307807f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E6=96=B9=E6=98=9F=E7=97=95?= Date: Sat, 9 Apr 2022 12:23:20 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=AB=A0?= =?UTF-8?q?=E8=8A=82=E5=8C=B9=E9=85=8D=E8=A7=84=E5=88=99=EF=BC=8C=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96kindlegen=E5=AF=BB=E5=9D=80=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yaml | 2 +- .gitignore | 4 +++- analytics.go | 3 ++- azw3.go | 6 +++--- cmd/cli.go | 2 +- convert.go | 2 +- epub.go | 4 ++-- go.mod | 4 ++-- go.sum | 4 ++-- mobil.go | 16 ++++++++++------ tools.go | 17 ++++++++--------- tools_test.go | 25 +++++++++++++++++++++++++ 12 files changed, 60 insertions(+), 29 deletions(-) create mode 100644 tools_test.go diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 64c82c7..e604374 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -14,7 +14,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v2 with: - go-version: ^1.13 + go-version: ^1.18 id: go - name: Check out code into the Go module directory diff --git a/.gitignore b/.gitignore index cf14e08..15bf9fe 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ *.txt *.exe *.tmp -kaf-cli-* \ No newline at end of file +*.zio +kaf-cli-* +samples diff --git a/analytics.go b/analytics.go index 2fa1099..02ead0f 100644 --- a/analytics.go +++ b/analytics.go @@ -8,7 +8,7 @@ import ( "time" ) -func Analytics(version, secret, measurement string) { +func Analytics(version, secret, measurement, format string) { if secret == "" || measurement == "" { return } @@ -23,6 +23,7 @@ func Analytics(version, secret, measurement string) { Params: map[string]interface{}{ "os": runtime.GOOS, "arch": runtime.GOARCH, + "format": format, "version": version, }, }, diff --git a/azw3.go b/azw3.go index 1ad5b86..d2d9c5d 100644 --- a/azw3.go +++ b/azw3.go @@ -17,7 +17,7 @@ func (convert Azw3Converter) Build(book Book) error { fmt.Println("使用第三方库生成azw3, 不保证所有样式都能正常显示") fmt.Println("正在生成azw3...") start := time.Now() - chunks := SectionSliceChunk(book.SectionList, 2700) + chunks := SectionSliceChunk(book.SectionList, 2000) for i, chunk := range chunks { index := i + 1 title := fmt.Sprintf("%s_%d", book.Bookname, index) @@ -38,7 +38,7 @@ func (convert Azw3Converter) Build(book Book) error { for _, section := range chunk { ch := mobi.Chapter{ Title: section.Title, - Chunks: mobi.Chunks(convert.wrapMobiTitle(section.Title, section.Content, book.Align)), + Chunks: mobi.Chunks(convert.wrapTitle(section.Title, section.Content, book.Align)), } mb.Chapters = append(mb.Chapters, ch) } @@ -71,7 +71,7 @@ func (convert Azw3Converter) Build(book Book) error { return nil } -func (convert Azw3Converter) wrapMobiTitle(title, content, align string) string { +func (convert Azw3Converter) wrapTitle(title, content, align string) string { var buff bytes.Buffer buff.WriteString(fmt.Sprintf(mobiTtmlTitleStart, align)) buff.WriteString(title) diff --git a/cmd/cli.go b/cmd/cli.go index eeb8406..60b51e5 100644 --- a/cmd/cli.go +++ b/cmd/cli.go @@ -29,11 +29,11 @@ func main() { fmt.Printf("错误: %s\n", err.Error()) os.Exit(1) } + kafcli.Analytics(version, secret, measurement, book.Format) book.ToString() if err := book.Parse(); err != nil { fmt.Printf("错误: %s\n", err.Error()) os.Exit(2) } book.Convert() - kafcli.Analytics(version, secret, measurement) } diff --git a/convert.go b/convert.go index 17a14fe..f4356f3 100644 --- a/convert.go +++ b/convert.go @@ -59,7 +59,7 @@ const ( htmlTitleStart = `

` mobiTtmlTitleStart = `

` htmlTitleEnd = "

" - DefaultMatchTips = "^.{0,8}(第.{1,20}[章节卷]|[Ss]ection.{1,20}|[Cc]hapter.{1,20}|[Pp]age.{1,20})|^\\d{1,4}$|^引子|^楔子|^章节目录|^章节" + DefaultMatchTips = "^第[0-9一二三四五六七八九十零〇百千两 ]+[章回节集卷]|^[Ss]ection.{1,20}$|^[Cc]hapter.{1,20}$|^[Pp]age.{1,20}$|^\\d{1,4}$|^引子$|^楔子$|^章节目录|^章节|^序章" cssContent = ` .title {text-align:%s} .content { diff --git a/epub.go b/epub.go index 80ff0d9..b93d2cd 100644 --- a/epub.go +++ b/epub.go @@ -12,7 +12,7 @@ import ( type EpubConverter struct{} -func (convert EpubConverter) wrapEpubTitle(title, content string) string { +func (convert EpubConverter) wrapTitle(title, content string) string { var buff bytes.Buffer buff.WriteString(htmlTitleStart) buff.WriteString(title) @@ -56,7 +56,7 @@ func (convert EpubConverter) Build(book Book) error { } for _, section := range book.SectionList { - e.AddSection(convert.wrapEpubTitle(section.Title, section.Content), section.Title, "", css) + e.AddSection(convert.wrapTitle(section.Title, section.Content), section.Title, "", css) } // Write the EPUB diff --git a/go.mod b/go.mod index 05cf42b..7d0a79b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/ystyle/kaf-cli require ( github.com/766b/mobi v0.0.0-20200528201125-c87aa9e3c890 github.com/bmaupin/go-epub v0.11.0 - github.com/leotaku/mobi v0.0.0-20211229161609-765f28ff1457 + github.com/leotaku/mobi v0.0.0-20220207093106-57a02a608c69 github.com/ystyle/google-analytics v0.0.0-20210425064301-a7f754dd0649 golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 golang.org/x/text v0.3.7 @@ -11,4 +11,4 @@ require ( replace golang.org/x/text => github.com/golang/text v0.3.2 -go 1.16 +go 1.18 diff --git a/go.sum b/go.sum index d72c987..efe0026 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ github.com/gofrs/uuid v3.1.0+incompatible h1:q2rtkjaKT4YEr6E1kamy0Ha4RtepWlQBedy github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang/text v0.3.2 h1:vDAeTQXl8YUdGoj2vMsMnzHi1xMJJ9S7iwnTBFL/pkA= github.com/golang/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -github.com/leotaku/mobi v0.0.0-20211229161609-765f28ff1457 h1:kFV3RufaLq26MT6kPWUzUK+7K27kaBLaBZyZIzG50j8= -github.com/leotaku/mobi v0.0.0-20211229161609-765f28ff1457/go.mod h1:aPjSURhp6tj0b/dLHyjzeygcitkmvO2/SO368XiPtrs= +github.com/leotaku/mobi v0.0.0-20220207093106-57a02a608c69 h1:dv945mB0CESmWHYQAhTDh2yR5dYSOVhn6FMFdApJ0Ss= +github.com/leotaku/mobi v0.0.0-20220207093106-57a02a608c69/go.mod h1:aPjSURhp6tj0b/dLHyjzeygcitkmvO2/SO368XiPtrs= github.com/vincent-petithory/dataurl v0.0.0-20191104211930-d1553a71de50 h1:uxE3GYdXIOfhMv3unJKETJEhw78gvzuQqRX/rVirc2A= github.com/vincent-petithory/dataurl v0.0.0-20191104211930-d1553a71de50/go.mod h1:FHafX5vmDzyP+1CQATJn7WFKc9CvnvxyvZy6I1MrG/U= github.com/ystyle/google-analytics v0.0.0-20210425064301-a7f754dd0649 h1:2uiow2Fw91jCIiYwMKvPF/lUMMdtVjgVpwqTcbC0fPU= diff --git a/mobil.go b/mobil.go index 392feed..9ecf213 100644 --- a/mobil.go +++ b/mobil.go @@ -2,27 +2,31 @@ package kafcli import ( "fmt" - mobi2 "github.com/766b/mobi" + "github.com/766b/mobi" + "time" ) type MobiConverter struct{} func (convert MobiConverter) Build(book Book) error { - m, err := mobi2.NewWriter(fmt.Sprintf("%s.mobi", book.Out)) + fmt.Println("使用第三方库生成mobi, 不保证所有样式都能正常显示") + fmt.Println("正在生成mobi...") + start := time.Now() + m, err := mobi.NewWriter(fmt.Sprintf("%s.mobi", book.Out)) if err != nil { panic(err) } m.Title(book.Bookname) - m.Compression(mobi2.CompressionNone) + m.Compression(mobi.CompressionNone) if book.Cover != "" { m.AddCover(book.Cover, book.Cover) } - m.NewExthRecord(mobi2.EXTH_DOCTYPE, "EBOK") - m.NewExthRecord(mobi2.EXTH_AUTHOR, book.Author) - + m.NewExthRecord(mobi.EXTH_DOCTYPE, "EBOK") + m.NewExthRecord(mobi.EXTH_AUTHOR, book.Author) for _, section := range book.SectionList { m.NewChapter(section.Title, []byte(section.Content)) } m.Write() + fmt.Println("生成mobi电子书耗时:", time.Now().Sub(start)) return nil } diff --git a/tools.go b/tools.go index a7271b7..6803d49 100644 --- a/tools.go +++ b/tools.go @@ -7,7 +7,6 @@ import ( "os" "os/exec" "path" - "runtime" "strings" "time" ) @@ -31,15 +30,15 @@ func run(command string, args ...string) error { func lookKindlegen() string { command := "kindlegen" - if runtime.GOOS == "windows" { - command = "kindlegen.exe" - } - kindlegen, _ := exec.LookPath(command) - if kindlegen == "" { - currentDir := path.Dir(os.Args[0]) - kindlegen = path.Join(currentDir, command) + kindlegen, err := exec.LookPath(command) + if err != nil { + currentDir, err := os.Executable() + if err != nil { + return "" + } + kindlegen = path.Join(path.Dir(currentDir), command) if exist, _ := isExists(kindlegen); !exist { - return kindlegen + return "" } } return kindlegen diff --git a/tools_test.go b/tools_test.go new file mode 100644 index 0000000..b8535c1 --- /dev/null +++ b/tools_test.go @@ -0,0 +1,25 @@ +package kafcli + +import ( + "fmt" + "os" + "os/exec" + "testing" +) + +func TestLook(t *testing.T) { + kindlegen, err := exec.LookPath("kindlegen") + if err != nil { + t.Fatal(err) + } + fmt.Println(kindlegen) +} + +func TestExe(t *testing.T) { + fmt.Println(os.Args) + path, err := os.Executable() + if err != nil { + t.Fatal(err) + } + fmt.Println(path) +} From 3eedb79ef3480f15ed04b5938070731f4039ef5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E6=96=B9=E6=98=9F=E7=97=95?= Date: Sat, 9 Apr 2022 12:35:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=AB=A0?= =?UTF-8?q?=E8=8A=82=E5=8C=B9=E9=85=8D=E8=A7=84=E5=88=99=EF=BC=8C=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96kindlegen=E5=AF=BB=E5=9D=80=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7d0a79b..fdca7a5 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/ystyle/kaf-cli require ( github.com/766b/mobi v0.0.0-20200528201125-c87aa9e3c890 github.com/bmaupin/go-epub v0.11.0 - github.com/leotaku/mobi v0.0.0-20220207093106-57a02a608c69 + github.com/leotaku/mobi v0.0.0-20220405163106-82e29bde7964 github.com/ystyle/google-analytics v0.0.0-20210425064301-a7f754dd0649 golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 golang.org/x/text v0.3.7 diff --git a/go.sum b/go.sum index efe0026..52f8afd 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ github.com/gofrs/uuid v3.1.0+incompatible h1:q2rtkjaKT4YEr6E1kamy0Ha4RtepWlQBedy github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang/text v0.3.2 h1:vDAeTQXl8YUdGoj2vMsMnzHi1xMJJ9S7iwnTBFL/pkA= github.com/golang/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -github.com/leotaku/mobi v0.0.0-20220207093106-57a02a608c69 h1:dv945mB0CESmWHYQAhTDh2yR5dYSOVhn6FMFdApJ0Ss= -github.com/leotaku/mobi v0.0.0-20220207093106-57a02a608c69/go.mod h1:aPjSURhp6tj0b/dLHyjzeygcitkmvO2/SO368XiPtrs= +github.com/leotaku/mobi v0.0.0-20220405163106-82e29bde7964 h1:h7CxQNRMxzHmVvDV1TPudN9XUF0YxYnh966lQ3kqEoo= +github.com/leotaku/mobi v0.0.0-20220405163106-82e29bde7964/go.mod h1:aPjSURhp6tj0b/dLHyjzeygcitkmvO2/SO368XiPtrs= github.com/vincent-petithory/dataurl v0.0.0-20191104211930-d1553a71de50 h1:uxE3GYdXIOfhMv3unJKETJEhw78gvzuQqRX/rVirc2A= github.com/vincent-petithory/dataurl v0.0.0-20191104211930-d1553a71de50/go.mod h1:FHafX5vmDzyP+1CQATJn7WFKc9CvnvxyvZy6I1MrG/U= github.com/ystyle/google-analytics v0.0.0-20210425064301-a7f754dd0649 h1:2uiow2Fw91jCIiYwMKvPF/lUMMdtVjgVpwqTcbC0fPU= From d385c3f11d8034047d1d224067d1ed6ecd1cbed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E6=96=B9=E6=98=9F=E7=97=95?= Date: Sat, 9 Apr 2022 12:37:47 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=AB=A0?= =?UTF-8?q?=E8=8A=82=E5=8C=B9=E9=85=8D=E8=A7=84=E5=88=99=EF=BC=8C=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96kindlegen=E5=AF=BB=E5=9D=80=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e604374..47f6a23 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -32,6 +32,7 @@ jobs: hash=`git rev-list --tags --max-count=1` version=`git describe --tags $hash` flag="-s -w -X main.secret=${{ secrets.API_SECRET }} -X main.measurement=${{ secrets.MEASUREMENT }} -X main.version=$version" + go mod tidy GOOS=windows GOARCH=amd64 go build -ldflags "$flag" -o build/windows-amd64/kaf-cli.exe cmd/cli.go GOOS=windows GOARCH=386 go build -ldflags "$flag" -o build/windows-386/kaf-cli.exe cmd/cli.go GOOS=linux GOARCH=amd64 go build -ldflags "$flag" -o build/linux-amd64/kaf-cli cmd/cli.go