From 2c570943323466fe535e5f9b5d2144ef73c46653 Mon Sep 17 00:00:00 2001 From: mProjectsCode Date: Sun, 22 May 2022 12:59:14 +0200 Subject: [PATCH] Templates for file names #8 --- src/main.ts | 44 +++------ src/modals/MediaDbAdvancedSearchModal.ts | 14 +-- src/modals/MediaDbIdSearchModal.ts | 12 +-- src/modals/MediaDbSearchResultModal.ts | 9 +- src/models/GameModel.ts | 16 ++-- src/models/MediaTypeModel.ts | 11 ++- src/models/MovieModel.ts | 16 ++-- src/models/MusicReleaseModel.ts | 16 ++-- src/models/SeriesModel.ts | 16 ++-- src/models/WikiModel.ts | 16 ++-- src/settings/Settings.ts | 111 ++++++++++++++++++++--- src/utils/MediaType.ts | 7 ++ src/utils/MediaTypeManager.ts | 52 +++++++++++ src/utils/Utils.ts | 6 -- 14 files changed, 231 insertions(+), 115 deletions(-) create mode 100644 src/utils/MediaType.ts create mode 100644 src/utils/MediaTypeManager.ts diff --git a/src/main.ts b/src/main.ts index b5ddbfd..e5795eb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,7 +2,7 @@ import {Notice, Plugin, TFile} from 'obsidian'; import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings'; import {APIManager} from './api/APIManager'; import {MediaTypeModel} from './models/MediaTypeModel'; -import {replaceIllegalFileNameCharactersInString, replaceTags} from './utils/Utils'; +import {replaceIllegalFileNameCharactersInString} from './utils/Utils'; import {OMDbAPI} from './api/apis/OMDbAPI'; import {MediaDbAdvancedSearchModal} from './modals/MediaDbAdvancedSearchModal'; import {MediaDbSearchResultModal} from './modals/MediaDbSearchResultModal'; @@ -10,10 +10,12 @@ import {MALAPI} from './api/apis/MALAPI'; import {MediaDbIdSearchModal} from './modals/MediaDbIdSearchModal'; import {WikipediaAPI} from './api/apis/WikipediaAPI'; import {MusicBrainzAPI} from './api/apis/MusicBrainzAPI'; +import {MediaTypeManager} from './utils/MediaTypeManager'; export default class MediaDbPlugin extends Plugin { settings: MediaDbPluginSettings; apiManager: APIManager; + mediaTypeManager: MediaTypeManager; async onload() { await this.loadSettings(); @@ -54,6 +56,8 @@ export default class MediaDbPlugin extends Plugin { this.apiManager.registerAPI(new WikipediaAPI(this)); this.apiManager.registerAPI(new MusicBrainzAPI(this)); // this.apiManager.registerAPI(new LocGovAPI(this)); // TODO: parse data + + this.mediaTypeManager = new MediaTypeManager(this.settings); } async createMediaDbNote(modal: () => Promise): Promise { @@ -68,37 +72,18 @@ export default class MediaDbPlugin extends Plugin { } } - async createMediaDbNoteFromModel(data: MediaTypeModel): Promise { + async createMediaDbNoteFromModel(mediaTypeModel: MediaTypeModel): Promise { try { console.log('MDB | Creating new note...'); - // console.log(data); + // console.log(mediaTypeModel); - let fileContent = `---\n${data.toMetaData()}---\n`; + let fileContent = `---\n${mediaTypeModel.toMetaData()}---\n`; - let templateFile: TFile = null; - - if (data.type === 'movie' && this.settings.movieTemplate) { - templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.movieTemplate).first(); - } else if (data.type === 'series' && this.settings.seriesTemplate) { - templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.seriesTemplate).first(); - } else if (data.type === 'game' && this.settings.gameTemplate) { - templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.gameTemplate).first(); - } else if (data.type === 'wiki' && this.settings.wikiTemplate) { - templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.wikiTemplate).first(); - } else if (data.type === 'musicRelease' && this.settings.musicReleaseTemplate) { - templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.musicReleaseTemplate).first(); + if (this.settings.templates) { + fileContent += await this.mediaTypeManager.getContent(mediaTypeModel, this.app); } - if (templateFile) { - let template = await this.app.vault.cachedRead(templateFile); - // console.log(template); - if (this.settings.templates) { - template = replaceTags(template, data); - } - fileContent += template; - } - - const fileName = replaceIllegalFileNameCharactersInString(data.getFileName()); + const fileName = replaceIllegalFileNameCharactersInString(this.mediaTypeManager.getFileName(mediaTypeModel)); const filePath = `${this.settings.folder.replace(/\/$/, '')}/${fileName}.md`; await this.app.vault.delete(this.app.vault.getAbstractFileByPath(filePath)); @@ -120,9 +105,9 @@ export default class MediaDbPlugin extends Plugin { async openMediaDbSearchModal(): Promise { return new Promise(((resolve, reject) => { - new MediaDbAdvancedSearchModal(this.app, this.apiManager, (err, results) => { + new MediaDbAdvancedSearchModal(this.app, this, (err, results) => { if (err) return reject(err); - new MediaDbSearchResultModal(this.app, results, (err2, res) => { + new MediaDbSearchResultModal(this.app, this, results, (err2, res) => { if (err2) return reject(err2); resolve(res); }).open(); @@ -132,7 +117,7 @@ export default class MediaDbPlugin extends Plugin { async openMediaDbIdSearchModal(): Promise { return new Promise(((resolve, reject) => { - new MediaDbIdSearchModal(this.app, this.apiManager, (err, res) => { + new MediaDbIdSearchModal(this.app, this, (err, res) => { if (err) return reject(err); resolve(res); }).open(); @@ -165,6 +150,7 @@ export default class MediaDbPlugin extends Plugin { } async saveSettings() { + this.mediaTypeManager.updateTemplates(this.settings); await this.saveData(this.settings); } } diff --git a/src/modals/MediaDbAdvancedSearchModal.ts b/src/modals/MediaDbAdvancedSearchModal.ts index 1472f7d..c878e61 100644 --- a/src/modals/MediaDbAdvancedSearchModal.ts +++ b/src/modals/MediaDbAdvancedSearchModal.ts @@ -1,22 +1,22 @@ import {App, ButtonComponent, Component, Modal, Notice, Setting, TextComponent, ToggleComponent} from 'obsidian'; import {MediaTypeModel} from '../models/MediaTypeModel'; -import {APIManager} from '../api/APIManager'; import {debugLog} from '../utils/Utils'; +import MediaDbPlugin from '../main'; export class MediaDbAdvancedSearchModal extends Modal { query: string; isBusy: boolean; - apiManager: APIManager; + plugin: MediaDbPlugin; searchBtn: ButtonComponent; selectedApis: any; onSubmit: (err: Error, result?: MediaTypeModel[]) => void; - constructor(app: App, apiManager: APIManager, onSubmit?: (err: Error, result?: MediaTypeModel[]) => void) { + constructor(app: App, plugin: MediaDbPlugin, onSubmit?: (err: Error, result?: MediaTypeModel[]) => void) { super(app); - this.apiManager = apiManager; + this.plugin = plugin; this.onSubmit = onSubmit; this.selectedApis = []; - for (const api of this.apiManager.apis) { + for (const api of this.plugin.apiManager.apis) { this.selectedApis[api.apiName] = false; } } @@ -56,7 +56,7 @@ export class MediaDbAdvancedSearchModal extends Modal { console.log(`MDB | query started with title ${this.query}`); - const res = await this.apiManager.query(this.query, this.selectedApis); + const res = await this.plugin.apiManager.query(this.query, this.selectedApis); this.onSubmit(null, res); } catch (e) { this.onSubmit(e); @@ -84,7 +84,7 @@ export class MediaDbAdvancedSearchModal extends Modal { contentEl.createEl('h3', {text: 'APIs to search'}); const apiToggleComponents: Component[] = []; - for (const api of this.apiManager.apis) { + for (const api of this.plugin.apiManager.apis) { const apiToggleListElementWrapper = contentEl.createEl('div', {cls: 'media-db-plugin-list-wrapper'}); const apiToggleTextWrapper = apiToggleListElementWrapper.createEl('div', {cls: 'media-db-plugin-list-text-wrapper'}); diff --git a/src/modals/MediaDbIdSearchModal.ts b/src/modals/MediaDbIdSearchModal.ts index 0216746..d7dc4cb 100644 --- a/src/modals/MediaDbIdSearchModal.ts +++ b/src/modals/MediaDbIdSearchModal.ts @@ -1,19 +1,19 @@ import {App, ButtonComponent, DropdownComponent, Modal, Notice, Setting, TextComponent} from 'obsidian'; import {MediaTypeModel} from '../models/MediaTypeModel'; -import {APIManager} from '../api/APIManager'; import {debugLog} from '../utils/Utils'; +import MediaDbPlugin from '../main'; export class MediaDbIdSearchModal extends Modal { query: string; isBusy: boolean; - apiManager: APIManager; + plugin: MediaDbPlugin; searchBtn: ButtonComponent; selectedApi: string; onSubmit: (err: Error, result?: MediaTypeModel) => void; - constructor(app: App, apiManager: APIManager, onSubmit?: (err: Error, result?: MediaTypeModel) => void) { + constructor(app: App, plugin: MediaDbPlugin, onSubmit?: (err: Error, result?: MediaTypeModel) => void) { super(app); - this.apiManager = apiManager; + this.plugin = plugin; this.onSubmit = onSubmit; this.selectedApi = ''; } @@ -46,7 +46,7 @@ export class MediaDbIdSearchModal extends Modal { console.log(`MDB | query started with id ${this.query}`); - const api = this.apiManager.getApiByName(this.selectedApi); + const api = this.plugin.apiManager.getApiByName(this.selectedApi); if (!api) { this.onSubmit(new Error('the selected api does not exist')); } @@ -83,7 +83,7 @@ export class MediaDbIdSearchModal extends Modal { apiSelectorComponent.onChange((value: string) => { this.selectedApi = value; }); - for (const api of this.apiManager.apis) { + for (const api of this.plugin.apiManager.apis) { apiSelectorComponent.addOption(api.apiName, api.apiName); } apiSelectorWrapper.appendChild(apiSelectorComponent.selectEl); diff --git a/src/modals/MediaDbSearchResultModal.ts b/src/modals/MediaDbSearchResultModal.ts index 40f5dca..7cab85f 100644 --- a/src/modals/MediaDbSearchResultModal.ts +++ b/src/modals/MediaDbSearchResultModal.ts @@ -1,12 +1,15 @@ import {App, SuggestModal} from 'obsidian'; import {MediaTypeModel} from '../models/MediaTypeModel'; +import MediaDbPlugin from '../main'; export class MediaDbSearchResultModal extends SuggestModal { suggestion: MediaTypeModel[]; + plugin: MediaDbPlugin; onChoose: (error: Error, result?: MediaTypeModel) => void; - constructor(app: App, suggestion: MediaTypeModel[], onChoose: (error: Error, result?: MediaTypeModel) => void) { + constructor(app: App, plugin: MediaDbPlugin, suggestion: MediaTypeModel[], onChoose: (error: Error, result?: MediaTypeModel) => void) { super(app); + this.plugin = plugin; this.suggestion = suggestion; this.onChoose = onChoose; } @@ -20,9 +23,9 @@ export class MediaDbSearchResultModal extends SuggestModal { // Renders each suggestion item. renderSuggestion(item: MediaTypeModel, el: HTMLElement) { - el.createEl('div', {text: item.getFileName()}); + el.createEl('div', {text: this.plugin.mediaTypeManager.getFileName(item)}); el.createEl('small', {text: `${item.englishTitle}\n`}); - el.createEl('small', {text: `${item.type.toUpperCase()} from ${item.dataSource}`}); + el.createEl('small', {text: `${item.type.toUpperCase() + (item.subType ? ` (${item.subType})` : '')} from ${item.dataSource}`}); } // Perform action on the selected suggestion. diff --git a/src/models/GameModel.ts b/src/models/GameModel.ts index 47f8c91..96bca40 100644 --- a/src/models/GameModel.ts +++ b/src/models/GameModel.ts @@ -1,6 +1,6 @@ import {MediaTypeModel} from './MediaTypeModel'; -import {stringifyYaml} from 'obsidian'; import {mediaDbTag} from '../utils/Utils'; +import {MediaType} from '../utils/MediaType'; export class GameModel extends MediaTypeModel { @@ -29,19 +29,15 @@ export class GameModel extends MediaTypeModel { Object.assign(this, obj); - this.type = 'game'; - } - - toMetaData(): string { - return stringifyYaml({...this, tags: '#' + this.getTags().join('/')}); - } - - getFileName(): string { - return this.title + (this.year ? ` (${this.year})` : ''); + this.type = this.getMediaType(); } getTags(): string[] { return [mediaDbTag, 'game']; } + getMediaType(): MediaType { + return MediaType.Game; + } + } diff --git a/src/models/MediaTypeModel.ts b/src/models/MediaTypeModel.ts index 12490b0..c73a588 100644 --- a/src/models/MediaTypeModel.ts +++ b/src/models/MediaTypeModel.ts @@ -1,3 +1,6 @@ +import {MediaType} from '../utils/MediaType'; +import {stringifyYaml} from 'obsidian'; + export abstract class MediaTypeModel { type: string; subType: string; @@ -8,10 +11,12 @@ export abstract class MediaTypeModel { url: string; id: string; - abstract toMetaData(): string; - - abstract getFileName(): string; + abstract getMediaType(): MediaType; abstract getTags(): string[]; + toMetaData(): string { + return stringifyYaml({...this, tags: '#' + this.getTags().join('/')}); + } + } diff --git a/src/models/MovieModel.ts b/src/models/MovieModel.ts index 777ff1f..c4fe66b 100644 --- a/src/models/MovieModel.ts +++ b/src/models/MovieModel.ts @@ -1,6 +1,6 @@ import {MediaTypeModel} from './MediaTypeModel'; -import {stringifyYaml} from 'obsidian'; import {mediaDbTag} from '../utils/Utils'; +import {MediaType} from '../utils/MediaType'; export class MovieModel extends MediaTypeModel { @@ -32,19 +32,15 @@ export class MovieModel extends MediaTypeModel { Object.assign(this, obj); - this.type = 'movie'; - } - - toMetaData(): string { - return stringifyYaml({...this, tags: '#' + this.getTags().join('/')}); - } - - getFileName(): string { - return this.title + (this.year ? ` (${this.year})` : ''); + this.type = this.getMediaType(); } getTags(): string[] { return [mediaDbTag, 'tv', 'movie']; } + getMediaType(): MediaType { + return MediaType.Movie; + } + } diff --git a/src/models/MusicReleaseModel.ts b/src/models/MusicReleaseModel.ts index eb0dec4..5edefdc 100644 --- a/src/models/MusicReleaseModel.ts +++ b/src/models/MusicReleaseModel.ts @@ -1,6 +1,6 @@ import {MediaTypeModel} from './MediaTypeModel'; -import {stringifyYaml} from 'obsidian'; import {mediaDbTag} from '../utils/Utils'; +import {MediaType} from '../utils/MediaType'; export class MusicReleaseModel extends MediaTypeModel { @@ -24,19 +24,15 @@ export class MusicReleaseModel extends MediaTypeModel { Object.assign(this, obj); - this.type = 'musicRelease'; - } - - toMetaData(): string { - return stringifyYaml({...this, tags: '#' + this.getTags().join('/')}); - } - - getFileName(): string { - return this.title + ' (' + this.artists.join(', ') + ' - ' + this.year + ' - ' + this.subType + ')'; + this.type = this.getMediaType(); } getTags(): string[] { return [mediaDbTag, 'music', 'album']; } + getMediaType(): MediaType { + return MediaType.MusicRelease; + } + } diff --git a/src/models/SeriesModel.ts b/src/models/SeriesModel.ts index 4d10829..54afc78 100644 --- a/src/models/SeriesModel.ts +++ b/src/models/SeriesModel.ts @@ -1,6 +1,6 @@ import {MediaTypeModel} from './MediaTypeModel'; -import {stringifyYaml} from 'obsidian'; import {mediaDbTag} from '../utils/Utils'; +import {MediaType} from '../utils/MediaType'; export class SeriesModel extends MediaTypeModel { @@ -35,19 +35,15 @@ export class SeriesModel extends MediaTypeModel { Object.assign(this, obj); - this.type = 'series'; - } - - toMetaData(): string { - return stringifyYaml({...this, tags: '#' + this.getTags().join('/')}); - } - - getFileName(): string { - return this.title + ' (' + this.year + ')'; + this.type = this.getMediaType(); } getTags(): string[] { return [mediaDbTag, 'tv', 'series']; } + getMediaType(): MediaType { + return MediaType.Series; + } + } diff --git a/src/models/WikiModel.ts b/src/models/WikiModel.ts index 9ee6508..a5dd1b7 100644 --- a/src/models/WikiModel.ts +++ b/src/models/WikiModel.ts @@ -1,6 +1,6 @@ import {MediaTypeModel} from './MediaTypeModel'; -import {stringifyYaml} from 'obsidian'; import {mediaDbTag} from '../utils/Utils'; +import {MediaType} from '../utils/MediaType'; export class WikiModel extends MediaTypeModel { @@ -23,19 +23,15 @@ export class WikiModel extends MediaTypeModel { Object.assign(this, obj); - this.type = 'wiki'; - } - - toMetaData(): string { - return stringifyYaml({...this, tags: '#' + this.getTags().join('/')}); - } - - getFileName(): string { - return this.title; + this.type = this.getMediaType(); } getTags(): string[] { return [mediaDbTag, 'wiki']; } + getMediaType(): MediaType { + return MediaType.Wiki; + } + } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index cc8a967..4673dc6 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -9,11 +9,19 @@ export interface MediaDbPluginSettings { folder: string, sfwFilter: boolean, OMDbKey: string, + movieTemplate: string, seriesTemplate: string, gameTemplate: string, wikiTemplate: string, musicReleaseTemplate: string, + + movieFileNameTemplate: string, + seriesFileNameTemplate: string, + gameFileNameTemplate: string, + wikiFileNameTemplate: string, + musicReleaseFileNameTemplate: string, + templates: boolean, } @@ -21,11 +29,19 @@ export const DEFAULT_SETTINGS: MediaDbPluginSettings = { folder: '', sfwFilter: true, OMDbKey: '', + movieTemplate: '', seriesTemplate: '', gameTemplate: '', wikiTemplate: '', musicReleaseTemplate: '', + + movieFileNameTemplate: '{{ title }} ({{ year }})', + seriesFileNameTemplate: '{{ title }} ({{ year }})', + gameFileNameTemplate: '{{ title }} ({{ year }})', + wikiFileNameTemplate: '{{ title }}', + musicReleaseFileNameTemplate: '{{ title }} (by {{ artists.0 }} - {{ year }})', + templates: true, }; @@ -57,6 +73,29 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); + new Setting(containerEl) + .setName('OMDb API key') + .setDesc('API key for "www.omdbapi.com".') + .addText(cb => { + cb.setPlaceholder('API key') + .setValue(this.plugin.settings.OMDbKey) + .onChange(data => { + this.plugin.settings.OMDbKey = data; + this.plugin.saveSettings(); + }); + }); + + new Setting(containerEl) + .setName('SFW filter') + .setDesc('Only shows SFW results for APIs that offer filtering.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.sfwFilter) + .onChange(data => { + this.plugin.settings.sfwFilter = data; + this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) .setName('Resolve {{ tags }} in templates') .setDesc('Whether to resolve {{ tags }} in templates. The spaces inside the curly braces are important.') @@ -68,6 +107,9 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); + + containerEl.createEl('h3', {text: 'Template Settings'}); + // region templates new Setting(containerEl) .setName('Movie template') .setDesc('Template file to be used when creating a new note for a movie.') @@ -132,29 +174,76 @@ export class MediaDbSettingTab extends PluginSettingTab { this.plugin.saveSettings(); }); }); + // endregion + containerEl.createEl('h3', {text: 'File Name Settings'}); + // region file name templates new Setting(containerEl) - .setName('OMDb API key') - .setDesc('API key for "www.omdbapi.com".') - .addText(cb => { - cb.setPlaceholder('API key') - .setValue(this.plugin.settings.OMDbKey) + .setName('Movie file name template') + .setDesc('Template for the file name used when creating a new note for a movie.') + .addSearch(cb => { + new FileSuggest(this.app, cb.inputEl); + cb.setPlaceholder(`Example: ${DEFAULT_SETTINGS.movieFileNameTemplate}`) + .setValue(this.plugin.settings.movieFileNameTemplate) .onChange(data => { - this.plugin.settings.OMDbKey = data; + this.plugin.settings.movieFileNameTemplate = data; this.plugin.saveSettings(); }); }); new Setting(containerEl) - .setName('SFW filter') - .setDesc('Only shows SFW results for APIs that offer filtering.') - .addToggle(cb => { - cb.setValue(this.plugin.settings.sfwFilter) + .setName('Series file name template') + .setDesc('Template for the file name used when creating a new note for a series.') + .addSearch(cb => { + new FileSuggest(this.app, cb.inputEl); + cb.setPlaceholder(`Example: ${DEFAULT_SETTINGS.seriesFileNameTemplate}`) + .setValue(this.plugin.settings.seriesFileNameTemplate) .onChange(data => { - this.plugin.settings.sfwFilter = data; + this.plugin.settings.seriesFileNameTemplate = data; this.plugin.saveSettings(); }); }); + + new Setting(containerEl) + .setName('Game file name template') + .setDesc('Template for the file name used when creating a new note for a game.') + .addSearch(cb => { + new FileSuggest(this.app, cb.inputEl); + cb.setPlaceholder(`Example: ${DEFAULT_SETTINGS.gameFileNameTemplate}`) + .setValue(this.plugin.settings.gameFileNameTemplate) + .onChange(data => { + this.plugin.settings.gameFileNameTemplate = data; + this.plugin.saveSettings(); + }); + }); + + new Setting(containerEl) + .setName('Wiki file name template') + .setDesc('Template for the file name used when creating a new note for a wiki entry.') + .addSearch(cb => { + new FileSuggest(this.app, cb.inputEl); + cb.setPlaceholder(`Example: ${DEFAULT_SETTINGS.wikiFileNameTemplate}`) + .setValue(this.plugin.settings.wikiFileNameTemplate) + .onChange(data => { + this.plugin.settings.wikiFileNameTemplate = data; + this.plugin.saveSettings(); + }); + }); + + new Setting(containerEl) + .setName('Music Release file name template') + .setDesc('Template for the file name used when creating a new note for a music release.') + .addSearch(cb => { + new FileSuggest(this.app, cb.inputEl); + cb.setPlaceholder(`Example: ${DEFAULT_SETTINGS.musicReleaseFileNameTemplate}`) + .setValue(this.plugin.settings.musicReleaseFileNameTemplate) + .onChange(data => { + this.plugin.settings.musicReleaseFileNameTemplate = data; + this.plugin.saveSettings(); + }); + }); + // endregion + } } diff --git a/src/utils/MediaType.ts b/src/utils/MediaType.ts new file mode 100644 index 0000000..c4f1076 --- /dev/null +++ b/src/utils/MediaType.ts @@ -0,0 +1,7 @@ +export enum MediaType { + Movie = 'movie', + Series = 'series', + Game = 'game', + MusicRelease = 'musicRelease', + Wiki = 'wiki', +} diff --git a/src/utils/MediaTypeManager.ts b/src/utils/MediaTypeManager.ts new file mode 100644 index 0000000..d85f14d --- /dev/null +++ b/src/utils/MediaTypeManager.ts @@ -0,0 +1,52 @@ +import {MediaDbPluginSettings} from '../settings/Settings'; +import {MediaType} from './MediaType'; +import {MediaTypeModel} from '../models/MediaTypeModel'; +import {replaceTags} from './Utils'; +import {App, TFile} from 'obsidian'; + +export class MediaTypeManager { + mediaFileNameTemplateMap: Map; + mediaTemplateMap: Map; + + constructor(settings: MediaDbPluginSettings) { + this.updateTemplates(settings); + } + + updateTemplates(settings: MediaDbPluginSettings) { + this.mediaFileNameTemplateMap = new Map(); + this.mediaFileNameTemplateMap.set(MediaType.Movie, settings.movieFileNameTemplate); + this.mediaFileNameTemplateMap.set(MediaType.Series, settings.seriesFileNameTemplate); + this.mediaFileNameTemplateMap.set(MediaType.Game, settings.gameFileNameTemplate); + this.mediaFileNameTemplateMap.set(MediaType.Wiki, settings.wikiFileNameTemplate); + this.mediaFileNameTemplateMap.set(MediaType.MusicRelease, settings.musicReleaseFileNameTemplate); + + this.mediaTemplateMap = new Map(); + this.mediaTemplateMap.set(MediaType.Movie, settings.movieTemplate); + this.mediaTemplateMap.set(MediaType.Series, settings.seriesTemplate); + this.mediaTemplateMap.set(MediaType.Game, settings.gameTemplate); + this.mediaTemplateMap.set(MediaType.Wiki, settings.wikiTemplate); + this.mediaTemplateMap.set(MediaType.MusicRelease, settings.musicReleaseTemplate); + } + + getFileName(mediaTypeModel: MediaTypeModel): string { + return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel); + } + + async getContent(mediaTypeModel: MediaTypeModel, app: App) { + const templateFileName = this.mediaTemplateMap.get(mediaTypeModel.getMediaType()); + + if (!templateFileName) { + return ''; + } + + const templateFile: TFile = app.vault.getFiles().filter((f: TFile) => f.name === templateFileName).first(); + + if (!templateFile) { + return ''; + } + + const template = await app.vault.cachedRead(templateFile); + // console.log(template); + return replaceTags(template, mediaTypeModel); + } +} diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index e93764c..7c76315 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -1,5 +1,4 @@ import {MediaTypeModel} from '../models/MediaTypeModel'; -import {TFile} from 'obsidian'; export const pluginName: string = 'obsidian-media-db-plugin'; @@ -8,7 +7,6 @@ export const mediaDbTag: string = 'mediaDB'; export const mediaDbVersion: string = '0.1.8'; export const debug: boolean = false; - export function wrapAround(value: number, size: number): number { return ((value % size) + size) % size; } @@ -86,7 +84,3 @@ function traverseMetaData(path: Array, mediaTypeModel: MediaTypeModel): return o; } - -export function updateNote(file: TFile) { - -}