diff --git a/go/.gitignore b/go/.gitignore index fd0e2eb..596bcc6 100644 --- a/go/.gitignore +++ b/go/.gitignore @@ -1,3 +1,4 @@ build .last_goflutter_check .last_go-flutter_check +.last_go-flutter_check diff --git a/go/cmd/init.go b/go/cmd/init.go index fddcc97..bccdfd3 100644 --- a/go/cmd/init.go +++ b/go/cmd/init.go @@ -7,7 +7,7 @@ import ( "path" path2 "path" "path/filepath" - "pgo/pikapi/config" + "pikapi/main/config" "runtime" "strings" ) diff --git a/go/cmd/main.go b/go/cmd/main.go index 3fce810..309e62b 100644 --- a/go/cmd/main.go +++ b/go/cmd/main.go @@ -10,7 +10,7 @@ import ( _ "image/png" "os" "path/filepath" - "pgo/pikapi/database/properties" + "pikapi/main/database/properties" "strconv" "strings" ) diff --git a/go/cmd/options.go b/go/cmd/options.go index a58f795..533688e 100644 --- a/go/cmd/options.go +++ b/go/cmd/options.go @@ -1,14 +1,81 @@ package main import ( + "errors" "github.com/go-flutter-desktop/go-flutter" + "github.com/go-flutter-desktop/go-flutter/plugin" "github.com/go-flutter-desktop/plugins/url_launcher" + "github.com/go-gl/glfw/v3.3/glfw" "github.com/miguelpruivo/flutter_file_picker/go" - "pgo/cmd/plugin/pikapi" + "pikapi/main/controller" + "pikapi/main/database/properties" + "strconv" + "sync" ) var options = []flutter.Option{ - flutter.AddPlugin(&pikapi.Plugin{}), + flutter.AddPlugin(&Plugin{}), flutter.AddPlugin(&file_picker.FilePickerPlugin{}), flutter.AddPlugin(&url_launcher.UrlLauncherPlugin{}), } + +var eventMutex = sync.Mutex{} +var eventSink *plugin.EventSink + +type EventHandler struct { +} + +func (s *EventHandler) OnListen(arguments interface{}, sink *plugin.EventSink) { + eventMutex.Lock() + defer eventMutex.Unlock() + eventSink = sink +} + +func (s *EventHandler) OnCancel(arguments interface{}) { + eventMutex.Lock() + defer eventMutex.Unlock() + eventSink = nil +} + +const channelName = "method" + +type Plugin struct { +} + +func (p *Plugin) InitPlugin(messenger plugin.BinaryMessenger) error { + + channel := plugin.NewMethodChannel(messenger, channelName, plugin.StandardMethodCodec{}) + + channel.HandleFunc("flatInvoke", func(arguments interface{}) (interface{}, error) { + if argumentsMap, ok := arguments.(map[interface{}]interface{}); ok { + if method, ok := argumentsMap["method"].(string); ok { + if params, ok := argumentsMap["params"].(string); ok { + return controller.FlatInvoke(method, params) + } + } + } + return nil, errors.New("params error") + }) + + exporting := plugin.NewEventChannel(messenger, "flatEvent", plugin.StandardMethodCodec{}) + exporting.Handle(&EventHandler{}) + + controller.EventNotify = func(message string) { + eventMutex.Lock() + defer eventMutex.Unlock() + sink := eventSink + if sink != nil { + sink.Success(message) + } + } + + return nil // no error +} + +func (p *Plugin) InitPluginGLFW(window *glfw.Window) error { + window.SetSizeCallback(func(w *glfw.Window, width int, height int) { + properties.SaveProperty("window_width", strconv.Itoa(width)) + properties.SaveProperty("window_height", strconv.Itoa(height)) + }) + return nil +} diff --git a/go/cmd/plugin/pikapi/plugin.go b/go/cmd/plugin/pikapi/plugin.go deleted file mode 100644 index a09d1f6..0000000 --- a/go/cmd/plugin/pikapi/plugin.go +++ /dev/null @@ -1,72 +0,0 @@ -package pikapi - -import ( - "errors" - "github.com/go-flutter-desktop/go-flutter/plugin" - "github.com/go-gl/glfw/v3.3/glfw" - "pgo/pikapi/controller" - "pgo/pikapi/database/properties" - "strconv" - "sync" -) - -var eventMutex = sync.Mutex{} -var eventSink *plugin.EventSink - -type EventHandler struct { -} - -func (s *EventHandler) OnListen(arguments interface{}, sink *plugin.EventSink) { - eventMutex.Lock() - defer eventMutex.Unlock() - eventSink = sink -} - -func (s *EventHandler) OnCancel(arguments interface{}) { - eventMutex.Lock() - defer eventMutex.Unlock() - eventSink = nil -} - -const channelName = "method" - -type Plugin struct { -} - -func (p *Plugin) InitPlugin(messenger plugin.BinaryMessenger) error { - - channel := plugin.NewMethodChannel(messenger, channelName, plugin.StandardMethodCodec{}) - - channel.HandleFunc("flatInvoke", func(arguments interface{}) (interface{}, error) { - if argumentsMap, ok := arguments.(map[interface{}]interface{}); ok { - if method, ok := argumentsMap["method"].(string); ok { - if params, ok := argumentsMap["params"].(string); ok { - return controller.FlatInvoke(method, params) - } - } - } - return nil, errors.New("params error") - }) - - exporting := plugin.NewEventChannel(messenger, "flatEvent", plugin.StandardMethodCodec{}) - exporting.Handle(&EventHandler{}) - - controller.EventNotify = func(message string) { - eventMutex.Lock() - defer eventMutex.Unlock() - sink := eventSink - if sink != nil { - sink.Success(message) - } - } - - return nil // no error -} - -func (p *Plugin) InitPluginGLFW(window *glfw.Window) error { - window.SetSizeCallback(func(w *glfw.Window, width int, height int) { - properties.SaveProperty("window_width", strconv.Itoa(width)) - properties.SaveProperty("window_height", strconv.Itoa(height)) - }) - return nil -} diff --git a/go/go.mod b/go/go.mod index 0a8bec1..99d18eb 100644 --- a/go/go.mod +++ b/go/go.mod @@ -1,4 +1,4 @@ -module pgo +module pikapi go 1.16 diff --git a/go/go.sum b/go/go.sum index 2543f14..e968d8b 100644 --- a/go/go.sum +++ b/go/go.sum @@ -35,8 +35,6 @@ github.com/mattn/go-sqlite3 v1.14.5 h1:1IdxlwTNazvbKJQSxoJ5/9ECbEeaTTyeU7sEAZ5KK github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/miguelpruivo/flutter_file_picker/go v0.0.0-20210622152105-9f0a811028a0 h1:hXl9AMW20Php3xWlWZr2Acw50tqeblLgtLfLoRCACmA= github.com/miguelpruivo/flutter_file_picker/go v0.0.0-20210622152105-9f0a811028a0/go.mod h1:csuW+TFyYKtiUwNvcvhcpyX4quPI7Pvv0SUogdqCW4I= -github.com/niuhuan/pica-go v0.0.0-20210923020558-090104e7b1a7 h1:E0WsH0UeFvuGiaEb1/tyy35ot76YDJKZ2q0/QjRQMWA= -github.com/niuhuan/pica-go v0.0.0-20210923020558-090104e7b1a7/go.mod h1:fx2m+OgMeEZf6/TrfblV9i85SjPsOGbnjIL2gohxP4M= github.com/niuhuan/pica-go v0.0.0-20211008032829-544a58c56bee h1:SewxTGOkoJ3JUmLLQ1RXUcqLdifT5502QZQl09eCGL8= github.com/niuhuan/pica-go v0.0.0-20211008032829-544a58c56bee/go.mod h1:fx2m+OgMeEZf6/TrfblV9i85SjPsOGbnjIL2gohxP4M= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/go/pikapi/config/common.go b/go/main/config/common.go similarity index 83% rename from go/pikapi/config/common.go rename to go/main/config/common.go index 7e46166..f153e69 100644 --- a/go/pikapi/config/common.go +++ b/go/main/config/common.go @@ -2,11 +2,11 @@ package config import ( "path" - "pgo/pikapi/controller" - "pgo/pikapi/database/comic_center" - "pgo/pikapi/database/network_cache" - "pgo/pikapi/database/properties" - "pgo/pikapi/utils" + "pikapi/main/controller" + "pikapi/main/database/comic_center" + "pikapi/main/database/network_cache" + "pikapi/main/database/properties" + "pikapi/main/utils" ) // InitApplication 由不同的平台直接调用, 根据提供的路径初始化数据库, 资料文件夹 diff --git a/go/pikapi/controller/client.go b/go/main/controller/client.go similarity index 99% rename from go/pikapi/controller/client.go rename to go/main/controller/client.go index 326db00..6bd90f7 100644 --- a/go/pikapi/controller/client.go +++ b/go/main/controller/client.go @@ -9,9 +9,9 @@ import ( "net" "net/http" "net/url" - "pgo/pikapi/database/comic_center" - "pgo/pikapi/database/network_cache" - "pgo/pikapi/database/properties" + "pikapi/main/database/comic_center" + "pikapi/main/database/network_cache" + "pikapi/main/database/properties" "regexp" "time" ) diff --git a/go/pikapi/controller/common.go b/go/main/controller/common.go similarity index 96% rename from go/pikapi/controller/common.go rename to go/main/controller/common.go index 0c79fd2..555fc2f 100644 --- a/go/pikapi/controller/common.go +++ b/go/main/controller/common.go @@ -2,7 +2,7 @@ package controller import ( "encoding/json" - "pgo/pikapi/database/comic_center" + "pikapi/main/database/comic_center" ) // EventNotify EventChannel 总线 diff --git a/go/pikapi/controller/download.go b/go/main/controller/download.go similarity index 97% rename from go/pikapi/controller/download.go rename to go/main/controller/download.go index 000b263..39c9bf8 100644 --- a/go/pikapi/controller/download.go +++ b/go/main/controller/download.go @@ -5,9 +5,8 @@ import ( "io/ioutil" "os" "path/filepath" - "pgo/pikapi/const_value" - "pgo/pikapi/database/comic_center" - utils2 "pgo/pikapi/utils" + "pikapi/main/database/comic_center" + utils2 "pikapi/main/utils" "time" ) @@ -316,9 +315,9 @@ func downloadThePicture(picturePoint *comic_center.ComicDownloadPicture) error { // 将图片保存到文件 dir := filepath.Dir(realPath) if _, err := os.Stat(dir); os.IsNotExist(err) { - os.Mkdir(dir, const_value.CreateDirMode) + os.Mkdir(dir, utils2.CreateDirMode) } - err = ioutil.WriteFile(downloadPath(picturePath), buff, const_value.CreateFileMode) + err = ioutil.WriteFile(downloadPath(picturePath), buff, utils2.CreateFileMode) if err != nil { return err } diff --git a/go/pikapi/controller/export.go b/go/main/controller/export.go similarity index 98% rename from go/pikapi/controller/export.go rename to go/main/controller/export.go index 21c9415..6fe70f2 100644 --- a/go/pikapi/controller/export.go +++ b/go/main/controller/export.go @@ -12,8 +12,8 @@ import ( "net" "os" "path" - "pgo/pikapi/const_value" - "pgo/pikapi/database/comic_center" + "pikapi/main/database/comic_center" + "pikapi/main/utils" "strings" "time" ) @@ -386,11 +386,11 @@ func exportComicDownloadToJPG(params string) error { } dirPath := path.Join(dir, fmt.Sprintf("%s-%s", reasonablePath(comic.Title), time.Now().Format("2006_01_02_15_04_05.999"))) println(fmt.Sprintf("DIR : %s", dirPath)) - err = os.Mkdir(dirPath, const_value.CreateDirMode) + err = os.Mkdir(dirPath, utils.CreateDirMode) if err != nil { return err } - err = os.Mkdir(path.Join(dirPath, "pictures"), const_value.CreateDirMode) + err = os.Mkdir(path.Join(dirPath, "pictures"), utils.CreateDirMode) if err != nil { return err } diff --git a/go/pikapi/controller/game.go b/go/main/controller/game.go similarity index 100% rename from go/pikapi/controller/game.go rename to go/main/controller/game.go diff --git a/go/pikapi/controller/image.go b/go/main/controller/image.go similarity index 98% rename from go/pikapi/controller/image.go rename to go/main/controller/image.go index f0e37b6..eb1cbcd 100644 --- a/go/pikapi/controller/image.go +++ b/go/main/controller/image.go @@ -10,7 +10,7 @@ import ( _ "image/png" "io/ioutil" "net/http" - "pgo/pikapi/database/comic_center" + "pikapi/main/database/comic_center" "sync" ) diff --git a/go/pikapi/controller/import.go b/go/main/controller/import.go similarity index 96% rename from go/pikapi/controller/import.go rename to go/main/controller/import.go index bbc2f2a..4c9e0a4 100644 --- a/go/pikapi/controller/import.go +++ b/go/main/controller/import.go @@ -11,9 +11,8 @@ import ( "net" "os" path2 "path" - "pgo/pikapi/const_value" - "pgo/pikapi/database/comic_center" - "pgo/pikapi/utils" + "pikapi/main/database/comic_center" + "pikapi/main/utils" "strconv" "strings" ) @@ -168,7 +167,7 @@ func importComicDownload(zipPath string) error { if err != nil { return err } - ioutil.WriteFile(path2.Join(comicDirPath, "logo"), logoBuff, const_value.CreateFileMode) + ioutil.WriteFile(path2.Join(comicDirPath, "logo"), logoBuff, utils.CreateFileMode) } for _, ep := range jsonComicDownload.EpList { utils.Mkdir(path2.Join(comicDirPath, strconv.Itoa(int(ep.EpOrder)))) @@ -184,7 +183,7 @@ func importComicDownload(zipPath string) error { if err != nil { return err } - return ioutil.WriteFile(downloadPath(picture.LocalPath), entryBuff, const_value.CreateFileMode) + return ioutil.WriteFile(downloadPath(picture.LocalPath), entryBuff, utils.CreateFileMode) }() if err != nil { return err diff --git a/go/pikapi/controller/modles.go b/go/main/controller/modles.go similarity index 94% rename from go/pikapi/controller/modles.go rename to go/main/controller/modles.go index e31273c..c202f51 100644 --- a/go/pikapi/controller/modles.go +++ b/go/main/controller/modles.go @@ -1,6 +1,6 @@ package controller -import "pgo/pikapi/database/comic_center" +import "pikapi/main/database/comic_center" type DisplayImageData struct { FileSize int64 `json:"fileSize"` diff --git a/go/pikapi/controller/network.go b/go/main/controller/network.go similarity index 100% rename from go/pikapi/controller/network.go rename to go/main/controller/network.go diff --git a/go/pikapi/controller/pikapi.go b/go/main/controller/pikapi.go similarity index 98% rename from go/pikapi/controller/pikapi.go rename to go/main/controller/pikapi.go index 823efc2..ddf63fa 100644 --- a/go/pikapi/controller/pikapi.go +++ b/go/main/controller/pikapi.go @@ -10,11 +10,10 @@ import ( "io/ioutil" "os" path2 "path" - "pgo/pikapi/const_value" - "pgo/pikapi/database/comic_center" - "pgo/pikapi/database/network_cache" - "pgo/pikapi/database/properties" - "pgo/pikapi/utils" + "pikapi/main/database/comic_center" + "pikapi/main/database/network_cache" + "pikapi/main/database/properties" + "pikapi/main/utils" "strconv" "time" ) @@ -271,7 +270,7 @@ func downloadComicLogo(comic *comic_center.ComicDownload) { } if err == nil { comicLogoPath := path2.Join(comic.ID, "logo") - ioutil.WriteFile(downloadPath(comicLogoPath), buff, const_value.CreateFileMode) + ioutil.WriteFile(downloadPath(comicLogoPath), buff, utils.CreateFileMode) comic_center.UpdateDownloadLogo( comic.ID, int64(len(buff)), diff --git a/go/pikapi/controller/special.go b/go/main/controller/special.go similarity index 86% rename from go/pikapi/controller/special.go rename to go/main/controller/special.go index 2ebbaca..7f90848 100644 --- a/go/pikapi/controller/special.go +++ b/go/main/controller/special.go @@ -1,6 +1,6 @@ package controller -import "pgo/pikapi/database/comic_center" +import "pikapi/main/database/comic_center" // 根据comicId,获得标题,但是必须是下载的内容(暂未使用) func specialDownloadTitle(comicId string) (string, error) { diff --git a/go/pikapi/database/comic_center/center.go b/go/main/database/comic_center/center.go similarity index 99% rename from go/pikapi/database/comic_center/center.go rename to go/main/database/comic_center/center.go index 7fdea84..d0dfe30 100644 --- a/go/pikapi/database/comic_center/center.go +++ b/go/main/database/comic_center/center.go @@ -5,7 +5,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" "path" - "pgo/pikapi/const_value" + "pikapi/main/utils" "sync" "time" ) @@ -17,7 +17,7 @@ func InitDBConnect(databaseDir string) { mutex.Lock() defer mutex.Unlock() var err error - db, err = gorm.Open(sqlite.Open(path.Join(databaseDir, "comic_center.db")), const_value.GormConfig) + db, err = gorm.Open(sqlite.Open(path.Join(databaseDir, "comic_center.db")), utils.GormConfig) if err != nil { panic("failed to connect database") } diff --git a/go/pikapi/database/comic_center/entities.go b/go/main/database/comic_center/entities.go similarity index 100% rename from go/pikapi/database/comic_center/entities.go rename to go/main/database/comic_center/entities.go diff --git a/go/pikapi/database/network_cache/cache.go b/go/main/database/network_cache/cache.go similarity index 96% rename from go/pikapi/database/network_cache/cache.go rename to go/main/database/network_cache/cache.go index a05076b..d996505 100644 --- a/go/pikapi/database/network_cache/cache.go +++ b/go/main/database/network_cache/cache.go @@ -6,7 +6,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" "path" - "pgo/pikapi/const_value" + "pikapi/main/utils" "sync" "time" ) @@ -24,7 +24,7 @@ func InitDBConnect(databaseDir string) { mutex.Lock() defer mutex.Unlock() var err error - db, err = gorm.Open(sqlite.Open(path.Join(databaseDir, "network_cache.db")), const_value.GormConfig) + db, err = gorm.Open(sqlite.Open(path.Join(databaseDir, "network_cache.db")), utils.GormConfig) if err != nil { panic("failed to connect database") } diff --git a/go/pikapi/database/properties/properties.go b/go/main/database/properties/properties.go similarity index 97% rename from go/pikapi/database/properties/properties.go rename to go/main/database/properties/properties.go index 0272867..f5c0f93 100644 --- a/go/pikapi/database/properties/properties.go +++ b/go/main/database/properties/properties.go @@ -6,7 +6,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" "path" - "pgo/pikapi/const_value" + "pikapi/main/utils" "strconv" "sync" ) @@ -18,7 +18,7 @@ func InitDBConnect(databaseDir string) { mutex.Lock() defer mutex.Unlock() var err error - db, err = gorm.Open(sqlite.Open(path.Join(databaseDir, "properties.db")), const_value.GormConfig) + db, err = gorm.Open(sqlite.Open(path.Join(databaseDir, "properties.db")), utils.GormConfig) if err != nil { panic("failed to connect database") } diff --git a/go/pikapi/const_value/common.go b/go/main/utils/const.go similarity index 91% rename from go/pikapi/const_value/common.go rename to go/main/utils/const.go index 58db97d..79bef19 100644 --- a/go/pikapi/const_value/common.go +++ b/go/main/utils/const.go @@ -1,4 +1,4 @@ -package const_value +package utils import ( "gorm.io/gorm" diff --git a/go/pikapi/utils/file.go b/go/main/utils/file.go similarity index 71% rename from go/pikapi/utils/file.go rename to go/main/utils/file.go index fb8f05f..eed4ad8 100644 --- a/go/pikapi/utils/file.go +++ b/go/main/utils/file.go @@ -2,13 +2,12 @@ package utils import ( "os" - "pgo/pikapi/const_value" ) func Mkdir(dir string) { if _, err := os.Stat(dir); err != nil { if os.IsNotExist(err) { - err = os.MkdirAll(dir, const_value.CreateDirMode) + err = os.MkdirAll(dir, CreateDirMode) if err != nil { panic(err) } diff --git a/go/pikapi/utils/mutex.go b/go/main/utils/mutex.go similarity index 100% rename from go/pikapi/utils/mutex.go rename to go/main/utils/mutex.go diff --git a/go/pikapi/utils/time.go b/go/main/utils/time.go similarity index 100% rename from go/pikapi/utils/time.go rename to go/main/utils/time.go diff --git a/go/mobile/mobile.go b/go/mobile/mobile.go index 96535bc..37e06be 100644 --- a/go/mobile/mobile.go +++ b/go/mobile/mobile.go @@ -1,8 +1,8 @@ package mobile import ( - "pgo/pikapi/config" - "pgo/pikapi/controller" + "pikapi/main/config" + "pikapi/main/controller" ) func InitApplication(application string) { diff --git a/lib/basic/enum/ErrorTypes.dart b/lib/basic/enum/ErrorTypes.dart index 6e6bd72..47191fe 100644 --- a/lib/basic/enum/ErrorTypes.dart +++ b/lib/basic/enum/ErrorTypes.dart @@ -1,5 +1,6 @@ const ERROR_TYPE_NETWORK = "NETWORK_ERROR"; const ERROR_TYPE_PERMISSION = "PERMISSION_ERROR"; +const ERROR_TYPE_TIME = "TIME_ERROR"; // 错误的类型, 方便照展示和谐的提示 String errorType(String error) { @@ -15,5 +16,8 @@ String errorType(String error) { if (error.contains("permission denied")) { return ERROR_TYPE_PERMISSION; } + if (error.contains("time is not synchronize")) { + return ERROR_TYPE_TIME; + } return ""; } diff --git a/lib/screens/AccountScreen.dart b/lib/screens/AccountScreen.dart index 1a40d7c..e98bb78 100644 --- a/lib/screens/AccountScreen.dart +++ b/lib/screens/AccountScreen.dart @@ -157,10 +157,19 @@ class _AccountScreenState extends State { setState(() { _logging = false; }); + var message = "请检查账号密码"; + switch (errorType("$e")) { + case ERROR_TYPE_NETWORK: + message = "网络不通"; + break; + case ERROR_TYPE_TIME: + message = "请检查设备时间"; + break; + } alertDialog( context, '登录失败', - errorType("$e") == ERROR_TYPE_NETWORK ? '网络不通' : '请检查账号密码', + "$message\n$e", ); } } diff --git a/lib/screens/components/ContentError.dart b/lib/screens/components/ContentError.dart index b219cc4..190536c 100644 --- a/lib/screens/components/ContentError.dart +++ b/lib/screens/components/ContentError.dart @@ -27,6 +27,9 @@ class ContentError extends StatelessWidget { case ERROR_TYPE_PERMISSION: message = "没有权限或路径不可用"; break; + case ERROR_TYPE_TIME: + message = "请检查设备时间"; + break; default: message = "啊哦, 被玩坏了"; break;