merge statusbar
This commit is contained in:
commit
b49e545759
@ -87,6 +87,8 @@ export interface RemotelySavePluginSettings {
|
|||||||
logToDB?: boolean;
|
logToDB?: boolean;
|
||||||
skipSizeLargerThan?: number;
|
skipSizeLargerThan?: number;
|
||||||
ignorePaths?: string[];
|
ignorePaths?: string[];
|
||||||
|
enableStatusBarInfo?: boolean;
|
||||||
|
lastSuccessSync?: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit c75336a2a52fcf00147eea01ca767872dff2d0b4
|
Subproject commit a8f6e1d05def00387ee5a50a829fd91e60ae6351
|
||||||
81
src/main.ts
81
src/main.ts
@ -6,6 +6,7 @@ import {
|
|||||||
addIcon,
|
addIcon,
|
||||||
setIcon,
|
setIcon,
|
||||||
FileSystemAdapter,
|
FileSystemAdapter,
|
||||||
|
Platform,
|
||||||
} from "obsidian";
|
} from "obsidian";
|
||||||
import cloneDeep from "lodash/cloneDeep";
|
import cloneDeep from "lodash/cloneDeep";
|
||||||
import { createElement, RotateCcw, RefreshCcw, FileText } from "lucide";
|
import { createElement, RotateCcw, RefreshCcw, FileText } from "lucide";
|
||||||
@ -86,6 +87,8 @@ const DEFAULT_SETTINGS: RemotelySavePluginSettings = {
|
|||||||
logToDB: false,
|
logToDB: false,
|
||||||
skipSizeLargerThan: -1,
|
skipSizeLargerThan: -1,
|
||||||
ignorePaths: [],
|
ignorePaths: [],
|
||||||
|
enableStatusBarInfo: true,
|
||||||
|
lastSuccessSync: -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
interface OAuth2Info {
|
interface OAuth2Info {
|
||||||
@ -126,6 +129,7 @@ export default class RemotelySavePlugin extends Plugin {
|
|||||||
settings: RemotelySavePluginSettings;
|
settings: RemotelySavePluginSettings;
|
||||||
db: InternalDBs;
|
db: InternalDBs;
|
||||||
syncStatus: SyncStatusType;
|
syncStatus: SyncStatusType;
|
||||||
|
statusBarElement: HTMLSpanElement;
|
||||||
oauth2Info: OAuth2Info;
|
oauth2Info: OAuth2Info;
|
||||||
currLogLevel: string;
|
currLogLevel: string;
|
||||||
currSyncMsg?: string;
|
currSyncMsg?: string;
|
||||||
@ -357,11 +361,17 @@ export default class RemotelySavePlugin extends Plugin {
|
|||||||
this.syncStatus = "finish";
|
this.syncStatus = "finish";
|
||||||
this.syncStatus = "idle";
|
this.syncStatus = "idle";
|
||||||
|
|
||||||
|
this.settings.lastSuccessSync = Date.now();
|
||||||
|
|
||||||
if (this.syncRibbon !== undefined) {
|
if (this.syncRibbon !== undefined) {
|
||||||
setIcon(this.syncRibbon, iconNameSyncWait);
|
setIcon(this.syncRibbon, iconNameSyncWait);
|
||||||
this.syncRibbon.setAttribute("aria-label", originLabel);
|
this.syncRibbon.setAttribute("aria-label", originLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.statusBarElement !== undefined) {
|
||||||
|
this.updateLastSuccessSyncMsg(this.settings.lastSuccessSync);
|
||||||
|
}
|
||||||
|
|
||||||
log.info(
|
log.info(
|
||||||
`${
|
`${
|
||||||
this.manifest.id
|
this.manifest.id
|
||||||
@ -673,6 +683,21 @@ export default class RemotelySavePlugin extends Plugin {
|
|||||||
async () => this.syncRun("manual")
|
async () => this.syncRun("manual")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Create Status Bar Item (not supported on mobile)
|
||||||
|
if (!Platform.isMobileApp && this.settings.enableStatusBarInfo === true) {
|
||||||
|
const statusBarItem = this.addStatusBarItem();
|
||||||
|
this.statusBarElement = statusBarItem.createEl("span");
|
||||||
|
this.statusBarElement.setAttribute("aria-label-position", "top");
|
||||||
|
|
||||||
|
this.updateLastSuccessSyncMsg(this.settings.lastSuccessSync);
|
||||||
|
// update statusbar text every 30 seconds
|
||||||
|
this.registerInterval(
|
||||||
|
window.setInterval(() => {
|
||||||
|
this.updateLastSuccessSyncMsg(this.settings.lastSuccessSync);
|
||||||
|
}, 1000 * 30)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
this.addCommand({
|
this.addCommand({
|
||||||
id: "start-sync",
|
id: "start-sync",
|
||||||
name: t("command_startsync"),
|
name: t("command_startsync"),
|
||||||
@ -970,6 +995,62 @@ export default class RemotelySavePlugin extends Plugin {
|
|||||||
this.currSyncMsg = msg;
|
this.currSyncMsg = msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateLastSuccessSyncMsg(lastSuccessSyncMillis?: number) {
|
||||||
|
if (this.statusBarElement === undefined) return;
|
||||||
|
|
||||||
|
const t = (x: TransItemType, vars?: any) => {
|
||||||
|
return this.i18n.t(x, vars);
|
||||||
|
};
|
||||||
|
|
||||||
|
let lastSyncMsg = t("statusbar_lastsync_never");
|
||||||
|
let lastSyncLabelMsg = t("statusbar_lastsync_never_label");
|
||||||
|
|
||||||
|
if (lastSuccessSyncMillis !== undefined && lastSuccessSyncMillis > 0) {
|
||||||
|
const deltaTime = Date.now() - lastSuccessSyncMillis;
|
||||||
|
|
||||||
|
// create human readable time
|
||||||
|
const years = Math.floor(deltaTime / 31556952000);
|
||||||
|
const months = Math.floor(deltaTime / 2629746000);
|
||||||
|
const weeks = Math.floor(deltaTime / 604800000);
|
||||||
|
const days = Math.floor(deltaTime / 86400000);
|
||||||
|
const hours = Math.floor(deltaTime / 3600000);
|
||||||
|
const minutes = Math.floor(deltaTime / 60000);
|
||||||
|
let timeText = "";
|
||||||
|
|
||||||
|
if (years > 0) {
|
||||||
|
timeText = t("statusbar_time_years", { time: years });
|
||||||
|
} else if (months > 0) {
|
||||||
|
timeText = t("statusbar_time_months", { time: months });
|
||||||
|
} else if (weeks > 0) {
|
||||||
|
timeText = t("statusbar_time_weeks", { time: weeks });
|
||||||
|
} else if (days > 0) {
|
||||||
|
timeText = t("statusbar_time_days", { time: days });
|
||||||
|
} else if (hours > 0) {
|
||||||
|
timeText = t("statusbar_time_hours", { time: hours });
|
||||||
|
} else if (minutes > 0) {
|
||||||
|
timeText = t("statusbar_time_minutes", { time: minutes });
|
||||||
|
} else {
|
||||||
|
timeText = t("statusbar_time_lessminute");
|
||||||
|
}
|
||||||
|
|
||||||
|
let dateText = new Date(lastSuccessSyncMillis).toLocaleTimeString(
|
||||||
|
navigator.language,
|
||||||
|
{
|
||||||
|
weekday: "long",
|
||||||
|
year: "numeric",
|
||||||
|
month: "long",
|
||||||
|
day: "numeric",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
lastSyncMsg = t("statusbar_lastsync", { time: timeText });
|
||||||
|
lastSyncLabelMsg = t("statusbar_lastsync_label", { date: dateText });
|
||||||
|
}
|
||||||
|
|
||||||
|
this.statusBarElement.setText(lastSyncMsg);
|
||||||
|
this.statusBarElement.setAttribute("aria-label", lastSyncLabelMsg);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Because data.json contains sensitive information,
|
* Because data.json contains sensitive information,
|
||||||
* We usually want to ignore it in the version control.
|
* We usually want to ignore it in the version control.
|
||||||
|
|||||||
@ -197,6 +197,8 @@ class ChangeRemoteBaseDirModal extends Modal {
|
|||||||
button.onClick(async () => {
|
button.onClick(async () => {
|
||||||
this.plugin.settings[this.service].remoteBaseDir =
|
this.plugin.settings[this.service].remoteBaseDir =
|
||||||
this.newRemoteBaseDir;
|
this.newRemoteBaseDir;
|
||||||
|
// reset last sync time
|
||||||
|
this.plugin.settings.lastSuccessSync = -1;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
new Notice(t("modal_remotebasedir_notice"));
|
new Notice(t("modal_remotebasedir_notice"));
|
||||||
this.close();
|
this.close();
|
||||||
@ -1596,6 +1598,22 @@ export class RemotelySaveSettingTab extends PluginSettingTab {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// custom status bar items is not supported on mobile
|
||||||
|
if (!Platform.isMobileApp) {
|
||||||
|
new Setting(basicDiv)
|
||||||
|
.setName(t("settings_enablestatusbar_info"))
|
||||||
|
.setDesc(t("settings_enablestatusbar_info_desc"))
|
||||||
|
.addToggle((toggle) => {
|
||||||
|
toggle
|
||||||
|
.setValue(this.plugin.settings.enableStatusBarInfo)
|
||||||
|
.onChange(async (val) => {
|
||||||
|
this.plugin.settings.enableStatusBarInfo = val;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
new Notice(t("settings_enablestatusbar_reloadrequired_notice"));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
new Setting(basicDiv)
|
new Setting(basicDiv)
|
||||||
.setName(t("settings_ignorepaths"))
|
.setName(t("settings_ignorepaths"))
|
||||||
.setDesc(t("settings_ignorepaths_desc"))
|
.setDesc(t("settings_ignorepaths_desc"))
|
||||||
|
|||||||
@ -23,6 +23,8 @@ const DEFAULT_SETTINGS: RemotelySavePluginSettings = {
|
|||||||
password: "password",
|
password: "password",
|
||||||
serviceType: "s3",
|
serviceType: "s3",
|
||||||
currLogLevel: "info",
|
currLogLevel: "info",
|
||||||
|
ignorePaths: ["somefoldertoignore"],
|
||||||
|
enableStatusBarInfo: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
describe("Config Persist tests", () => {
|
describe("Config Persist tests", () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user