From c20e89e5efa0a5678744708d587b437e2b0f20b4 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sat, 27 Jan 2024 22:39:42 +0100 Subject: [PATCH 01/18] Added settings for disabling certain APIs (WIP) Currently only has the plugin settings and they don't do anything yet --- src/settings/Settings.ts | 83 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 9b089f2..e8b06c2 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -19,6 +19,13 @@ export interface MediaDbPluginSettings { openNoteInNewTab: boolean; useDefaultFrontMatter: boolean; enableTemplaterIntegration: boolean; + OMDbAPIMovies: boolean; + OMDbAPISeries: boolean; + OMDbAPIGames: boolean; + MALAPIMovies: boolean; + MALAPISeries: boolean; + SteamAPI: boolean; + MobyGamesAPI: boolean; movieTemplate: string; seriesTemplate: string; @@ -69,6 +76,13 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { openNoteInNewTab: true, useDefaultFrontMatter: true, enableTemplaterIntegration: false, + OMDbAPIMovies: true, + OMDbAPIGames: true, + OMDbAPISeries: true, + MALAPISeries: true, + MALAPIMovies: true, + SteamAPI: true, + MobyGamesAPI: true, movieTemplate: '', seriesTemplate: '', @@ -260,6 +274,75 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); + + containerEl.createEl('h3', { text: 'APIs Per Media Type' }); + containerEl.createEl('h5', { text: 'Movies' }); + new Setting(containerEl) + .setName('OMDb API') + .setDesc('Use OMDb API for movies.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.OMDbAPIMovies).onChange(data => { + this.plugin.settings.OMDbAPIMovies = data; + this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) + .setName('MAL API') + .setDesc('Use MAL API for movies.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.MALAPIMovies).onChange(data => { + this.plugin.settings.MALAPIMovies = data; + this.plugin.saveSettings(); + }); + }); + containerEl.createEl('h5', { text: 'Series' }); + new Setting(containerEl) + .setName('OMDb API') + .setDesc('Use OMDb API for series.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.OMDbAPISeries).onChange(data => { + this.plugin.settings.OMDbAPISeries = data; + this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) + .setName('MAL API') + .setDesc('Use MAL API for series.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.MALAPISeries).onChange(data => { + this.plugin.settings.MALAPISeries = data; + this.plugin.saveSettings(); + }); + }); + containerEl.createEl('h5', { text: 'Games' }); + new Setting(containerEl) + .setName('OMDb API') + .setDesc('Use OMDb API for games.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.OMDbAPIGames).onChange(data => { + this.plugin.settings.OMDbAPIGames = data; + this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) + .setName('Steam API') + .setDesc('Use OMDb API for games.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.SteamAPI).onChange(data => { + this.plugin.settings.SteamAPI = data; + this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) + .setName('MobyGames API') + .setDesc('Use MobyGames API for games.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.MobyGamesAPI).onChange(data => { + this.plugin.settings.MobyGamesAPI = data; + this.plugin.saveSettings(); + }); + }); + containerEl.createEl('h3', { text: 'New File Location' }); // region new file location new Setting(containerEl) From 436f98c5bc8c214d42037efd49010455504a2c1c Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:07:15 +0100 Subject: [PATCH 02/18] WIP api selection I'm close but I don't now how to get the MediaType that the plugin called --- src/api/APIManager.ts | 10 ++++--- src/main.ts | 5 ++-- src/settings/Settings.ts | 58 ++++++++++++++++++++-------------------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index 17f0f36..c7821b0 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -1,10 +1,14 @@ import { APIModel } from './APIModel'; import { MediaTypeModel } from '../models/MediaTypeModel'; +import MediaDbPlugin from '../main'; + export class APIManager { + plugin: MediaDbPlugin; apis: APIModel[]; - constructor() { + constructor(plugin: MediaDbPlugin) { + this.plugin = plugin; this.apis = []; } @@ -18,9 +22,9 @@ export class APIManager { console.debug(`MDB | api manager queried with "${query}"`); let res: MediaTypeModel[] = []; - for (const api of this.apis) { - if (apisToQuery.contains(api.apiName)) { + const apiSettings = [api.apiName, MediaTypeModel].filter(s => s).join('') as keyof typeof this.plugin.settings; + if (apisToQuery.contains(api.apiName) && this.plugin.settings[apiSettings]) { const apiRes = await api.searchByTitle(query); res = res.concat(apiRes); } diff --git a/src/main.ts b/src/main.ts index 46f0b7d..786567a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -39,7 +39,7 @@ export default class MediaDbPlugin extends Plugin { frontMatterRexExpPattern: string = '^(---)\\n[\\s\\S]*?\\n---'; async onload(): Promise { - this.apiManager = new APIManager(); + this.apiManager = new APIManager(this); // register APIs this.apiManager.registerAPI(new OMDbAPI(this)); this.apiManager.registerAPI(new MALAPI(this)); @@ -73,7 +73,8 @@ export default class MediaDbPlugin extends Plugin { this.app.workspace.on('file-menu', (menu, file) => { if (file instanceof TFolder) { menu.addItem(item => { - item.setTitle('Import folder as Media DB entries') + item + .setTitle('Import folder as Media DB entries') .setIcon('database') .onClick(() => this.createEntriesFromFolder(file)); }); diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 38494e4..76b7e63 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -19,13 +19,13 @@ export interface MediaDbPluginSettings { openNoteInNewTab: boolean; useDefaultFrontMatter: boolean; enableTemplaterIntegration: boolean; - OMDbAPIMovies: boolean; - OMDbAPISeries: boolean; - OMDbAPIGames: boolean; - MALAPIMovies: boolean; - MALAPISeries: boolean; - SteamAPI: boolean; - MobyGamesAPI: boolean; + OMDbAPImovie: boolean; + OMDbAPIseries: boolean; + OMDbAPIgame: boolean; + MALAPImovie: boolean; + MALAPIseries: boolean; + SteamAPIgame: boolean; + MobyGamesAPIgame: boolean; movieTemplate: string; seriesTemplate: string; @@ -76,13 +76,13 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { openNoteInNewTab: true, useDefaultFrontMatter: true, enableTemplaterIntegration: false, - OMDbAPIMovies: true, - OMDbAPIGames: true, - OMDbAPISeries: true, - MALAPISeries: true, - MALAPIMovies: true, - SteamAPI: true, - MobyGamesAPI: true, + OMDbAPImovie: true, + OMDbAPIgame: true, + OMDbAPIseries: true, + MALAPIseries: true, + MALAPImovie: true, + SteamAPIgame: true, + MobyGamesAPIgame: true, movieTemplate: '', seriesTemplate: '', @@ -176,7 +176,7 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); - new Setting(containerEl) + new Setting(containerEl) .setName('Moby Games key') .setDesc('API key for "www.mobygames.com".') .addText(cb => { @@ -281,8 +281,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for movies.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPIMovies).onChange(data => { - this.plugin.settings.OMDbAPIMovies = data; + cb.setValue(this.plugin.settings.OMDbAPImovie).onChange(data => { + this.plugin.settings.OMDbAPImovie = data; this.plugin.saveSettings(); }); }); @@ -290,8 +290,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MAL API') .setDesc('Use MAL API for movies.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPIMovies).onChange(data => { - this.plugin.settings.MALAPIMovies = data; + cb.setValue(this.plugin.settings.MALAPImovie).onChange(data => { + this.plugin.settings.MALAPImovie = data; this.plugin.saveSettings(); }); }); @@ -300,8 +300,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for series.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPISeries).onChange(data => { - this.plugin.settings.OMDbAPISeries = data; + cb.setValue(this.plugin.settings.OMDbAPIseries).onChange(data => { + this.plugin.settings.OMDbAPIseries = data; this.plugin.saveSettings(); }); }); @@ -309,8 +309,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MAL API') .setDesc('Use MAL API for series.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPISeries).onChange(data => { - this.plugin.settings.MALAPISeries = data; + cb.setValue(this.plugin.settings.MALAPIseries).onChange(data => { + this.plugin.settings.MALAPIseries = data; this.plugin.saveSettings(); }); }); @@ -319,8 +319,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPIGames).onChange(data => { - this.plugin.settings.OMDbAPIGames = data; + cb.setValue(this.plugin.settings.OMDbAPIgame).onChange(data => { + this.plugin.settings.OMDbAPIgame = data; this.plugin.saveSettings(); }); }); @@ -328,8 +328,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('Steam API') .setDesc('Use OMDb API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.SteamAPI).onChange(data => { - this.plugin.settings.SteamAPI = data; + cb.setValue(this.plugin.settings.SteamAPIgame).onChange(data => { + this.plugin.settings.SteamAPIgame = data; this.plugin.saveSettings(); }); }); @@ -337,8 +337,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MobyGames API') .setDesc('Use MobyGames API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MobyGamesAPI).onChange(data => { - this.plugin.settings.MobyGamesAPI = data; + cb.setValue(this.plugin.settings.MobyGamesAPIgame).onChange(data => { + this.plugin.settings.MobyGamesAPIgame = data; this.plugin.saveSettings(); }); }); From 867bfec6c5bfb1d64f141034ef8b9dcd3ccf8f32 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:12:00 +0100 Subject: [PATCH 03/18] Reverted accidental newline in main.ts --- src/main.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index 786567a..9858c7b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -73,8 +73,7 @@ export default class MediaDbPlugin extends Plugin { this.app.workspace.on('file-menu', (menu, file) => { if (file instanceof TFolder) { menu.addItem(item => { - item - .setTitle('Import folder as Media DB entries') + item.setTitle('Import folder as Media DB entries') .setIcon('database') .onClick(() => this.createEntriesFromFolder(file)); }); From 2ea237822ef15408ffb7bb930da0f3cb315e94cb Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 31 Jan 2024 22:37:19 +0100 Subject: [PATCH 04/18] Normalized the apiName fields --- src/api/apis/MALAPIManga.ts | 2 +- src/api/apis/MusicBrainzAPI.ts | 2 +- src/api/apis/WikipediaAPI.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/apis/MALAPIManga.ts b/src/api/apis/MALAPIManga.ts index 7cea003..fb3f312 100644 --- a/src/api/apis/MALAPIManga.ts +++ b/src/api/apis/MALAPIManga.ts @@ -12,7 +12,7 @@ export class MALAPIManga extends APIModel { super(); this.plugin = plugin; - this.apiName = 'MALAPI Manga'; + this.apiName = 'MALAPIManga'; this.apiDescription = 'A free API for Manga. Some results may take a long time to load.'; this.apiUrl = 'https://jikan.moe/'; this.types = [MediaType.Manga]; diff --git a/src/api/apis/MusicBrainzAPI.ts b/src/api/apis/MusicBrainzAPI.ts index b927f37..7b9ae95 100644 --- a/src/api/apis/MusicBrainzAPI.ts +++ b/src/api/apis/MusicBrainzAPI.ts @@ -13,7 +13,7 @@ export class MusicBrainzAPI extends APIModel { super(); this.plugin = plugin; - this.apiName = 'MusicBrainz API'; + this.apiName = 'MusicBrainzAPI'; this.apiDescription = 'Free API for music albums.'; this.apiUrl = 'https://musicbrainz.org/'; this.types = [MediaType.MusicRelease]; diff --git a/src/api/apis/WikipediaAPI.ts b/src/api/apis/WikipediaAPI.ts index 9cee7b5..03d476b 100644 --- a/src/api/apis/WikipediaAPI.ts +++ b/src/api/apis/WikipediaAPI.ts @@ -12,7 +12,7 @@ export class WikipediaAPI extends APIModel { super(); this.plugin = plugin; - this.apiName = 'Wikipedia API'; + this.apiName = 'WikipediaAPI'; this.apiDescription = 'The API behind Wikipedia'; this.apiUrl = 'https://www.wikipedia.com'; this.types = [MediaType.Wiki]; From d1affcdcb67d37b42b3aa054a268e5c5d263abf1 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 31 Jan 2024 22:38:06 +0100 Subject: [PATCH 05/18] Added temporary way to test media type as "game" --- src/api/APIManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index c7821b0..1e3c8cc 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -23,7 +23,7 @@ export class APIManager { let res: MediaTypeModel[] = []; for (const api of this.apis) { - const apiSettings = [api.apiName, MediaTypeModel].filter(s => s).join('') as keyof typeof this.plugin.settings; + const apiSettings = [api.apiName, "game"].filter(s => s).join('') as keyof typeof this.plugin.settings; if (apisToQuery.contains(api.apiName) && this.plugin.settings[apiSettings]) { const apiRes = await api.searchByTitle(query); res = res.concat(apiRes); From 508b0ed03b305642c2cb97aacdf673770c7a0e0e Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 31 Jan 2024 22:38:50 +0100 Subject: [PATCH 06/18] Fixed advanced search by adding a default media type for certain APIs --- src/modals/MediaDbAdvancedSearchModal.ts | 26 +++++++++++++----------- src/settings/Settings.ts | 10 +++++++++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/modals/MediaDbAdvancedSearchModal.ts b/src/modals/MediaDbAdvancedSearchModal.ts index 9a79ac1..605aec5 100644 --- a/src/modals/MediaDbAdvancedSearchModal.ts +++ b/src/modals/MediaDbAdvancedSearchModal.ts @@ -87,21 +87,23 @@ export class MediaDbAdvancedSearchModal extends Modal { // const apiToggleComponents: Component[] = []; for (const api of this.plugin.apiManager.apis) { - const apiToggleListElementWrapper = contentEl.createEl('div', { cls: 'media-db-plugin-list-wrapper' }); + if (this.plugin.settings[[api.apiName, "default"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "game"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "series"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "movie"].filter(s => s).join('') as keyof typeof this.plugin.settings]) { + const apiToggleListElementWrapper = contentEl.createEl('div', { cls: 'media-db-plugin-list-wrapper' }); - const apiToggleTextWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-text-wrapper' }); - apiToggleTextWrapper.createEl('span', { text: api.apiName, cls: 'media-db-plugin-list-text' }); - apiToggleTextWrapper.createEl('small', { text: api.apiDescription, cls: 'media-db-plugin-list-text' }); + const apiToggleTextWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-text-wrapper' }); + apiToggleTextWrapper.createEl('span', { text: api.apiName, cls: 'media-db-plugin-list-text' }); + apiToggleTextWrapper.createEl('small', { text: api.apiDescription, cls: 'media-db-plugin-list-text' }); - const apiToggleComponentWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-toggle' }); + const apiToggleComponentWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-toggle' }); - const apiToggleComponent = new ToggleComponent(apiToggleComponentWrapper); - apiToggleComponent.setTooltip(api.apiName); - apiToggleComponent.setValue(this.selectedApis.find(x => x.name === api.apiName).selected); - apiToggleComponent.onChange(value => { - this.selectedApis.find(x => x.name === api.apiName).selected = value; - }); - apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); + const apiToggleComponent = new ToggleComponent(apiToggleComponentWrapper); + apiToggleComponent.setTooltip(api.apiName); + apiToggleComponent.setValue(this.selectedApis.find(x => x.name === api.apiName).selected); + apiToggleComponent.onChange(value => { + this.selectedApis.find(x => x.name === api.apiName).selected = value; + }); + apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); + } } contentEl.createDiv({ cls: 'media-db-plugin-spacer' }); diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 76b7e63..9a517ba 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -26,6 +26,11 @@ export interface MediaDbPluginSettings { MALAPIseries: boolean; SteamAPIgame: boolean; MobyGamesAPIgame: boolean; + BoardGameGeekAPIdefault: boolean; + MALAPIMangadefault: boolean; + MusicBrainzAPIdefault: boolean; + OpenLibraryAPIdefault: boolean; + WikipediaAPIdefault: boolean; movieTemplate: string; seriesTemplate: string; @@ -83,6 +88,11 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { MALAPImovie: true, SteamAPIgame: true, MobyGamesAPIgame: true, + BoardGameGeekAPIdefault: true, + MALAPIMangadefault: true, + MusicBrainzAPIdefault: true, + OpenLibraryAPIdefault: true, + WikipediaAPIdefault: true, movieTemplate: '', seriesTemplate: '', From 5a8feca561f99fdcaa89a5de19864d65a4c6857a Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 31 Jan 2024 23:04:16 +0100 Subject: [PATCH 07/18] Made sure to always allow default APIs --- src/api/APIManager.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index 1e3c8cc..527eee3 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -23,8 +23,7 @@ export class APIManager { let res: MediaTypeModel[] = []; for (const api of this.apis) { - const apiSettings = [api.apiName, "game"].filter(s => s).join('') as keyof typeof this.plugin.settings; - if (apisToQuery.contains(api.apiName) && this.plugin.settings[apiSettings]) { + if (apisToQuery.contains(api.apiName) && (this.plugin.settings[[api.apiName, "game"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "default"].filter(s => s).join('') as keyof typeof this.plugin.settings])) { const apiRes = await api.searchByTitle(query); res = res.concat(apiRes); } From 0157c0adf9241da718ffaf68375a34fe3f6fb4bb Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Thu, 1 Feb 2024 18:20:56 +0100 Subject: [PATCH 08/18] Added media type passed along with the apis to query and the title --- src/api/APIManager.ts | 4 ++-- src/main.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index 527eee3..bae09fa 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -18,12 +18,12 @@ export class APIManager { * @param query * @param apisToQuery */ - async query(query: string, apisToQuery: string[]): Promise { + async query(query: string, apisToQuery: string[], mediaType: string): Promise { console.debug(`MDB | api manager queried with "${query}"`); let res: MediaTypeModel[] = []; for (const api of this.apis) { - if (apisToQuery.contains(api.apiName) && (this.plugin.settings[[api.apiName, "game"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "default"].filter(s => s).join('') as keyof typeof this.plugin.settings])) { + if (apisToQuery.contains(api.apiName) && (this.plugin.settings[[api.apiName, mediaType].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "default"].filter(s => s).join('') as keyof typeof this.plugin.settings])) { const apiRes = await api.searchByTitle(query); res = res.concat(apiRes); } diff --git a/src/main.ts b/src/main.ts index 9858c7b..7b96a1e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -156,7 +156,7 @@ export default class MediaDbPlugin extends Plugin { */ async createLinkWithSearchModal(): Promise { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { - return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); + return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, "default"); }); if (!apiSearchResults) { @@ -186,7 +186,7 @@ export default class MediaDbPlugin extends Plugin { let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openSearchModal(searchModalOptions ?? {}, async searchModalData => { types = searchModalData.types; const apis = this.apiManager.apis.filter(x => x.hasTypeOverlap(searchModalData.types)).map(x => x.apiName); - return await this.apiManager.query(searchModalData.query, apis); + return await this.apiManager.query(searchModalData.query, apis, searchModalData.types.toString()); }); if (!apiSearchResults) { @@ -218,7 +218,7 @@ export default class MediaDbPlugin extends Plugin { async createEntryWithAdvancedSearchModal(): Promise { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { - return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); + return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, "default"); }); if (!apiSearchResults) { @@ -570,7 +570,7 @@ export default class MediaDbPlugin extends Plugin { let results: MediaTypeModel[] = []; try { - results = await this.apiManager.query(title, [selectedAPI]); + results = await this.apiManager.query(title, [selectedAPI], "default"); } catch (e) { erroredFiles.push({ filePath: file.path, error: e.toString() }); continue; From 675a0f76591ed15a968991fb71a22565f4b8cf0e Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Thu, 1 Feb 2024 19:49:21 +0100 Subject: [PATCH 09/18] Removed "default" setting and only check if media type is false or not --- src/api/APIManager.ts | 2 +- src/main.ts | 6 +++--- src/modals/MediaDbAdvancedSearchModal.ts | 4 +--- src/settings/Settings.ts | 10 ---------- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index bae09fa..56cee80 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -23,7 +23,7 @@ export class APIManager { let res: MediaTypeModel[] = []; for (const api of this.apis) { - if (apisToQuery.contains(api.apiName) && (this.plugin.settings[[api.apiName, mediaType].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "default"].filter(s => s).join('') as keyof typeof this.plugin.settings])) { + if (apisToQuery.contains(api.apiName) && !(this.plugin.settings[[api.apiName, mediaType].filter(s => s).join('') as keyof typeof this.plugin.settings] === false)) { const apiRes = await api.searchByTitle(query); res = res.concat(apiRes); } diff --git a/src/main.ts b/src/main.ts index 7b96a1e..b8b7711 100644 --- a/src/main.ts +++ b/src/main.ts @@ -156,7 +156,7 @@ export default class MediaDbPlugin extends Plugin { */ async createLinkWithSearchModal(): Promise { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { - return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, "default"); + return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, ""); }); if (!apiSearchResults) { @@ -218,7 +218,7 @@ export default class MediaDbPlugin extends Plugin { async createEntryWithAdvancedSearchModal(): Promise { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { - return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, "default"); + return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, ""); }); if (!apiSearchResults) { @@ -570,7 +570,7 @@ export default class MediaDbPlugin extends Plugin { let results: MediaTypeModel[] = []; try { - results = await this.apiManager.query(title, [selectedAPI], "default"); + results = await this.apiManager.query(title, [selectedAPI], ""); } catch (e) { erroredFiles.push({ filePath: file.path, error: e.toString() }); continue; diff --git a/src/modals/MediaDbAdvancedSearchModal.ts b/src/modals/MediaDbAdvancedSearchModal.ts index 605aec5..3093ac0 100644 --- a/src/modals/MediaDbAdvancedSearchModal.ts +++ b/src/modals/MediaDbAdvancedSearchModal.ts @@ -87,8 +87,7 @@ export class MediaDbAdvancedSearchModal extends Modal { // const apiToggleComponents: Component[] = []; for (const api of this.plugin.apiManager.apis) { - if (this.plugin.settings[[api.apiName, "default"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "game"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "series"].filter(s => s).join('') as keyof typeof this.plugin.settings] || this.plugin.settings[[api.apiName, "movie"].filter(s => s).join('') as keyof typeof this.plugin.settings]) { - const apiToggleListElementWrapper = contentEl.createEl('div', { cls: 'media-db-plugin-list-wrapper' }); + const apiToggleListElementWrapper = contentEl.createEl('div', { cls: 'media-db-plugin-list-wrapper' }); const apiToggleTextWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-text-wrapper' }); apiToggleTextWrapper.createEl('span', { text: api.apiName, cls: 'media-db-plugin-list-text' }); @@ -104,7 +103,6 @@ export class MediaDbAdvancedSearchModal extends Modal { }); apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); } - } contentEl.createDiv({ cls: 'media-db-plugin-spacer' }); diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 9a517ba..76b7e63 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -26,11 +26,6 @@ export interface MediaDbPluginSettings { MALAPIseries: boolean; SteamAPIgame: boolean; MobyGamesAPIgame: boolean; - BoardGameGeekAPIdefault: boolean; - MALAPIMangadefault: boolean; - MusicBrainzAPIdefault: boolean; - OpenLibraryAPIdefault: boolean; - WikipediaAPIdefault: boolean; movieTemplate: string; seriesTemplate: string; @@ -88,11 +83,6 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { MALAPImovie: true, SteamAPIgame: true, MobyGamesAPIgame: true, - BoardGameGeekAPIdefault: true, - MALAPIMangadefault: true, - MusicBrainzAPIdefault: true, - OpenLibraryAPIdefault: true, - WikipediaAPIdefault: true, movieTemplate: '', seriesTemplate: '', From 54766bb59e77256fc5f22ac9d9b3b48722d11354 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Thu, 1 Feb 2024 20:05:13 +0100 Subject: [PATCH 10/18] Reverted the api names For MAL, MusicBrainz and Wikipedia --- src/api/apis/MALAPIManga.ts | 2 +- src/api/apis/MusicBrainzAPI.ts | 2 +- src/api/apis/WikipediaAPI.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/apis/MALAPIManga.ts b/src/api/apis/MALAPIManga.ts index fb3f312..7cea003 100644 --- a/src/api/apis/MALAPIManga.ts +++ b/src/api/apis/MALAPIManga.ts @@ -12,7 +12,7 @@ export class MALAPIManga extends APIModel { super(); this.plugin = plugin; - this.apiName = 'MALAPIManga'; + this.apiName = 'MALAPI Manga'; this.apiDescription = 'A free API for Manga. Some results may take a long time to load.'; this.apiUrl = 'https://jikan.moe/'; this.types = [MediaType.Manga]; diff --git a/src/api/apis/MusicBrainzAPI.ts b/src/api/apis/MusicBrainzAPI.ts index 7b9ae95..b927f37 100644 --- a/src/api/apis/MusicBrainzAPI.ts +++ b/src/api/apis/MusicBrainzAPI.ts @@ -13,7 +13,7 @@ export class MusicBrainzAPI extends APIModel { super(); this.plugin = plugin; - this.apiName = 'MusicBrainzAPI'; + this.apiName = 'MusicBrainz API'; this.apiDescription = 'Free API for music albums.'; this.apiUrl = 'https://musicbrainz.org/'; this.types = [MediaType.MusicRelease]; diff --git a/src/api/apis/WikipediaAPI.ts b/src/api/apis/WikipediaAPI.ts index 03d476b..9cee7b5 100644 --- a/src/api/apis/WikipediaAPI.ts +++ b/src/api/apis/WikipediaAPI.ts @@ -12,7 +12,7 @@ export class WikipediaAPI extends APIModel { super(); this.plugin = plugin; - this.apiName = 'WikipediaAPI'; + this.apiName = 'Wikipedia API'; this.apiDescription = 'The API behind Wikipedia'; this.apiUrl = 'https://www.wikipedia.com'; this.types = [MediaType.Wiki]; From 5b35e552c5c1bff4e3c9a1a5181a43f72ba5f60f Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 6 Feb 2024 02:29:24 +0100 Subject: [PATCH 11/18] Second attempt to selectively turn off APIs --- src/api/APIManager.ts | 11 ++++------- src/api/APIModel.ts | 8 ++++++-- src/main.ts | 12 ++++++------ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index 56cee80..8cec919 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -1,14 +1,10 @@ import { APIModel } from './APIModel'; import { MediaTypeModel } from '../models/MediaTypeModel'; -import MediaDbPlugin from '../main'; - export class APIManager { - plugin: MediaDbPlugin; apis: APIModel[]; - constructor(plugin: MediaDbPlugin) { - this.plugin = plugin; + constructor() { this.apis = []; } @@ -18,12 +14,13 @@ export class APIManager { * @param query * @param apisToQuery */ - async query(query: string, apisToQuery: string[], mediaType: string): Promise { + async query(query: string, apisToQuery: string[]): Promise { console.debug(`MDB | api manager queried with "${query}"`); let res: MediaTypeModel[] = []; + for (const api of this.apis) { - if (apisToQuery.contains(api.apiName) && !(this.plugin.settings[[api.apiName, mediaType].filter(s => s).join('') as keyof typeof this.plugin.settings] === false)) { + if (apisToQuery.contains(api.apiName)) { const apiRes = await api.searchByTitle(query); res = res.concat(apiRes); } diff --git a/src/api/APIModel.ts b/src/api/APIModel.ts index c424508..90bbe22 100644 --- a/src/api/APIModel.ts +++ b/src/api/APIModel.ts @@ -1,11 +1,13 @@ import { MediaTypeModel } from '../models/MediaTypeModel'; import { MediaType } from '../utils/MediaType'; +import MediaDbPlugin from '../main'; export abstract class APIModel { apiName: string; apiUrl: string; apiDescription: string; types: MediaType[]; + plugin: MediaDbPlugin; /** * This function should query the api and return a list of matches. The matches should be caped at 20. @@ -17,7 +19,9 @@ export abstract class APIModel { abstract getById(id: string): Promise; hasType(type: MediaType): boolean { - return this.types.contains(type); + if (this.types.contains(type) && !(this.plugin.settings[[this.apiName, type.toString()].filter(s => s).join('') as keyof typeof this.plugin.settings] === false)){ + return true; + } } hasTypeOverlap(types: MediaType[]): boolean { @@ -28,4 +32,4 @@ export abstract class APIModel { } return false; } -} +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index b8b7711..af8a5cb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -39,7 +39,7 @@ export default class MediaDbPlugin extends Plugin { frontMatterRexExpPattern: string = '^(---)\\n[\\s\\S]*?\\n---'; async onload(): Promise { - this.apiManager = new APIManager(this); + this.apiManager = new APIManager(); // register APIs this.apiManager.registerAPI(new OMDbAPI(this)); this.apiManager.registerAPI(new MALAPI(this)); @@ -156,7 +156,7 @@ export default class MediaDbPlugin extends Plugin { */ async createLinkWithSearchModal(): Promise { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { - return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, ""); + return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); }); if (!apiSearchResults) { @@ -186,7 +186,7 @@ export default class MediaDbPlugin extends Plugin { let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openSearchModal(searchModalOptions ?? {}, async searchModalData => { types = searchModalData.types; const apis = this.apiManager.apis.filter(x => x.hasTypeOverlap(searchModalData.types)).map(x => x.apiName); - return await this.apiManager.query(searchModalData.query, apis, searchModalData.types.toString()); + return await this.apiManager.query(searchModalData.query, apis); }); if (!apiSearchResults) { @@ -218,7 +218,7 @@ export default class MediaDbPlugin extends Plugin { async createEntryWithAdvancedSearchModal(): Promise { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { - return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis, ""); + return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); }); if (!apiSearchResults) { @@ -570,7 +570,7 @@ export default class MediaDbPlugin extends Plugin { let results: MediaTypeModel[] = []; try { - results = await this.apiManager.query(title, [selectedAPI], ""); + results = await this.apiManager.query(title, [selectedAPI]); } catch (e) { erroredFiles.push({ filePath: file.path, error: e.toString() }); continue; @@ -671,4 +671,4 @@ export default class MediaDbPlugin extends Plugin { await this.saveData(this.settings); } -} +} \ No newline at end of file From 0634e3904f3f4f3900a59e80cff45f59e3eedceb Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 6 Feb 2024 02:51:00 +0100 Subject: [PATCH 12/18] Removed unneccessary stringifying --- src/api/APIModel.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/APIModel.ts b/src/api/APIModel.ts index 90bbe22..1dc05da 100644 --- a/src/api/APIModel.ts +++ b/src/api/APIModel.ts @@ -19,7 +19,7 @@ export abstract class APIModel { abstract getById(id: string): Promise; hasType(type: MediaType): boolean { - if (this.types.contains(type) && !(this.plugin.settings[[this.apiName, type.toString()].filter(s => s).join('') as keyof typeof this.plugin.settings] === false)){ + if (this.types.contains(type) && !(this.plugin.settings[[this.apiName, type].filter(s => s).join('') as keyof typeof this.plugin.settings] === false)){ return true; } } From c5ba44cfe5927e5690a8664fed652b15f262bdb2 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 6 Feb 2024 20:46:56 +0100 Subject: [PATCH 13/18] Modified the toggles so only one can be on at a time --- src/modals/MediaDbSearchModal.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/modals/MediaDbSearchModal.ts b/src/modals/MediaDbSearchModal.ts index b4c89a9..85b4ff8 100644 --- a/src/modals/MediaDbSearchModal.ts +++ b/src/modals/MediaDbSearchModal.ts @@ -76,6 +76,9 @@ export class MediaDbSearchModal extends Modal { const placeholder = 'Search by title'; const searchComponent = new TextComponent(contentEl); + const toggleComponents = []; + let currentToggle: ToggleComponent = null; + searchComponent.inputEl.style.width = '100%'; searchComponent.setPlaceholder(placeholder); searchComponent.setValue(this.query); @@ -99,10 +102,17 @@ export class MediaDbSearchModal extends Modal { const apiToggleComponent = new ToggleComponent(apiToggleComponentWrapper); apiToggleComponent.setTooltip(unCamelCase(mediaType)); apiToggleComponent.setValue(this.selectedTypes.find(x => x.name === mediaType).selected); + if (apiToggleComponent.getValue()) { + currentToggle = apiToggleComponent; + } apiToggleComponent.onChange(value => { - this.selectedTypes.find(x => x.name === mediaType).selected = value; + if (currentToggle && currentToggle !== apiToggleComponent) { + currentToggle.setValue(false); + } + currentToggle = value ? apiToggleComponent : null; }); apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); + toggleComponents.push(apiToggleComponent); } contentEl.createDiv({ cls: 'media-db-plugin-spacer' }); @@ -129,4 +139,4 @@ export class MediaDbSearchModal extends Modal { const { contentEl } = this; contentEl.empty(); } -} +} \ No newline at end of file From f52060482aff0e0f2623a012314699b542e229f3 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 6 Feb 2024 21:24:54 +0100 Subject: [PATCH 14/18] Fixed oversight in toggle code --- src/modals/MediaDbSearchModal.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/modals/MediaDbSearchModal.ts b/src/modals/MediaDbSearchModal.ts index 85b4ff8..b27c64f 100644 --- a/src/modals/MediaDbSearchModal.ts +++ b/src/modals/MediaDbSearchModal.ts @@ -106,10 +106,17 @@ export class MediaDbSearchModal extends Modal { currentToggle = apiToggleComponent; } apiToggleComponent.onChange(value => { - if (currentToggle && currentToggle !== apiToggleComponent) { - currentToggle.setValue(false); + if (value) { + if (currentToggle && currentToggle !== apiToggleComponent) { + currentToggle.setValue(false); + this.selectedTypes.find(x => x.name === mediaType).selected = false; + } + currentToggle = apiToggleComponent; + this.selectedTypes.find(x => x.name === mediaType).selected = true; + } else { + currentToggle = null; + this.selectedTypes.find(x => x.name === mediaType).selected = false; } - currentToggle = value ? apiToggleComponent : null; }); apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); toggleComponents.push(apiToggleComponent); From 5eec98d127e549f6d5d59407dff2d6d2daca7ea5 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sat, 16 Mar 2024 14:18:14 +0100 Subject: [PATCH 15/18] Ran formatter, removed unused array and updated APIModel.ts --- src/api/APIManager.ts | 2 +- src/api/APIModel.ts | 5 +-- src/main.ts | 2 +- src/modals/MediaDbAdvancedSearchModal.ts | 24 ++++++------- src/modals/MediaDbSearchModal.ts | 6 ++-- src/settings/Settings.ts | 46 ++++++++++++------------ src/utils/MediaTypeManager.ts | 2 +- src/utils/Utils.ts | 2 +- 8 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/api/APIManager.ts b/src/api/APIManager.ts index 8cec919..17f0f36 100644 --- a/src/api/APIManager.ts +++ b/src/api/APIManager.ts @@ -18,7 +18,7 @@ export class APIManager { console.debug(`MDB | api manager queried with "${query}"`); let res: MediaTypeModel[] = []; - + for (const api of this.apis) { if (apisToQuery.contains(api.apiName)) { const apiRes = await api.searchByTitle(query); diff --git a/src/api/APIModel.ts b/src/api/APIModel.ts index 1dc05da..1088367 100644 --- a/src/api/APIModel.ts +++ b/src/api/APIModel.ts @@ -1,5 +1,6 @@ import { MediaTypeModel } from '../models/MediaTypeModel'; import { MediaType } from '../utils/MediaType'; +import { MediaDbPluginSettings } from 'src/settings/Settings'; import MediaDbPlugin from '../main'; export abstract class APIModel { @@ -19,7 +20,7 @@ export abstract class APIModel { abstract getById(id: string): Promise; hasType(type: MediaType): boolean { - if (this.types.contains(type) && !(this.plugin.settings[[this.apiName, type].filter(s => s).join('') as keyof typeof this.plugin.settings] === false)){ + if (this.types.contains(type) && !(this.plugin.settings[(this.apiName + type) as keyof MediaDbPluginSettings] === false)) { return true; } } @@ -32,4 +33,4 @@ export abstract class APIModel { } return false; } -} \ No newline at end of file +} diff --git a/src/main.ts b/src/main.ts index af8a5cb..46f0b7d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -671,4 +671,4 @@ export default class MediaDbPlugin extends Plugin { await this.saveData(this.settings); } -} \ No newline at end of file +} diff --git a/src/modals/MediaDbAdvancedSearchModal.ts b/src/modals/MediaDbAdvancedSearchModal.ts index 3093ac0..9a79ac1 100644 --- a/src/modals/MediaDbAdvancedSearchModal.ts +++ b/src/modals/MediaDbAdvancedSearchModal.ts @@ -89,20 +89,20 @@ export class MediaDbAdvancedSearchModal extends Modal { 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' }); - apiToggleTextWrapper.createEl('span', { text: api.apiName, cls: 'media-db-plugin-list-text' }); - apiToggleTextWrapper.createEl('small', { text: api.apiDescription, cls: 'media-db-plugin-list-text' }); + const apiToggleTextWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-text-wrapper' }); + apiToggleTextWrapper.createEl('span', { text: api.apiName, cls: 'media-db-plugin-list-text' }); + apiToggleTextWrapper.createEl('small', { text: api.apiDescription, cls: 'media-db-plugin-list-text' }); - const apiToggleComponentWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-toggle' }); + const apiToggleComponentWrapper = apiToggleListElementWrapper.createEl('div', { cls: 'media-db-plugin-list-toggle' }); - const apiToggleComponent = new ToggleComponent(apiToggleComponentWrapper); - apiToggleComponent.setTooltip(api.apiName); - apiToggleComponent.setValue(this.selectedApis.find(x => x.name === api.apiName).selected); - apiToggleComponent.onChange(value => { - this.selectedApis.find(x => x.name === api.apiName).selected = value; - }); - apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); - } + const apiToggleComponent = new ToggleComponent(apiToggleComponentWrapper); + apiToggleComponent.setTooltip(api.apiName); + apiToggleComponent.setValue(this.selectedApis.find(x => x.name === api.apiName).selected); + apiToggleComponent.onChange(value => { + this.selectedApis.find(x => x.name === api.apiName).selected = value; + }); + apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); + } contentEl.createDiv({ cls: 'media-db-plugin-spacer' }); diff --git a/src/modals/MediaDbSearchModal.ts b/src/modals/MediaDbSearchModal.ts index b27c64f..5e3cb99 100644 --- a/src/modals/MediaDbSearchModal.ts +++ b/src/modals/MediaDbSearchModal.ts @@ -76,9 +76,8 @@ export class MediaDbSearchModal extends Modal { const placeholder = 'Search by title'; const searchComponent = new TextComponent(contentEl); - const toggleComponents = []; let currentToggle: ToggleComponent = null; - + searchComponent.inputEl.style.width = '100%'; searchComponent.setPlaceholder(placeholder); searchComponent.setValue(this.query); @@ -119,7 +118,6 @@ export class MediaDbSearchModal extends Modal { } }); apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl); - toggleComponents.push(apiToggleComponent); } contentEl.createDiv({ cls: 'media-db-plugin-spacer' }); @@ -146,4 +144,4 @@ export class MediaDbSearchModal extends Modal { const { contentEl } = this; contentEl.empty(); } -} \ No newline at end of file +} diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 76b7e63..5acf317 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -176,7 +176,7 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); - new Setting(containerEl) + new Setting(containerEl) .setName('Moby Games key') .setDesc('API key for "www.mobygames.com".') .addText(cb => { @@ -223,10 +223,10 @@ export class MediaDbSettingTab extends PluginSettingTab { .setDesc( fragWithHTML( "Your custom date format. Use 'YYYY-MM-DD' for example.
" + - "For more syntax, refer to format reference.
" + - "Your current syntax looks like this: " + - this.plugin.dateFormatter.getPreview() + - '', + "For more syntax, refer to format reference.
" + + "Your current syntax looks like this: " + + this.plugin.dateFormatter.getPreview() + + '', ), ) .addText(cb => { @@ -278,23 +278,23 @@ export class MediaDbSettingTab extends PluginSettingTab { containerEl.createEl('h3', { text: 'APIs Per Media Type' }); containerEl.createEl('h5', { text: 'Movies' }); new Setting(containerEl) - .setName('OMDb API') - .setDesc('Use OMDb API for movies.') - .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPImovie).onChange(data => { - this.plugin.settings.OMDbAPImovie = data; - this.plugin.saveSettings(); + .setName('OMDb API') + .setDesc('Use OMDb API for movies.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.OMDbAPImovie).onChange(data => { + this.plugin.settings.OMDbAPImovie = data; + this.plugin.saveSettings(); + }); }); - }); new Setting(containerEl) - .setName('MAL API') - .setDesc('Use MAL API for movies.') - .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPImovie).onChange(data => { - this.plugin.settings.MALAPImovie = data; - this.plugin.saveSettings(); + .setName('MAL API') + .setDesc('Use MAL API for movies.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.MALAPImovie).onChange(data => { + this.plugin.settings.MALAPImovie = data; + this.plugin.saveSettings(); + }); }); - }); containerEl.createEl('h5', { text: 'Series' }); new Setting(containerEl) .setName('OMDb API') @@ -305,7 +305,7 @@ export class MediaDbSettingTab extends PluginSettingTab { this.plugin.saveSettings(); }); }); - new Setting(containerEl) + new Setting(containerEl) .setName('MAL API') .setDesc('Use MAL API for series.') .addToggle(cb => { @@ -315,7 +315,7 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); containerEl.createEl('h5', { text: 'Games' }); - new Setting(containerEl) + new Setting(containerEl) .setName('OMDb API') .setDesc('Use OMDb API for games.') .addToggle(cb => { @@ -324,7 +324,7 @@ export class MediaDbSettingTab extends PluginSettingTab { this.plugin.saveSettings(); }); }); - new Setting(containerEl) + new Setting(containerEl) .setName('Steam API') .setDesc('Use OMDb API for games.') .addToggle(cb => { @@ -333,7 +333,7 @@ export class MediaDbSettingTab extends PluginSettingTab { this.plugin.saveSettings(); }); }); - new Setting(containerEl) + new Setting(containerEl) .setName('MobyGames API') .setDesc('Use MobyGames API for games.') .addToggle(cb => { diff --git a/src/utils/MediaTypeManager.ts b/src/utils/MediaTypeManager.ts index 54679af..50ec761 100644 --- a/src/utils/MediaTypeManager.ts +++ b/src/utils/MediaTypeManager.ts @@ -28,7 +28,7 @@ export class MediaTypeManager { mediaTemplateMap: Map; mediaFolderMap: Map; - constructor() {} + constructor() { } updateTemplates(settings: MediaDbPluginSettings): void { this.mediaFileNameTemplateMap = new Map(); diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index ccb21b9..56cb080 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -207,7 +207,7 @@ export function unCamelCase(str: string): string { // space before last upper in a sequence followed by lower .replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3') // uppercase the first character - .replace(/^./, function (str) { + .replace(/^./, function(str) { return str.toUpperCase(); }) ); From 31ffd0d185cb486de64cd89e19a8ee859c81fbc6 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sun, 17 Mar 2024 01:02:51 +0100 Subject: [PATCH 16/18] Added sub-objects for api toggles (WIP) --- src/api/APIModel.ts | 2 +- src/settings/Settings.ts | 74 ++++++++++++++++++++++++---------------- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/api/APIModel.ts b/src/api/APIModel.ts index 1088367..d5e1e5e 100644 --- a/src/api/APIModel.ts +++ b/src/api/APIModel.ts @@ -20,7 +20,7 @@ export abstract class APIModel { abstract getById(id: string): Promise; hasType(type: MediaType): boolean { - if (this.types.contains(type) && !(this.plugin.settings[(this.apiName + type) as keyof MediaDbPluginSettings] === false)) { + if (this.types.contains(type) && !(this.plugin.settings[((`${this.apiName}"."${type}`)) as keyof MediaDbPluginSettings] === false)) { return true; } } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 5acf317..a9c8486 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -19,14 +19,21 @@ export interface MediaDbPluginSettings { openNoteInNewTab: boolean; useDefaultFrontMatter: boolean; enableTemplaterIntegration: boolean; - OMDbAPImovie: boolean; - OMDbAPIseries: boolean; - OMDbAPIgame: boolean; - MALAPImovie: boolean; - MALAPIseries: boolean; - SteamAPIgame: boolean; - MobyGamesAPIgame: boolean; - + OMDbAPI: { + movie: boolean, + series: boolean, + game: boolean + }; + MALAPI: { + movie: boolean, + series: boolean + }; + SteamAPI: { + game: boolean + }; + MobyGamesAPI: { + game: boolean + }; movieTemplate: string; seriesTemplate: string; mangaTemplate: string; @@ -76,14 +83,21 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { openNoteInNewTab: true, useDefaultFrontMatter: true, enableTemplaterIntegration: false, - OMDbAPImovie: true, - OMDbAPIgame: true, - OMDbAPIseries: true, - MALAPIseries: true, - MALAPImovie: true, - SteamAPIgame: true, - MobyGamesAPIgame: true, - + OMDbAPI: { + movie: true, + game: true, + series: true, + }, + MALAPI: { + movie: true, + series: true, + }, + SteamAPI: { + game: true, + }, + MobyGamesAPI: { + game: true, + }, movieTemplate: '', seriesTemplate: '', mangaTemplate: '', @@ -281,8 +295,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for movies.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPImovie).onChange(data => { - this.plugin.settings.OMDbAPImovie = data; + cb.setValue(this.plugin.settings.OMDbAPI.movie).onChange(data => { + this.plugin.settings.OMDbAPI.movie = data; this.plugin.saveSettings(); }); }); @@ -290,8 +304,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MAL API') .setDesc('Use MAL API for movies.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPImovie).onChange(data => { - this.plugin.settings.MALAPImovie = data; + cb.setValue(this.plugin.settings.MALAPI.movie).onChange(data => { + this.plugin.settings.MALAPI.movie = data; this.plugin.saveSettings(); }); }); @@ -300,8 +314,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for series.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPIseries).onChange(data => { - this.plugin.settings.OMDbAPIseries = data; + cb.setValue(this.plugin.settings.OMDbAPI.series).onChange(data => { + this.plugin.settings.OMDbAPI.series = data; this.plugin.saveSettings(); }); }); @@ -309,8 +323,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MAL API') .setDesc('Use MAL API for series.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPIseries).onChange(data => { - this.plugin.settings.MALAPIseries = data; + cb.setValue(this.plugin.settings.MALAPI.series).onChange(data => { + this.plugin.settings.MALAPI.series = data; this.plugin.saveSettings(); }); }); @@ -319,8 +333,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPIgame).onChange(data => { - this.plugin.settings.OMDbAPIgame = data; + cb.setValue(this.plugin.settings.OMDbAPI.game).onChange(data => { + this.plugin.settings.OMDbAPI.game = data; this.plugin.saveSettings(); }); }); @@ -328,8 +342,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('Steam API') .setDesc('Use OMDb API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.SteamAPIgame).onChange(data => { - this.plugin.settings.SteamAPIgame = data; + cb.setValue(this.plugin.settings.SteamAPI.game).onChange(data => { + this.plugin.settings.SteamAPI.game = data; this.plugin.saveSettings(); }); }); @@ -337,8 +351,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MobyGames API') .setDesc('Use MobyGames API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MobyGamesAPIgame).onChange(data => { - this.plugin.settings.MobyGamesAPIgame = data; + cb.setValue(this.plugin.settings.MobyGamesAPI.game).onChange(data => { + this.plugin.settings.MobyGamesAPI.game = data; this.plugin.saveSettings(); }); }); From 139cf8388c72c590ccb806cd7f4e407c3d66b1e0 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sun, 17 Mar 2024 01:04:05 +0100 Subject: [PATCH 17/18] Ran formatter --- src/settings/Settings.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index a9c8486..fc34411 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -23,17 +23,17 @@ export interface MediaDbPluginSettings { movie: boolean, series: boolean, game: boolean - }; + }; MALAPI: { movie: boolean, series: boolean - }; + }; SteamAPI: { game: boolean - }; + }; MobyGamesAPI: { game: boolean - }; + }; movieTemplate: string; seriesTemplate: string; mangaTemplate: string; From 9bc3bea90d98a1df0dd5677c8ce62b307b9fbfea Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sun, 24 Mar 2024 17:44:10 +0100 Subject: [PATCH 18/18] Fixed the WIP sub object code --- src/api/APIModel.ts | 2 +- src/settings/Settings.ts | 90 +++++++++++++++++++++------------------- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/src/api/APIModel.ts b/src/api/APIModel.ts index d5e1e5e..6230457 100644 --- a/src/api/APIModel.ts +++ b/src/api/APIModel.ts @@ -20,7 +20,7 @@ export abstract class APIModel { abstract getById(id: string): Promise; hasType(type: MediaType): boolean { - if (this.types.contains(type) && !(this.plugin.settings[((`${this.apiName}"."${type}`)) as keyof MediaDbPluginSettings] === false)) { + if (this.types.contains(type) && (Boolean((this.plugin.settings.apiToggle as any)?.[this.apiName]?.[type] as MediaDbPluginSettings) === true || (this.plugin.settings.apiToggle as any)?.[this.apiName]?.[type] as MediaDbPluginSettings === undefined)) { return true; } } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index fc34411..d5a3578 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -19,21 +19,23 @@ export interface MediaDbPluginSettings { openNoteInNewTab: boolean; useDefaultFrontMatter: boolean; enableTemplaterIntegration: boolean; - OMDbAPI: { - movie: boolean, - series: boolean, - game: boolean - }; - MALAPI: { - movie: boolean, - series: boolean - }; - SteamAPI: { - game: boolean - }; - MobyGamesAPI: { - game: boolean - }; + apiToggle: { + OMDbAPI: { + movie: boolean; + series: boolean; + game: boolean; + }, + MALAPI: { + movie: boolean; + series: boolean; + }, + SteamAPI: { + game: boolean; + }, + MobyGamesAPI: { + game: boolean; + } + }, movieTemplate: string; seriesTemplate: string; mangaTemplate: string; @@ -83,20 +85,22 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { openNoteInNewTab: true, useDefaultFrontMatter: true, enableTemplaterIntegration: false, - OMDbAPI: { - movie: true, - game: true, - series: true, - }, - MALAPI: { - movie: true, - series: true, - }, - SteamAPI: { - game: true, - }, - MobyGamesAPI: { - game: true, + apiToggle: { + OMDbAPI: { + movie: true, + series: true, + game: true, + }, + MALAPI: { + movie: true, + series: true, + }, + SteamAPI: { + game: true, + }, + MobyGamesAPI: { + game: true, + } }, movieTemplate: '', seriesTemplate: '', @@ -295,8 +299,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for movies.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPI.movie).onChange(data => { - this.plugin.settings.OMDbAPI.movie = data; + cb.setValue(this.plugin.settings.apiToggle.OMDbAPI.movie).onChange(data => { + this.plugin.settings.apiToggle.OMDbAPI.movie = data; this.plugin.saveSettings(); }); }); @@ -304,8 +308,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MAL API') .setDesc('Use MAL API for movies.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPI.movie).onChange(data => { - this.plugin.settings.MALAPI.movie = data; + cb.setValue(this.plugin.settings.apiToggle.MALAPI.movie).onChange(data => { + this.plugin.settings.apiToggle.MALAPI.movie = data; this.plugin.saveSettings(); }); }); @@ -314,8 +318,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for series.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPI.series).onChange(data => { - this.plugin.settings.OMDbAPI.series = data; + cb.setValue(this.plugin.settings.apiToggle.OMDbAPI.series).onChange(data => { + this.plugin.settings.apiToggle.OMDbAPI.series = data; this.plugin.saveSettings(); }); }); @@ -323,8 +327,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MAL API') .setDesc('Use MAL API for series.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MALAPI.series).onChange(data => { - this.plugin.settings.MALAPI.series = data; + cb.setValue(this.plugin.settings.apiToggle.MALAPI.series).onChange(data => { + this.plugin.settings.apiToggle.MALAPI.series = data; this.plugin.saveSettings(); }); }); @@ -333,8 +337,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('OMDb API') .setDesc('Use OMDb API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.OMDbAPI.game).onChange(data => { - this.plugin.settings.OMDbAPI.game = data; + cb.setValue(this.plugin.settings.apiToggle.OMDbAPI.game).onChange(data => { + this.plugin.settings.apiToggle.OMDbAPI.game = data; this.plugin.saveSettings(); }); }); @@ -342,8 +346,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('Steam API') .setDesc('Use OMDb API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.SteamAPI.game).onChange(data => { - this.plugin.settings.SteamAPI.game = data; + cb.setValue(this.plugin.settings.apiToggle.SteamAPI.game).onChange(data => { + this.plugin.settings.apiToggle.SteamAPI.game = data; this.plugin.saveSettings(); }); }); @@ -351,8 +355,8 @@ export class MediaDbSettingTab extends PluginSettingTab { .setName('MobyGames API') .setDesc('Use MobyGames API for games.') .addToggle(cb => { - cb.setValue(this.plugin.settings.MobyGamesAPI.game).onChange(data => { - this.plugin.settings.MobyGamesAPI.game = data; + cb.setValue(this.plugin.settings.apiToggle.MobyGamesAPI.game).onChange(data => { + this.plugin.settings.apiToggle.MobyGamesAPI.game = data; this.plugin.saveSettings(); }); });