From 9a521a174f0b65bcf5e2df94f561698c6ce7b7e0 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:57:19 +0100 Subject: [PATCH 1/5] Added confirmation before overwriting an existing note --- src/main.ts | 13 ++++++-- src/modals/ConfirmOverwriteModal.ts | 46 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/modals/ConfirmOverwriteModal.ts diff --git a/src/main.ts b/src/main.ts index bdb02bb..1846627 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,6 +13,7 @@ import { SteamAPI } from './api/apis/SteamAPI'; import { WikipediaAPI } from './api/apis/WikipediaAPI'; import { ComicVineAPI } from './api/apis/ComicVineAPI'; import { MediaDbFolderImportModal } from './modals/MediaDbFolderImportModal'; +import { ConfirmOverwriteModal } from './modals/ConfirmOverwriteModal'; import type { MediaTypeModel } from './models/MediaTypeModel'; import { PropertyMapper } from './settings/PropertyMapper'; import { PropertyMapping, PropertyMappingModel } from './settings/PropertyMapping'; @@ -508,9 +509,17 @@ export default class MediaDbPlugin extends Plugin { fileName = replaceIllegalFileNameCharactersInString(fileName); const filePath = `${folder.path}/${fileName}.md`; - // find and delete file with the same name + // look if file already exists and ask if it should be overwritten const file = this.app.vault.getAbstractFileByPath(filePath); if (file) { + const shouldOverwrite = await new Promise(resolve => { + new ConfirmOverwriteModal(this.app, fileName, resolve).open(); + }); + + if (!shouldOverwrite) { + throw new Error('MDB | file creation cancelled by user'); + } + await this.app.vault.delete(file); } @@ -518,7 +527,7 @@ export default class MediaDbPlugin extends Plugin { const targetFile = await this.app.vault.create(filePath, fileContent); console.debug(`MDB | created new file at ${filePath}`); - // open newly crated file + // open newly created file if (options.openNote) { const activeLeaf = this.app.workspace.getUnpinnedLeaf(); if (!activeLeaf) { diff --git a/src/modals/ConfirmOverwriteModal.ts b/src/modals/ConfirmOverwriteModal.ts new file mode 100644 index 0000000..501afea --- /dev/null +++ b/src/modals/ConfirmOverwriteModal.ts @@ -0,0 +1,46 @@ +import type { App } from 'obsidian'; +import { Modal, Setting } from 'obsidian'; + +export class ConfirmOverwriteModal extends Modal { + result: boolean = false; + onSubmit: (result: boolean) => void; + fileName: string; + + constructor(app: App, fileName: string, onSubmit: (result: boolean) => void) { + super(app); + this.fileName = fileName; + this.onSubmit = onSubmit; + } + + onOpen() { + const { contentEl } = this; + contentEl.createEl('h2', { text: 'File already exists' }); + contentEl.createEl('p', { text: `The file "${this.fileName}" already exists. Do you want to overwrite it?` }); + + const buttonContainer = contentEl.createDiv({ cls: 'modal-button-container' }); + + new Setting(buttonContainer) + .addButton(btn => { + btn.setButtonText('Yes'); + btn.onClick(() => { + this.result = true; + this.close(); + }); + btn.buttonEl.addClass('media-db-plugin-button'); + }) + .addButton(btn => { + btn.setButtonText('No'); + btn.onClick(() => { + this.result = false; + this.close(); + }); + btn.buttonEl.addClass('media-db-plugin-button'); + }); + } + + onClose() { + const { contentEl } = this; + contentEl.empty(); + this.onSubmit(this.result); + } +} From 46952218de42ab23a4a3338dfa2cb72af6d0ba59 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 5 Mar 2025 22:33:30 +0100 Subject: [PATCH 2/5] Changed overwrite confirmation to only appear on new notes Overwrite confirmation should only appear if a new note is created, not when updating the metadata for an existing note. --- src/main.ts | 17 +++++++++-------- src/utils/Utils.ts | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main.ts b/src/main.ts index 1846627..4803c09 100644 --- a/src/main.ts +++ b/src/main.ts @@ -512,14 +512,15 @@ export default class MediaDbPlugin extends Plugin { // look if file already exists and ask if it should be overwritten const file = this.app.vault.getAbstractFileByPath(filePath); if (file) { - const shouldOverwrite = await new Promise(resolve => { - new ConfirmOverwriteModal(this.app, fileName, resolve).open(); - }); + if (!options.isUpdating) { + const shouldOverwrite = await new Promise(resolve => { + new ConfirmOverwriteModal(this.app, fileName, resolve).open(); + }); - if (!shouldOverwrite) { - throw new Error('MDB | file creation cancelled by user'); + if (!shouldOverwrite) { + throw new Error('MDB | file creation cancelled by user'); + } } - await this.app.vault.delete(file); } @@ -574,9 +575,9 @@ export default class MediaDbPlugin extends Plugin { console.debug(`MDB | newMediaTypeModel after merge`, newMediaTypeModel); if (onlyMetadata) { - await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachFile: activeFile, folder: activeFile.parent ?? undefined, openNote: true }); + await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachFile: activeFile, folder: activeFile.parent ?? undefined, openNote: true, isUpdating: true }); } else { - await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachTemplate: true, folder: activeFile.parent ?? undefined, openNote: true }); + await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachTemplate: true, folder: activeFile.parent ?? undefined, openNote: true, isUpdating: true }); } } diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 7950b15..4e8b82f 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -193,6 +193,7 @@ export interface CreateNoteOptions { attachFile?: TFile; openNote?: boolean; folder?: TFolder; + isUpdating?: boolean; // New property } export function migrateObject(object: T, oldData: any, defaultData: T): void { From d24b2d727160eaffb237adc4a50cde0fd5bfa71f Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 5 Mar 2025 22:59:28 +0100 Subject: [PATCH 3/5] Revert "Changed overwrite confirmation to only appear on new notes" This reverts commit 46952218de42ab23a4a3338dfa2cb72af6d0ba59. --- src/main.ts | 17 ++++++++--------- src/utils/Utils.ts | 1 - 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main.ts b/src/main.ts index 4803c09..1846627 100644 --- a/src/main.ts +++ b/src/main.ts @@ -512,15 +512,14 @@ export default class MediaDbPlugin extends Plugin { // look if file already exists and ask if it should be overwritten const file = this.app.vault.getAbstractFileByPath(filePath); if (file) { - if (!options.isUpdating) { - const shouldOverwrite = await new Promise(resolve => { - new ConfirmOverwriteModal(this.app, fileName, resolve).open(); - }); + const shouldOverwrite = await new Promise(resolve => { + new ConfirmOverwriteModal(this.app, fileName, resolve).open(); + }); - if (!shouldOverwrite) { - throw new Error('MDB | file creation cancelled by user'); - } + if (!shouldOverwrite) { + throw new Error('MDB | file creation cancelled by user'); } + await this.app.vault.delete(file); } @@ -575,9 +574,9 @@ export default class MediaDbPlugin extends Plugin { console.debug(`MDB | newMediaTypeModel after merge`, newMediaTypeModel); if (onlyMetadata) { - await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachFile: activeFile, folder: activeFile.parent ?? undefined, openNote: true, isUpdating: true }); + await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachFile: activeFile, folder: activeFile.parent ?? undefined, openNote: true }); } else { - await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachTemplate: true, folder: activeFile.parent ?? undefined, openNote: true, isUpdating: true }); + await this.createMediaDbNoteFromModel(newMediaTypeModel, { attachTemplate: true, folder: activeFile.parent ?? undefined, openNote: true }); } } diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 4e8b82f..7950b15 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -193,7 +193,6 @@ export interface CreateNoteOptions { attachFile?: TFile; openNote?: boolean; folder?: TFolder; - isUpdating?: boolean; // New property } export function migrateObject(object: T, oldData: any, defaultData: T): void { From be7598d1011d75402d0ef24259b09176d4f4bc40 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Thu, 6 Mar 2025 13:45:18 +0100 Subject: [PATCH 4/5] Changed button setup for internal consistency The buttons are now Cancel and Ok rather than Yes and No, they also have the correct order and color for the Ok button --- src/modals/ConfirmOverwriteModal.ts | 32 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/modals/ConfirmOverwriteModal.ts b/src/modals/ConfirmOverwriteModal.ts index 501afea..bab0330 100644 --- a/src/modals/ConfirmOverwriteModal.ts +++ b/src/modals/ConfirmOverwriteModal.ts @@ -17,25 +17,23 @@ export class ConfirmOverwriteModal extends Modal { contentEl.createEl('h2', { text: 'File already exists' }); contentEl.createEl('p', { text: `The file "${this.fileName}" already exists. Do you want to overwrite it?` }); - const buttonContainer = contentEl.createDiv({ cls: 'modal-button-container' }); + contentEl.createDiv({ cls: 'media-db-plugin-spacer' }); - new Setting(buttonContainer) - .addButton(btn => { - btn.setButtonText('Yes'); - btn.onClick(() => { - this.result = true; - this.close(); - }); - btn.buttonEl.addClass('media-db-plugin-button'); - }) - .addButton(btn => { - btn.setButtonText('No'); - btn.onClick(() => { - this.result = false; - this.close(); - }); - btn.buttonEl.addClass('media-db-plugin-button'); + const bottomSettingRow = new Setting(contentEl); + bottomSettingRow.addButton(btn => { + btn.setButtonText('Cancel'); + btn.onClick(() => this.close()); + btn.buttonEl.addClass('media-db-plugin-button'); + }); + bottomSettingRow.addButton(btn => { + btn.setButtonText('Ok'); + btn.setCta(); + btn.onClick(() => { + this.result = true; + this.close(); }); + btn.buttonEl.addClass('media-db-plugin-button'); + }); } onClose() { From 9f37561396bcf29c2bb5f7f46d9322c324ce814b Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:27:38 +0100 Subject: [PATCH 5/5] Changed back to No and Yes --- src/modals/ConfirmOverwriteModal.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modals/ConfirmOverwriteModal.ts b/src/modals/ConfirmOverwriteModal.ts index bab0330..7da0c17 100644 --- a/src/modals/ConfirmOverwriteModal.ts +++ b/src/modals/ConfirmOverwriteModal.ts @@ -21,12 +21,12 @@ export class ConfirmOverwriteModal extends Modal { const bottomSettingRow = new Setting(contentEl); bottomSettingRow.addButton(btn => { - btn.setButtonText('Cancel'); + btn.setButtonText('No'); btn.onClick(() => this.close()); btn.buttonEl.addClass('media-db-plugin-button'); }); bottomSettingRow.addButton(btn => { - btn.setButtonText('Ok'); + btn.setButtonText('Yes'); btn.setCta(); btn.onClick(() => { this.result = true;