time exception add to error type enmu
This commit is contained in:
parent
088453f1ad
commit
b939cf1258
|
@ -1,3 +1,4 @@
|
|||
build
|
||||
.last_goflutter_check
|
||||
.last_go-flutter_check
|
||||
.last_go-flutter_check
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
"path"
|
||||
path2 "path"
|
||||
"path/filepath"
|
||||
"pgo/pikapi/config"
|
||||
"pikapi/main/config"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
_ "image/png"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"pgo/pikapi/database/properties"
|
||||
"pikapi/main/database/properties"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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=
|
||||
|
|
|
@ -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 由不同的平台直接调用, 根据提供的路径初始化数据库, 资料文件夹
|
|
@ -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"
|
||||
)
|
|
@ -2,7 +2,7 @@ package controller
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"pgo/pikapi/database/comic_center"
|
||||
"pikapi/main/database/comic_center"
|
||||
)
|
||||
|
||||
// EventNotify EventChannel 总线
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -10,7 +10,7 @@ import (
|
|||
_ "image/png"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"pgo/pikapi/database/comic_center"
|
||||
"pikapi/main/database/comic_center"
|
||||
"sync"
|
||||
)
|
||||
|
|
@ -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
|
|
@ -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"`
|
|
@ -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)),
|
|
@ -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) {
|
|
@ -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")
|
||||
}
|
|
@ -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")
|
||||
}
|
|
@ -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")
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package const_value
|
||||
package utils
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
|
@ -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)
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package mobile
|
||||
|
||||
import (
|
||||
"pgo/pikapi/config"
|
||||
"pgo/pikapi/controller"
|
||||
"pikapi/main/config"
|
||||
"pikapi/main/controller"
|
||||
)
|
||||
|
||||
func InitApplication(application string) {
|
||||
|
|
|
@ -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 "";
|
||||
}
|
||||
|
|
|
@ -157,10 +157,19 @@ class _AccountScreenState extends State<AccountScreen> {
|
|||
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",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,9 @@ class ContentError extends StatelessWidget {
|
|||
case ERROR_TYPE_PERMISSION:
|
||||
message = "没有权限或路径不可用";
|
||||
break;
|
||||
case ERROR_TYPE_TIME:
|
||||
message = "请检查设备时间";
|
||||
break;
|
||||
default:
|
||||
message = "啊哦, 被玩坏了";
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue