time exception add to error type enmu

This commit is contained in:
niuhuan 2021-10-22 10:24:39 +08:00
parent 088453f1ad
commit b939cf1258
31 changed files with 129 additions and 123 deletions

1
go/.gitignore vendored
View File

@ -1,3 +1,4 @@
build build
.last_goflutter_check .last_goflutter_check
.last_go-flutter_check .last_go-flutter_check
.last_go-flutter_check

View File

@ -7,7 +7,7 @@ import (
"path" "path"
path2 "path" path2 "path"
"path/filepath" "path/filepath"
"pgo/pikapi/config" "pikapi/main/config"
"runtime" "runtime"
"strings" "strings"
) )

View File

@ -10,7 +10,7 @@ import (
_ "image/png" _ "image/png"
"os" "os"
"path/filepath" "path/filepath"
"pgo/pikapi/database/properties" "pikapi/main/database/properties"
"strconv" "strconv"
"strings" "strings"
) )

View File

@ -1,14 +1,81 @@
package main package main
import ( import (
"errors"
"github.com/go-flutter-desktop/go-flutter" "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-flutter-desktop/plugins/url_launcher"
"github.com/go-gl/glfw/v3.3/glfw"
"github.com/miguelpruivo/flutter_file_picker/go" "github.com/miguelpruivo/flutter_file_picker/go"
"pgo/cmd/plugin/pikapi" "pikapi/main/controller"
"pikapi/main/database/properties"
"strconv"
"sync"
) )
var options = []flutter.Option{ var options = []flutter.Option{
flutter.AddPlugin(&pikapi.Plugin{}), flutter.AddPlugin(&Plugin{}),
flutter.AddPlugin(&file_picker.FilePickerPlugin{}), flutter.AddPlugin(&file_picker.FilePickerPlugin{}),
flutter.AddPlugin(&url_launcher.UrlLauncherPlugin{}), 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
}

View File

@ -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
}

View File

@ -1,4 +1,4 @@
module pgo module pikapi
go 1.16 go 1.16

View File

@ -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/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 h1:hXl9AMW20Php3xWlWZr2Acw50tqeblLgtLfLoRCACmA=
github.com/miguelpruivo/flutter_file_picker/go v0.0.0-20210622152105-9f0a811028a0/go.mod h1:csuW+TFyYKtiUwNvcvhcpyX4quPI7Pvv0SUogdqCW4I= 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 h1:SewxTGOkoJ3JUmLLQ1RXUcqLdifT5502QZQl09eCGL8=
github.com/niuhuan/pica-go v0.0.0-20211008032829-544a58c56bee/go.mod h1:fx2m+OgMeEZf6/TrfblV9i85SjPsOGbnjIL2gohxP4M= 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= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=

View File

@ -2,11 +2,11 @@ package config
import ( import (
"path" "path"
"pgo/pikapi/controller" "pikapi/main/controller"
"pgo/pikapi/database/comic_center" "pikapi/main/database/comic_center"
"pgo/pikapi/database/network_cache" "pikapi/main/database/network_cache"
"pgo/pikapi/database/properties" "pikapi/main/database/properties"
"pgo/pikapi/utils" "pikapi/main/utils"
) )
// InitApplication 由不同的平台直接调用, 根据提供的路径初始化数据库, 资料文件夹 // InitApplication 由不同的平台直接调用, 根据提供的路径初始化数据库, 资料文件夹

View File

@ -9,9 +9,9 @@ import (
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"pgo/pikapi/database/comic_center" "pikapi/main/database/comic_center"
"pgo/pikapi/database/network_cache" "pikapi/main/database/network_cache"
"pgo/pikapi/database/properties" "pikapi/main/database/properties"
"regexp" "regexp"
"time" "time"
) )

View File

@ -2,7 +2,7 @@ package controller
import ( import (
"encoding/json" "encoding/json"
"pgo/pikapi/database/comic_center" "pikapi/main/database/comic_center"
) )
// EventNotify EventChannel 总线 // EventNotify EventChannel 总线

View File

@ -5,9 +5,8 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"pgo/pikapi/const_value" "pikapi/main/database/comic_center"
"pgo/pikapi/database/comic_center" utils2 "pikapi/main/utils"
utils2 "pgo/pikapi/utils"
"time" "time"
) )
@ -316,9 +315,9 @@ func downloadThePicture(picturePoint *comic_center.ComicDownloadPicture) error {
// 将图片保存到文件 // 将图片保存到文件
dir := filepath.Dir(realPath) dir := filepath.Dir(realPath)
if _, err := os.Stat(dir); os.IsNotExist(err) { 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 { if err != nil {
return err return err
} }

View File

@ -12,8 +12,8 @@ import (
"net" "net"
"os" "os"
"path" "path"
"pgo/pikapi/const_value" "pikapi/main/database/comic_center"
"pgo/pikapi/database/comic_center" "pikapi/main/utils"
"strings" "strings"
"time" "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"))) 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)) println(fmt.Sprintf("DIR : %s", dirPath))
err = os.Mkdir(dirPath, const_value.CreateDirMode) err = os.Mkdir(dirPath, utils.CreateDirMode)
if err != nil { if err != nil {
return err return err
} }
err = os.Mkdir(path.Join(dirPath, "pictures"), const_value.CreateDirMode) err = os.Mkdir(path.Join(dirPath, "pictures"), utils.CreateDirMode)
if err != nil { if err != nil {
return err return err
} }

View File

@ -10,7 +10,7 @@ import (
_ "image/png" _ "image/png"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"pgo/pikapi/database/comic_center" "pikapi/main/database/comic_center"
"sync" "sync"
) )

View File

@ -11,9 +11,8 @@ import (
"net" "net"
"os" "os"
path2 "path" path2 "path"
"pgo/pikapi/const_value" "pikapi/main/database/comic_center"
"pgo/pikapi/database/comic_center" "pikapi/main/utils"
"pgo/pikapi/utils"
"strconv" "strconv"
"strings" "strings"
) )
@ -168,7 +167,7 @@ func importComicDownload(zipPath string) error {
if err != nil { if err != nil {
return err 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 { for _, ep := range jsonComicDownload.EpList {
utils.Mkdir(path2.Join(comicDirPath, strconv.Itoa(int(ep.EpOrder)))) utils.Mkdir(path2.Join(comicDirPath, strconv.Itoa(int(ep.EpOrder))))
@ -184,7 +183,7 @@ func importComicDownload(zipPath string) error {
if err != nil { if err != nil {
return err return err
} }
return ioutil.WriteFile(downloadPath(picture.LocalPath), entryBuff, const_value.CreateFileMode) return ioutil.WriteFile(downloadPath(picture.LocalPath), entryBuff, utils.CreateFileMode)
}() }()
if err != nil { if err != nil {
return err return err

View File

@ -1,6 +1,6 @@
package controller package controller
import "pgo/pikapi/database/comic_center" import "pikapi/main/database/comic_center"
type DisplayImageData struct { type DisplayImageData struct {
FileSize int64 `json:"fileSize"` FileSize int64 `json:"fileSize"`

View File

@ -10,11 +10,10 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
path2 "path" path2 "path"
"pgo/pikapi/const_value" "pikapi/main/database/comic_center"
"pgo/pikapi/database/comic_center" "pikapi/main/database/network_cache"
"pgo/pikapi/database/network_cache" "pikapi/main/database/properties"
"pgo/pikapi/database/properties" "pikapi/main/utils"
"pgo/pikapi/utils"
"strconv" "strconv"
"time" "time"
) )
@ -271,7 +270,7 @@ func downloadComicLogo(comic *comic_center.ComicDownload) {
} }
if err == nil { if err == nil {
comicLogoPath := path2.Join(comic.ID, "logo") 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_center.UpdateDownloadLogo(
comic.ID, comic.ID,
int64(len(buff)), int64(len(buff)),

View File

@ -1,6 +1,6 @@
package controller package controller
import "pgo/pikapi/database/comic_center" import "pikapi/main/database/comic_center"
// 根据comicId获得标题但是必须是下载的内容(暂未使用) // 根据comicId获得标题但是必须是下载的内容(暂未使用)
func specialDownloadTitle(comicId string) (string, error) { func specialDownloadTitle(comicId string) (string, error) {

View File

@ -5,7 +5,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause" "gorm.io/gorm/clause"
"path" "path"
"pgo/pikapi/const_value" "pikapi/main/utils"
"sync" "sync"
"time" "time"
) )
@ -17,7 +17,7 @@ func InitDBConnect(databaseDir string) {
mutex.Lock() mutex.Lock()
defer mutex.Unlock() defer mutex.Unlock()
var err error 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 { if err != nil {
panic("failed to connect database") panic("failed to connect database")
} }

View File

@ -6,7 +6,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause" "gorm.io/gorm/clause"
"path" "path"
"pgo/pikapi/const_value" "pikapi/main/utils"
"sync" "sync"
"time" "time"
) )
@ -24,7 +24,7 @@ func InitDBConnect(databaseDir string) {
mutex.Lock() mutex.Lock()
defer mutex.Unlock() defer mutex.Unlock()
var err error 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 { if err != nil {
panic("failed to connect database") panic("failed to connect database")
} }

View File

@ -6,7 +6,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause" "gorm.io/gorm/clause"
"path" "path"
"pgo/pikapi/const_value" "pikapi/main/utils"
"strconv" "strconv"
"sync" "sync"
) )
@ -18,7 +18,7 @@ func InitDBConnect(databaseDir string) {
mutex.Lock() mutex.Lock()
defer mutex.Unlock() defer mutex.Unlock()
var err error 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 { if err != nil {
panic("failed to connect database") panic("failed to connect database")
} }

View File

@ -1,4 +1,4 @@
package const_value package utils
import ( import (
"gorm.io/gorm" "gorm.io/gorm"

View File

@ -2,13 +2,12 @@ package utils
import ( import (
"os" "os"
"pgo/pikapi/const_value"
) )
func Mkdir(dir string) { func Mkdir(dir string) {
if _, err := os.Stat(dir); err != nil { if _, err := os.Stat(dir); err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
err = os.MkdirAll(dir, const_value.CreateDirMode) err = os.MkdirAll(dir, CreateDirMode)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -1,8 +1,8 @@
package mobile package mobile
import ( import (
"pgo/pikapi/config" "pikapi/main/config"
"pgo/pikapi/controller" "pikapi/main/controller"
) )
func InitApplication(application string) { func InitApplication(application string) {

View File

@ -1,5 +1,6 @@
const ERROR_TYPE_NETWORK = "NETWORK_ERROR"; const ERROR_TYPE_NETWORK = "NETWORK_ERROR";
const ERROR_TYPE_PERMISSION = "PERMISSION_ERROR"; const ERROR_TYPE_PERMISSION = "PERMISSION_ERROR";
const ERROR_TYPE_TIME = "TIME_ERROR";
// , 便 // , 便
String errorType(String error) { String errorType(String error) {
@ -15,5 +16,8 @@ String errorType(String error) {
if (error.contains("permission denied")) { if (error.contains("permission denied")) {
return ERROR_TYPE_PERMISSION; return ERROR_TYPE_PERMISSION;
} }
if (error.contains("time is not synchronize")) {
return ERROR_TYPE_TIME;
}
return ""; return "";
} }

View File

@ -157,10 +157,19 @@ class _AccountScreenState extends State<AccountScreen> {
setState(() { setState(() {
_logging = false; _logging = false;
}); });
var message = "请检查账号密码";
switch (errorType("$e")) {
case ERROR_TYPE_NETWORK:
message = "网络不通";
break;
case ERROR_TYPE_TIME:
message = "请检查设备时间";
break;
}
alertDialog( alertDialog(
context, context,
'登录失败', '登录失败',
errorType("$e") == ERROR_TYPE_NETWORK ? '网络不通' : '请检查账号密码', "$message\n$e",
); );
} }
} }

View File

@ -27,6 +27,9 @@ class ContentError extends StatelessWidget {
case ERROR_TYPE_PERMISSION: case ERROR_TYPE_PERMISSION:
message = "没有权限或路径不可用"; message = "没有权限或路径不可用";
break; break;
case ERROR_TYPE_TIME:
message = "请检查设备时间";
break;
default: default:
message = "啊哦, 被玩坏了"; message = "啊哦, 被玩坏了";
break; break;