From 16299fecedc14afd68af4eb7626ac752899f4972 Mon Sep 17 00:00:00 2001 From: mProjectsCode Date: Thu, 19 May 2022 22:59:01 +0200 Subject: [PATCH] Update entry command --- src/main.ts | 42 +++++++++++++++++++++++++++++++-- src/models/GameModel.ts | 3 +++ src/models/MediaTypeModel.ts | 2 ++ src/models/MovieModel.ts | 3 +++ src/models/MusicReleaseModel.ts | 4 +++- src/models/SeriesModel.ts | 3 +++ src/models/WikiModel.ts | 3 +++ src/utils/Utils.ts | 5 ++++ 8 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/main.ts b/src/main.ts index 69c713b..b5ddbfd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -37,6 +37,12 @@ export default class MediaDbPlugin extends Plugin { callback: () => this.createMediaDbNote(this.openMediaDbIdSearchModal.bind(this)), }); + this.addCommand({ + id: 'update-media-db-note', + name: 'Update the open note, if it is a Media DB entry.', + callback: () => this.updateActiveNote(), + }); + // register the settings tab this.addSettingTab(new MediaDbSettingTab(this.app, this)); @@ -53,10 +59,18 @@ export default class MediaDbPlugin extends Plugin { async createMediaDbNote(modal: () => Promise): Promise { try { let data: MediaTypeModel = await modal(); - console.log('MDB | Creating new note...'); - data = await this.apiManager.queryDetailedInfo(data); + await this.createMediaDbNoteFromModel(data); + } catch (e) { + console.warn(e); + new Notice(e.toString()); + } + } + + async createMediaDbNoteFromModel(data: MediaTypeModel): Promise { + try { + console.log('MDB | Creating new note...'); // console.log(data); let fileContent = `---\n${data.toMetaData()}---\n`; @@ -86,6 +100,8 @@ export default class MediaDbPlugin extends Plugin { const fileName = replaceIllegalFileNameCharactersInString(data.getFileName()); const filePath = `${this.settings.folder.replace(/\/$/, '')}/${fileName}.md`; + + await this.app.vault.delete(this.app.vault.getAbstractFileByPath(filePath)); const targetFile = await this.app.vault.create(filePath, fileContent); // open file @@ -95,6 +111,7 @@ export default class MediaDbPlugin extends Plugin { return; } await activeLeaf.openFile(targetFile, {state: {mode: 'source'}}); + } catch (e) { console.warn(e); new Notice(e.toString()); @@ -122,6 +139,27 @@ export default class MediaDbPlugin extends Plugin { })); } + async updateActiveNote() { + const activeLeaf: TFile = this.app.workspace.getActiveFile(); + if (!activeLeaf.name) return; + + let metadata = this.app.metadataCache.getFileCache(activeLeaf).frontmatter; + + if (!metadata.type || !metadata.dataSource || !metadata.id) { + throw new Error('MDB | active note is not a Media DB entry or is missing metadata'); + } + + const newMetadata = await this.apiManager.queryDetailedInfo({dataSource: metadata.dataSource, id: metadata.id} as MediaTypeModel); + + if (!newMetadata) { + return; + } + + console.log('MDB | deleting old entry'); + await this.app.vault.delete(activeLeaf); + await this.createMediaDbNoteFromModel(newMetadata); + } + async loadSettings() { this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); } diff --git a/src/models/GameModel.ts b/src/models/GameModel.ts index 8a807ba..47f8c91 100644 --- a/src/models/GameModel.ts +++ b/src/models/GameModel.ts @@ -5,6 +5,7 @@ import {mediaDbTag} from '../utils/Utils'; export class GameModel extends MediaTypeModel { type: string; + subType: string; title: string; englishTitle: string; year: string; @@ -27,6 +28,8 @@ export class GameModel extends MediaTypeModel { super(); Object.assign(this, obj); + + this.type = 'game'; } toMetaData(): string { diff --git a/src/models/MediaTypeModel.ts b/src/models/MediaTypeModel.ts index 4963fb5..12490b0 100644 --- a/src/models/MediaTypeModel.ts +++ b/src/models/MediaTypeModel.ts @@ -1,5 +1,6 @@ export abstract class MediaTypeModel { type: string; + subType: string; title: string; englishTitle: string; year: string; @@ -12,4 +13,5 @@ export abstract class MediaTypeModel { abstract getFileName(): string; abstract getTags(): string[]; + } diff --git a/src/models/MovieModel.ts b/src/models/MovieModel.ts index e0ff845..777ff1f 100644 --- a/src/models/MovieModel.ts +++ b/src/models/MovieModel.ts @@ -5,6 +5,7 @@ import {mediaDbTag} from '../utils/Utils'; export class MovieModel extends MediaTypeModel { type: string; + subType: string; title: string; englishTitle: string; year: string; @@ -30,6 +31,8 @@ export class MovieModel extends MediaTypeModel { super(); Object.assign(this, obj); + + this.type = 'movie'; } toMetaData(): string { diff --git a/src/models/MusicReleaseModel.ts b/src/models/MusicReleaseModel.ts index 2561cf0..eb0dec4 100644 --- a/src/models/MusicReleaseModel.ts +++ b/src/models/MusicReleaseModel.ts @@ -5,6 +5,7 @@ import {mediaDbTag} from '../utils/Utils'; export class MusicReleaseModel extends MediaTypeModel { type: string; + subType: string; title: string; englishTitle: string; year: string; @@ -14,7 +15,6 @@ export class MusicReleaseModel extends MediaTypeModel { genres: string[]; artists: string[]; - subType: string; rating: number; personalRating: number; @@ -23,6 +23,8 @@ export class MusicReleaseModel extends MediaTypeModel { super(); Object.assign(this, obj); + + this.type = 'musicRelease'; } toMetaData(): string { diff --git a/src/models/SeriesModel.ts b/src/models/SeriesModel.ts index 205d51a..4d10829 100644 --- a/src/models/SeriesModel.ts +++ b/src/models/SeriesModel.ts @@ -5,6 +5,7 @@ import {mediaDbTag} from '../utils/Utils'; export class SeriesModel extends MediaTypeModel { type: string; + subType: string; title: string; englishTitle: string; year: string; @@ -33,6 +34,8 @@ export class SeriesModel extends MediaTypeModel { super(); Object.assign(this, obj); + + this.type = 'series'; } toMetaData(): string { diff --git a/src/models/WikiModel.ts b/src/models/WikiModel.ts index cf5dea5..9ee6508 100644 --- a/src/models/WikiModel.ts +++ b/src/models/WikiModel.ts @@ -5,6 +5,7 @@ import {mediaDbTag} from '../utils/Utils'; export class WikiModel extends MediaTypeModel { type: string; + subType: string; title: string; englishTitle: string; year: string; @@ -21,6 +22,8 @@ export class WikiModel extends MediaTypeModel { super(); Object.assign(this, obj); + + this.type = 'wiki'; } toMetaData(): string { diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 12927db..e93764c 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -1,4 +1,5 @@ import {MediaTypeModel} from '../models/MediaTypeModel'; +import {TFile} from 'obsidian'; export const pluginName: string = 'obsidian-media-db-plugin'; @@ -85,3 +86,7 @@ function traverseMetaData(path: Array, mediaTypeModel: MediaTypeModel): return o; } + +export function updateNote(file: TFile) { + +}