diff --git a/src/langs/en.json b/src/langs/en.json index e88f30e..751316e 100644 --- a/src/langs/en.json +++ b/src/langs/en.json @@ -53,6 +53,7 @@ "statusbar_time_lessminute": "Synced last minute ago", "statusbar_lastsync": "Synced {{time}} ago", "statusbar_syncing": "Syncing...", + "statusbar_failed": "Last sync failed", "statusbar_now": "Synced just now", "statusbar_lastsync_label": "Last successful Sync on {{date}}", "statusbar_lastsync_never": "Never Synced", diff --git a/src/langs/zh_cn.json b/src/langs/zh_cn.json index 6bf21fc..473d4da 100644 --- a/src/langs/zh_cn.json +++ b/src/langs/zh_cn.json @@ -53,6 +53,7 @@ "statusbar_time_lessminute": "一分钟之内同步", "statusbar_lastsync": "上一次同步于:{{time}}", "statusbar_syncing": "正在同步", + "statusbar_failed": "上次同步失败了", "statusbar_now": "刚同步完", "statusbar_lastsync_label": "上一次同步于:{{date}}", "statusbar_lastsync_never": "没触发过同步", diff --git a/src/langs/zh_tw.json b/src/langs/zh_tw.json index 21fbcc0..1eb8c1f 100644 --- a/src/langs/zh_tw.json +++ b/src/langs/zh_tw.json @@ -52,6 +52,7 @@ "statusbar_time_lessminute": "一分鐘之內同步", "statusbar_lastsync": "上一次同步於:{{time}}", "statusbar_syncing": "正在同步", + "statusbar_failed": "上次同步失敗了", "statusbar_now": "剛同步完", "statusbar_lastsync_label": "上一次同步於:{{date}}", "statusbar_lastsync_never": "沒觸發過同步", diff --git a/src/main.ts b/src/main.ts index 4998bce..644d461 100644 --- a/src/main.ts +++ b/src/main.ts @@ -337,11 +337,15 @@ export default class RemotelySavePlugin extends Plugin { } }; - const statusBarFunc = async (s: SyncTriggerSourceType, step: number) => { + const statusBarFunc = async ( + s: SyncTriggerSourceType, + step: number, + everythingOk: boolean + ) => { if (step === 1) { // change status to "syncing..." on statusbar this.updateLastSuccessSyncMsg(-1); - } else if (step === 8) { + } else if (step === 8 && everythingOk) { const lastSuccessSyncMillis = Date.now(); await upsertLastSuccessSyncTimeByVault( this.db, @@ -349,6 +353,8 @@ export default class RemotelySavePlugin extends Plugin { lastSuccessSyncMillis ); this.updateLastSuccessSyncMsg(lastSuccessSyncMillis); + } else if (!everythingOk) { + this.updateLastSuccessSyncMsg(-2); // magic number } }; @@ -1266,6 +1272,11 @@ export default class RemotelySavePlugin extends Plugin { lastSyncMsg = t("statusbar_syncing"); } + if (lastSuccessSyncMillis !== undefined && lastSuccessSyncMillis === -2) { + lastSyncMsg = t("statusbar_failed"); + lastSyncLabelMsg = t("statusbar_failed"); + } + if (lastSuccessSyncMillis !== undefined && lastSuccessSyncMillis > 0) { const deltaTime = Date.now() - lastSuccessSyncMillis; diff --git a/src/sync.ts b/src/sync.ts index 201fc0e..75ff1a8 100644 --- a/src/sync.ts +++ b/src/sync.ts @@ -1283,26 +1283,32 @@ export async function syncer( notifyFunc?: (s: SyncTriggerSourceType, step: number) => Promise, errNotifyFunc?: (s: SyncTriggerSourceType, error: Error) => Promise, ribboonFunc?: (s: SyncTriggerSourceType, step: number) => Promise, - statusBarFunc?: (s: SyncTriggerSourceType, step: number) => any, + statusBarFunc?: ( + s: SyncTriggerSourceType, + step: number, + everythingOk: boolean + ) => any, callbackSyncProcess?: any ) { console.info(`startting sync.`); markIsSyncingFunc(true); + let everythingOk = true; + let step = 0; // dry mode only await notifyFunc?.(triggerSource, step); step = 1; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); profiler.insert("start big sync func"); try { step = 2; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); if (fsEncrypt.innerFs !== fsRemote) { throw Error(`your enc should has inner of the remote`); } @@ -1317,7 +1323,7 @@ export async function syncer( step = 3; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); const remoteEntityList = await fsEncrypt.walk(); // console.debug(`remoteEntityList:`); // console.debug(remoteEntityList); @@ -1326,7 +1332,7 @@ export async function syncer( step = 4; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); const localEntityList = await fsLocal.walk(); // console.debug(`localEntityList:`); // console.debug(localEntityList); @@ -1335,7 +1341,7 @@ export async function syncer( step = 5; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); const prevSyncEntityList = await getAllPrevSyncRecordsByVaultAndProfile( db, vaultRandomID, @@ -1348,7 +1354,7 @@ export async function syncer( step = 6; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); let mixedEntityMappings = await ensembleMixedEnties( localEntityList, prevSyncEntityList, @@ -1391,7 +1397,7 @@ export async function syncer( if (triggerSource !== "dry") { await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); await doActualSync( mixedEntityMappings, fsLocal, @@ -1409,13 +1415,14 @@ export async function syncer( } else { await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); profiler.insert( `finish step${step} (skip actual sync because of dry run)` ); } } catch (error: any) { profiler.insert("start error branch"); + everythingOk = false; await errNotifyFunc?.(triggerSource, error as Error); profiler.insert("finish error branch"); @@ -1429,7 +1436,7 @@ export async function syncer( step = 8; await notifyFunc?.(triggerSource, step); await ribboonFunc?.(triggerSource, step); - await statusBarFunc?.(triggerSource, step); + await statusBarFunc?.(triggerSource, step, everythingOk); console.info(`endding sync.`); markIsSyncingFunc(false);