From 9d9068cf4a6eb8d8b8f48005a9c6db0dea135c80 Mon Sep 17 00:00:00 2001 From: b5f0d6c3 Date: Wed, 20 Oct 2021 19:58:44 +0800 Subject: update mkvlib:add logcallback --- mkvlib/shared.go | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) (limited to 'mkvlib/shared.go') diff --git a/mkvlib/shared.go b/mkvlib/shared.go index 5deaf68..397e667 100644 --- a/mkvlib/shared.go +++ b/mkvlib/shared.go @@ -1,6 +1,7 @@ package mkvlib import ( + "fmt" "log" "os" "os/exec" @@ -10,13 +11,27 @@ import ( ) const libName = "mkvlib" -const libVer = "v1.0.4" +const libVer = "v1.1.0" const LibFName = libName + " " + libVer -var _instance *mkvProcessor +type logCallback func(string) + +type processorGetter struct { + checked bool + instance *mkvProcessor +} + +var _instance = new(processorGetter) + +func GetProcessorGetterInstance() *processorGetter { + return _instance +} + +func (self *processorGetter) InitProcessorInstance(lcb logCallback) bool { + self.checked = false + self.instance = nil -func GetInstance() *mkvProcessor { ec := 0 n := "PATH" s := ":" @@ -37,18 +52,34 @@ func GetInstance() *mkvProcessor { _, _mkvextract := exec.LookPath(mkvextract) _, _mkvmerge := exec.LookPath(mkvmerge) if _ttx != nil || _pyftsubset != nil { - log.Printf(`Missing dependency: fonttools (need "%s" & "%s").`, ttx, pyftsubset) + printLog(lcb, `Missing dependency: fonttools (need "%s" & "%s").`, ttx, pyftsubset) ec++ } if _mkvextract != nil || _mkvmerge != nil { - log.Printf(`Missing dependency: mkvtoolnix (need "%s" & "%s").`, mkvextract, mkvmerge) + printLog(lcb, `Missing dependency: mkvtoolnix (need "%s" & "%s").`, mkvextract, mkvmerge) ec++ } - if ec > 0 { - return nil + + r := ec == 0 + if r { + self.checked = true + self.instance = new(mkvProcessor) } - if _instance == nil { - _instance = new(mkvProcessor) + + return r +} + +func (self *processorGetter) GetProcessorInstance() *mkvProcessor { + if self.checked { + return self.instance + } + return nil +} + +func printLog(lcb logCallback, f string, v ...interface{}) { + if lcb != nil { + lcb(fmt.Sprintf(f, v...)) + } else { + log.Printf(f, v...) } - return _instance } -- cgit v1.2.1