summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/go.mod18
-rw-r--r--cmd/main.go155
-rw-r--r--cmd/title.go7
-rw-r--r--cmd/title_windows.go21
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)
+ }
+ }
+ }
+}