diff --git a/kernel/api/sync.go b/kernel/api/sync.go index 88f70b104..5facf7998 100644 --- a/kernel/api/sync.go +++ b/kernel/api/sync.go @@ -58,7 +58,7 @@ func performSync(c *gin.Context) { } if 3 != model.Conf.Sync.Mode { - model.SyncData(false, false, true) + model.SyncData(true) return } diff --git a/kernel/model/conf.go b/kernel/model/conf.go index 38dbc8bcd..7de936068 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -450,7 +450,7 @@ func Close(force bool, execInstallPkg int) (exitCode int) { if !force { if Conf.Sync.Enabled && 3 != Conf.Sync.Mode && ((IsSubscriber() && conf.ProviderSiYuan == Conf.Sync.Provider) || conf.ProviderSiYuan != Conf.Sync.Provider) { - syncData(false, true, false) + syncData(true, false) if 0 != ExitSyncSucc { exitCode = 1 return diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 3da736214..fe7a9f677 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -126,7 +126,7 @@ func SyncDataJob() { return } - SyncData(false, false, false) + SyncData(false) } func BootSyncData() { @@ -170,19 +170,19 @@ func BootSyncData() { return } -func SyncData(boot, exit, byHand bool) { - syncData(boot, exit, byHand) +func SyncData(byHand bool) { + syncData(false, byHand) } -func syncData(boot, exit, byHand bool) { +func syncData(exit, byHand bool) { defer logging.Recover() - if !checkSync(boot, exit, byHand) { + if !checkSync(false, exit, byHand) { return } util.BroadcastByType("main", "syncing", 0, Conf.Language(81), nil) - if !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 + if !exit && !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 util.BroadcastByType("main", "syncing", 2, Conf.Language(28), nil) return } @@ -190,11 +190,6 @@ func syncData(boot, exit, byHand bool) { syncLock.Lock() defer syncLock.Unlock() - if boot { - util.IncBootProgress(3, "Syncing data from the cloud...") - BootSyncSucc = 0 - logging.LogInfof("sync before boot") - } if exit { ExitSyncSucc = 0 logging.LogInfof("sync before exit") @@ -576,7 +571,7 @@ func isProviderOnline() (ret bool) { checkURL = Conf.Sync.WebDAV.Endpoint default: logging.LogWarnf("unknown provider: %d", Conf.Sync.Provider) - util.IsOnline("") + return false } if ret = util.IsOnline(checkURL); !ret { diff --git a/kernel/util/net.go b/kernel/util/net.go index 7da8f1e38..b7a964a16 100644 --- a/kernel/util/net.go +++ b/kernel/util/net.go @@ -32,20 +32,13 @@ import ( ) func IsOnline(checkURL string) bool { + _, err := url.Parse(checkURL) + if nil != err { + logging.LogWarnf("invalid check URL [%s]", checkURL) + return false + } + if "" == checkURL { - if isOnline("https://www.baidu.com") { - return true - } - - if isOnline("https://icanhazip.com") { - return true - } - - if isOnline("https://api.ipify.org") { - return true - } - - logging.LogWarnf("network is offline") return false } @@ -57,10 +50,16 @@ func IsOnline(checkURL string) bool { return false } -func isOnline(checkURL string) bool { - c := req.C().SetTimeout(1 * time.Second) - _, err := c.R().Head(checkURL) - return nil == err +func isOnline(checkURL string) (ret bool) { + for i := 0; i < 3; i++ { + c := req.C().SetTimeout(3 * time.Second) + _, err := c.R().Head(checkURL) + ret = nil == err + if ret { + break + } + } + return } func GetRemoteAddr(session *melody.Session) string {