diff options
| author | Kurenai <[email protected]> | 2021-10-17 00:02:28 +0800 |
|---|---|---|
| committer | Kurenai <[email protected]> | 2021-10-17 00:24:41 +0800 |
| commit | 70a7c4edba281122c05ef46e9efffe5309ef8448 (patch) | |
| tree | 9e22aa0754ec0bea7f040874dfe3d626a4549503 /cmd | |
| parent | 41568b669ab6bf44e01c7b95584a03a9ce7de8eb (diff) | |
Bump to 3.1.1
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/go.mod | 18 | ||||
| -rw-r--r-- | cmd/main.go | 155 | ||||
| -rw-r--r-- | cmd/title.go | 7 | ||||
| -rw-r--r-- | cmd/title_windows.go | 21 |
4 files changed, 201 insertions, 0 deletions
diff --git a/cmd/go.mod b/cmd/go.mod new file mode 100644 index 0000000..00db11c --- /dev/null +++ b/cmd/go.mod @@ -0,0 +1,18 @@ +module mkvtool + +go 1.17 + +require mkvlib v0.0.0 + +require ( + github.com/antchfx/xmlquery v1.3.8 // indirect + github.com/antchfx/xpath v1.2.0 // indirect + github.com/asticode/go-astikit v0.20.0 // indirect + github.com/asticode/go-astisub v0.19.0 // indirect + github.com/asticode/go-astits v1.8.0 // indirect + github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect + golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect + golang.org/x/text v0.3.2 // indirect +) + +replace mkvlib => ../lib diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..509de29 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,155 @@ +package main + +import ( + "flag" + "fmt" + "log" + "mkvlib" + "os" + "path" + "runtime" + "strings" +) + +const appName = "MKV Tool" +const appVer = "3.1.1" +const tTitle = appName + " " + appVer + +var processer = mkvlib.GetInstance() + +var appFN = fmt.Sprintf("%s %s %s/%s", appName, appVer, runtime.GOOS, runtime.GOARCH) + +type arrayArg []string + +func (self *arrayArg) String() string { + return fmt.Sprintf("%v", []string(*self)) +} + +func (self *arrayArg) Set(value string) error { + *self = append(*self, value) + return nil +} + +func main() { + setWindowTitle(tTitle) + s := "" + data := "" + dist := "" + f := "" + c := false + d := false + m := false + n := false + q := false + v := false + clean := false + sl, st := "", "" + af, ao := "", "" + asses := new(arrayArg) + flag.StringVar(&s, "s", "", "Source folder.") + flag.StringVar(&f, "f", "", "MKV file. (join single mode)") + flag.BoolVar(&c, "c", false, "Create mode.") + flag.BoolVar(&d, "d", false, "Dump mode.") + flag.BoolVar(&m, "m", false, "Make mode.") + flag.BoolVar(&q, "q", false, "Query mode.") + flag.Var(asses, "a", "ASS files. (multiple & join ass mode)") + flag.BoolVar(&n, "n", false, "Not do ass font subset. (dump mode only)") + flag.BoolVar(&clean, "clean", false, "Clean original file subtitles and fonts. (create mode only)") + flag.StringVar(&sl, "sl", "chi", " Subtitle language. (create & make mode only)") + flag.StringVar(&st, "st", "", " Subtitle title. (create & make mode only)") + flag.StringVar(&af, "af", "", " ASS fonts folder. (ASS mode only)") + flag.StringVar(&ao, "ao", "", " ASS output folder. (ASS mode only)") + flag.StringVar(&data, "data", "data", "Subtitles & Fonts folder (dump & make mode only)") + flag.StringVar(&dist, "dist", "dist", "Results output folder (make mode only)") + + flag.BoolVar(&v, "v", false, "Show app info.") + flag.Parse() + + ec := 0 + if v { + fmt.Println(appFN + " (powered by " + mkvlib.LibFName + ")") + return + } + + if processer == nil { + ec++ + return + } + + if len(*asses) > 0 { + if !processer.ASSFontSubset(*asses, af, ao) { + ec++ + } + return + } + if f != "" { + if d { + if !processer.DumpMKV(f, data, !n) { + ec++ + } + return + } + if q { + r, err := processer.CheckSubset(f) + if err { + ec++ + } else { + log.Printf("Need font subset: %v", !r) + } + return + + } + } + if s != "" { + if q { + lines := processer.QueryFolder(s) + if len(lines) > 0 { + log.Printf("Has item(s).") + data := []byte(strings.Join(lines, "\n")) + if os.WriteFile("list.txt", data, os.ModePerm) != nil { + log.Printf("Faild to write the result file") + ec++ + } + } else { + log.Printf("No item.") + } + return + } + if c { + v := path.Join(s, "v") + s := path.Join(s, "s") + f := path.Join(s, "f") + o := path.Join(s, "o") + if !processer.CreateMKVs(v, s, f, "", o, sl, st, clean) { + ec++ + } + return + } + if d { + if !processer.DumpMKVs(s, data, !n) { + ec++ + } + return + } + if m { + if !processer.MakeMKVs(s, data, dist, sl, st) { + ec++ + } + return + } + if !processer.DumpMKVs(s, data, true) { + ec++ + } else if !processer.MakeMKVs(s, data, dist, sl, st) { + ec++ + } + return + } else { + ec++ + flag.PrintDefaults() + } + defer os.Exit(ec) +} + +func init() { + runtime.GOMAXPROCS(runtime.NumCPU()) +} diff --git a/cmd/title.go b/cmd/title.go new file mode 100644 index 0000000..b292eb5 --- /dev/null +++ b/cmd/title.go @@ -0,0 +1,7 @@ +//go:build linux + +package main + +func setWindowTitle(title string) { + fmt.Printf("\033]0;%s\007", title) +} diff --git a/cmd/title_windows.go b/cmd/title_windows.go new file mode 100644 index 0000000..fc40785 --- /dev/null +++ b/cmd/title_windows.go @@ -0,0 +1,21 @@ +//go:build windows +package main + +import ( + "syscall" + "unsafe" +) + +func setWindowTitle(title string) { + kernel32, err := syscall.LoadLibrary("kernel32.dll") + if err == nil { + defer syscall.FreeLibrary(kernel32) + setConsoleTitle, err := syscall.GetProcAddress(kernel32, "SetConsoleTitleW") + if err == nil { + ptr, err := syscall.UTF16PtrFromString(title) + if err == nil { + syscall.Syscall(setConsoleTitle, 1, uintptr(unsafe.Pointer(ptr)), 0, 0) + } + } + } +} |
