diff --git a/src/langs/en.json b/src/langs/en.json index 6ee46cd..2ed5d4f 100644 --- a/src/langs/en.json +++ b/src/langs/en.json @@ -249,6 +249,14 @@ "settings_deletetowhere_desc": "Which trash should the plugin put the files into while deleting?", "settings_deletetowhere_system_trash": "system trash (default)", "settings_deletetowhere_obsidian_trash": "Obsidian .trash folder", + "settings_conflictaction": "Action For Conflict", + "settings_conflictaction_desc": "If a file is created or modified on both side since last update, it's a conflict event. How to deal with it?", + "settings_conflictaction_keep_newer": "newer version survives (default)", + "settings_conflictaction_keep_larger": "larger size version survives", + "settings_cleanemptyfolder": "Action For Empty Folders", + "settings_cleanemptyfolder_desc": "The sync algorithm majorly deals with files, so you need to specify how to deal with empty folders.", + "settings_cleanemptyfolder_skip": "leave them as is (default)", + "settings_cleanemptyfolder_clean_both": "delete local and remote", "settings_importexport": "Import and Export Partial Settings", "settings_export": "Export", "settings_export_desc": "Export not-oauth2 settings by generating a qrcode.", diff --git a/src/langs/zh_cn.json b/src/langs/zh_cn.json index aae1e2e..3ba1e1f 100644 --- a/src/langs/zh_cn.json +++ b/src/langs/zh_cn.json @@ -249,6 +249,14 @@ "settings_deletetowhere_desc": "插件触发删除操作时候,删除到哪里?", "settings_deletetowhere_system_trash": "系统回收站(默认)", "settings_deletetowhere_obsidian_trash": "Obsidian .trash 文件夹", + "settings_conflictaction": "处理冲突", + "settings_conflictaction_desc": "如果一个文件,在本地和服务器都被创建或者修改了,那么这就是一个“冲突”情况。如何处理?", + "settings_conflictaction_keep_newer": "保留最后修改的版本(默认)", + "settings_conflictaction_keep_larger": "保留文件体积较大的版本", + "settings_cleanemptyfolder": "处理空文件夹", + "settings_cleanemptyfolder_desc": "同步算法主要是针对文件处理的,您要要手动指定空文件夹如何处理。", + "settings_cleanemptyfolder_skip": "跳过处理空文件夹(默认)", + "settings_cleanemptyfolder_clean_both": "删除本地和服务器的空文件夹", "settings_importexport": "导入导出部分设置", "settings_export": "导出", "settings_export_desc": "用 QR 码导出非 oauth2 的设置信息。", diff --git a/src/langs/zh_tw.json b/src/langs/zh_tw.json index 7057050..ae52d67 100644 --- a/src/langs/zh_tw.json +++ b/src/langs/zh_tw.json @@ -249,6 +249,14 @@ "settings_deletetowhere_desc": "外掛觸發刪除操作時候,刪除到哪裡?", "settings_deletetowhere_system_trash": "系統回收站(預設)", "settings_deletetowhere_obsidian_trash": "Obsidian .trash 資料夾", + "settings_conflictaction": "處理衝突", + "settings_conflictaction_desc": "如果一個檔案,在本地和伺服器都被建立或者修改了,那麼這就是一個“衝突”情況。如何處理?", + "settings_conflictaction_keep_newer": "保留最後修改的版本(預設)", + "settings_conflictaction_keep_larger": "保留檔案體積較大的版本", + "settings_cleanemptyfolder": "處理空資料夾", + "settings_cleanemptyfolder_desc": "同步演算法主要是針對檔案處理的,您需要手動指定空資料夾如何處理。", + "settings_cleanemptyfolder_skip": "跳過處理空資料夾(預設)", + "settings_cleanemptyfolder_clean_both": "刪除本地和伺服器的空資料夾", "settings_importexport": "匯入匯出部分設定", "settings_export": "匯出", "settings_export_desc": "用 QR 碼匯出非 oauth2 的設定資訊。", diff --git a/src/settings.ts b/src/settings.ts index d758f77..c3a45f0 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -13,7 +13,9 @@ import { createElement, Eye, EyeOff } from "lucide"; import { API_VER_ENSURE_REQURL_OK, API_VER_REQURL, + ConflictActionType, DEFAULT_DEBUG_FOLDER, + EmptyFolderCleanType, SUPPORTED_SERVICES_TYPE, SUPPORTED_SERVICES_TYPE_WITH_REMOTE_BASE_DIR, VALID_REQURL, @@ -1993,6 +1995,44 @@ export class RemotelySaveSettingTab extends PluginSettingTab { }); }); + new Setting(advDiv) + .setName(t("settings_conflictaction")) + .setDesc(t("settings_conflictaction_desc")) + .addDropdown((dropdown) => { + dropdown.addOption( + "keep_newer", + t("settings_conflictaction_keep_newer") + ); + dropdown.addOption( + "keep_larger", + t("settings_conflictaction_keep_larger") + ); + dropdown + .setValue(this.plugin.settings.conflictAction ?? "keep_newer") + .onChange(async (val) => { + this.plugin.settings.conflictAction = val as ConflictActionType; + await this.plugin.saveSettings(); + }); + }); + + new Setting(advDiv) + .setName(t("settings_cleanemptyfolder")) + .setDesc(t("settings_cleanemptyfolder_desc")) + .addDropdown((dropdown) => { + dropdown.addOption("skip", t("settings_cleanemptyfolder_skip")); + dropdown.addOption( + "clean_both", + t("settings_cleanemptyfolder_clean_both") + ); + dropdown + .setValue(this.plugin.settings.howToCleanEmptyFolder ?? "skip") + .onChange(async (val) => { + this.plugin.settings.howToCleanEmptyFolder = + val as EmptyFolderCleanType; + await this.plugin.saveSettings(); + }); + }); + ////////////////////////////////////////////////// // below for import and export functions //////////////////////////////////////////////////