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] 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