diff --git a/plugin/src/database/sync-settings.ts b/plugin/src/database/sync-settings.ts index b262c93f..d4eb9a86 100644 --- a/plugin/src/database/sync-settings.ts +++ b/plugin/src/database/sync-settings.ts @@ -1,6 +1,7 @@ export interface SyncSettings { remoteUri: string; token: string; + vaultName: string; fetchChangesUpdateIntervalMs: number; isSyncEnabled: boolean; } @@ -8,6 +9,7 @@ export interface SyncSettings { export const DEFAULT_SETTINGS: SyncSettings = { remoteUri: "", token: "", + vaultName: "default", fetchChangesUpdateIntervalMs: 1000, isSyncEnabled: true, }; diff --git a/plugin/src/services/sync_service.ts b/plugin/src/services/sync_service.ts index e19e81c3..caa98789 100644 --- a/plugin/src/services/sync_service.ts +++ b/plugin/src/services/sync_service.ts @@ -12,7 +12,6 @@ import { } from "src/database/document-metadata.js"; export class SyncServer { - private static VAULT_ID = "default"; private client: Client; public constructor(private database: Database) { @@ -56,22 +55,25 @@ export class SyncServer { contentBytes: Uint8Array; createdDate: Date; }): Promise { - const response = await this.client.POST("/vaults/{vault_id}/documents", { - params: { - path: { - vault_id: SyncServer.VAULT_ID, + const response = await this.client.POST( + "/vaults/{vault_id}/documents", + { + params: { + path: { + vault_id: this.database.getSettings().vaultName, + }, + header: { + authorization: + "Bearer " + this.database.getSettings().token, + }, }, - header: { - authorization: - "Bearer " + this.database.getSettings().token, + body: { + contentBase64: lib.bytes_to_base64(contentBytes), + createdDate: createdDate.toISOString(), + relativePath, }, - }, - body: { - contentBase64: lib.bytes_to_base64(contentBytes), - createdDate: createdDate.toISOString(), - relativePath, - }, - }); + } + ); if (!response.data) { throw new Error(`Failed to create document: ${response.error}`); @@ -102,7 +104,7 @@ export class SyncServer { { params: { path: { - vault_id: SyncServer.VAULT_ID, + vault_id: this.database.getSettings().vaultName, document_id: documentId, }, header: { @@ -144,7 +146,7 @@ export class SyncServer { { params: { path: { - vault_id: SyncServer.VAULT_ID, + vault_id: this.database.getSettings().vaultName, document_id: documentId, }, header: { @@ -180,7 +182,7 @@ export class SyncServer { { params: { path: { - vault_id: SyncServer.VAULT_ID, + vault_id: this.database.getSettings().vaultName, document_id: documentId, }, header: { @@ -208,7 +210,7 @@ export class SyncServer { const response = await this.client.GET("/vaults/{vault_id}/documents", { params: { path: { - vault_id: SyncServer.VAULT_ID, + vault_id: this.database.getSettings().vaultName, }, header: { authorization: diff --git a/plugin/src/views/settings-tab.ts b/plugin/src/views/settings-tab.ts index e4525bc6..4e4dffef 100644 --- a/plugin/src/views/settings-tab.ts +++ b/plugin/src/views/settings-tab.ts @@ -5,6 +5,8 @@ import { Database } from "src/database/database"; import { SyncServer } from "src/services/sync_service"; export class SyncSettingsTab extends PluginSettingTab { + private editedVaultName: string; + public constructor( app: App, plugin: SyncPlugin, @@ -12,6 +14,11 @@ export class SyncSettingsTab extends PluginSettingTab { private syncServer: SyncServer ) { super(app, plugin); + this.editedVaultName = this.database.getSettings().vaultName; + this.database.addOnSettingsChangeHandlers((s) => { + this.editedVaultName = s.vaultName; + this.display(); + }); } display(): void { @@ -60,6 +67,34 @@ export class SyncSettingsTab extends PluginSettingTab { }) ); + new Setting(containerEl) + .setName("Vault name") + .setDesc( + "Set the name of the remote vault that you want to sync with" + ) + .setTooltip("todo, links to dcocs") + .addText((text) => + text + .setPlaceholder("My Obsidian Vault") + .setValue(this.database.getSettings().vaultName) + .onChange((value) => (this.editedVaultName = value)) + ) + .addButton((button) => + button.setButtonText("Apply").onClick(async () => { + if ( + this.editedVaultName === + this.database.getSettings().vaultName + ) { + return; + } + this.database.setSetting("vaultName", this.editedVaultName); + await this.database.resetSyncState(); + new Notice( + "Sync state has been reset, you will need to resync" + ); + }) + ); + new Setting(containerEl) .setName("Access token") .setDesc(