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
.last_goflutter_check
.last_go-flutter_check
.last_go-flutter_check

View File

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

View File

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

View File

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

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

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/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=

View File

@ -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 由不同的平台直接调用, 根据提供的路径初始化数据库, 资料文件夹

View File

@ -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"
)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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"`

View File

@ -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)),

View File

@ -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) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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",
);
}
}

View File

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