diff --git a/src/api/apis/BoardGameGeekAPI.ts b/src/api/apis/BoardGameGeekAPI.ts index 6480380..eb395ef 100644 --- a/src/api/apis/BoardGameGeekAPI.ts +++ b/src/api/apis/BoardGameGeekAPI.ts @@ -18,6 +18,11 @@ export class BoardGameGeekAPI extends APIModel { this.types = [MediaType.BoardGame]; } + processImageLink(boardgameElement: { querySelector: (arg0: string) => { (): any; new (): any; textContent: any } }) { + const imageContent = boardgameElement.querySelector('image')?.textContent; + return this.plugin.settings.generateEmbedLinksForImages && imageContent ? `![](${imageContent})` : imageContent ?? undefined; + } + async searchByTitle(title: string): Promise { console.log(`MDB | api "${this.apiName}" queried by Title`); @@ -75,7 +80,7 @@ export class BoardGameGeekAPI extends APIModel { const boardgame = response.querySelector('boardgame')!; const title = boardgame.querySelector('name[primary=true]')!.textContent!; const year = boardgame.querySelector('yearpublished')?.textContent ?? ''; - const image = boardgame.querySelector('image')?.textContent ?? undefined; + const image = this.processImageLink(boardgame); const onlineRating = Number.parseFloat(boardgame.querySelector('statistics ratings average')?.textContent ?? '0'); const genres = Array.from(boardgame.querySelectorAll('boardgamecategory')).map(n => n!.textContent!); const complexityRating = Number.parseFloat(boardgame.querySelector('averageweight')?.textContent ?? '0'); diff --git a/src/api/apis/MALAPI.ts b/src/api/apis/MALAPI.ts index e3a91fa..8165dc9 100644 --- a/src/api/apis/MALAPI.ts +++ b/src/api/apis/MALAPI.ts @@ -108,7 +108,7 @@ export class MALAPI extends APIModel { url: result.url, id: result.mal_id, - plot: result.synopsis, + plot: result.synopsis ? result.synopsis.replace('[Written by MAL Rewrite]', '').trim() : '', genres: result.genres?.map((x: any) => x.name) ?? [], director: [], writer: [], @@ -116,7 +116,7 @@ export class MALAPI extends APIModel { duration: result.duration ?? 'unknown', onlineRating: result.score ?? 0, actors: [], - image: result.images?.jpg?.image_url ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.images?.jpg?.image_url})` ?? '' : result.images?.jpg?.image_url ?? '', released: true, premiere: this.plugin.dateFormatter.format(result.aired?.from, this.apiDateFormat) ?? 'unknown', @@ -150,7 +150,7 @@ export class MALAPI extends APIModel { duration: result.duration ?? 'unknown', onlineRating: result.score ?? 0, actors: [], - image: result.images?.jpg?.image_url ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.images?.jpg?.image_url})` ?? '' : result.images?.jpg?.image_url ?? '', released: true, premiere: this.plugin.dateFormatter.format(result.aired?.from, this.apiDateFormat) ?? 'unknown', @@ -174,6 +174,7 @@ export class MALAPI extends APIModel { url: result.url, id: result.mal_id, + plot: result.synopsis ? result.synopsis.replace('[Written by MAL Rewrite]', '').trim() : '', genres: result.genres?.map((x: any) => x.name) ?? [], writer: [], studio: result.studios?.map((x: any) => x.name) ?? [], @@ -181,7 +182,7 @@ export class MALAPI extends APIModel { duration: result.duration ?? 'unknown', onlineRating: result.score ?? 0, streamingServices: result.streaming?.map((x: any) => x.name) ?? [], - image: result.images?.jpg?.image_url ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.images?.jpg?.image_url})` ?? '' : result.images?.jpg?.image_url ?? '', released: true, airedFrom: this.plugin.dateFormatter.format(result.aired?.from, this.apiDateFormat) ?? 'unknown', diff --git a/src/api/apis/MALAPIManga.ts b/src/api/apis/MALAPIManga.ts index 7cea003..e91cda5 100644 --- a/src/api/apis/MALAPIManga.ts +++ b/src/api/apis/MALAPIManga.ts @@ -61,7 +61,7 @@ export class MALAPIManga extends APIModel { chapters: result.chapters, volumes: result.volumes, onlineRating: result.score ?? 0, - image: result.images?.jpg?.image_url ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.images?.jpg?.image_url})` ?? '' : result.images?.jpg?.image_url ?? '', released: true, publishedFrom: new Date(result.published?.from).toLocaleDateString() ?? 'unknown', @@ -111,7 +111,7 @@ export class MALAPIManga extends APIModel { chapters: result.chapters, volumes: result.volumes, onlineRating: result.score ?? 0, - image: result.images?.jpg?.image_url ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.images?.jpg?.image_url})` ?? '' : result.images?.jpg?.image_url ?? '', released: true, publishedFrom: new Date(result.published?.from).toLocaleDateString() ?? 'unknown', diff --git a/src/api/apis/MobyGamesAPI.ts b/src/api/apis/MobyGamesAPI.ts index adbefb2..3d5e4a4 100644 --- a/src/api/apis/MobyGamesAPI.ts +++ b/src/api/apis/MobyGamesAPI.ts @@ -86,7 +86,7 @@ export class MobyGamesAPI extends APIModel { publishers: [], genres: result.genres?.map((x: any) => x.genre_name) ?? [], onlineRating: result.moby_score, - image: result.sample_cover.image ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.sample_cover.image ?? ''})` ?? '' : result.sample_cover.image ?? '', released: true, releaseDate: result.platforms[0].first_release_date ?? 'unknown', diff --git a/src/api/apis/MusicBrainzAPI.ts b/src/api/apis/MusicBrainzAPI.ts index b927f37..53102e3 100644 --- a/src/api/apis/MusicBrainzAPI.ts +++ b/src/api/apis/MusicBrainzAPI.ts @@ -51,7 +51,9 @@ export class MusicBrainzAPI extends APIModel { dataSource: this.apiName, url: 'https://musicbrainz.org/release-group/' + result.id, id: result.id, - image: 'https://coverartarchive.org/release-group/' + result.id + '/front', + image: this.plugin.settings.generateEmbedLinksForImages + ? `![](${'https://coverartarchive.org/release-group/' + result.id + '/front'})` + : 'https://coverartarchive.org/release-group/' + result.id + '/front', artists: result['artist-credit'].map((a: any) => a.name), subType: result['primary-type'], @@ -89,7 +91,9 @@ export class MusicBrainzAPI extends APIModel { dataSource: this.apiName, url: 'https://musicbrainz.org/release-group/' + result.id, id: result.id, - image: 'https://coverartarchive.org/release-group/' + result.id + '/front', + image: this.plugin.settings.generateEmbedLinksForImages + ? `![](${'https://coverartarchive.org/release-group/' + result.id + '/front'})` + : 'https://coverartarchive.org/release-group/' + result.id + '/front', artists: result['artist-credit'].map((a: any) => a.name), genres: result.genres.map((g: any) => g.name), diff --git a/src/api/apis/OMDbAPI.ts b/src/api/apis/OMDbAPI.ts index 13308f6..c4fd55a 100644 --- a/src/api/apis/OMDbAPI.ts +++ b/src/api/apis/OMDbAPI.ts @@ -142,7 +142,7 @@ export class OMDbAPI extends APIModel { duration: result.Runtime ?? 'unknown', onlineRating: Number.parseFloat(result.imdbRating ?? 0), actors: result.Actors?.split(', ') ?? [], - image: result.Poster ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? (result.Poster ? `![](${result.Poster})` : '') : result.Poster ? result.Poster : '', released: true, streamingServices: [], @@ -174,7 +174,7 @@ export class OMDbAPI extends APIModel { duration: result.Runtime ?? 'unknown', onlineRating: Number.parseFloat(result.imdbRating ?? 0), actors: result.Actors?.split(', ') ?? [], - image: result.Poster ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? (result.Poster ? `![](${result.Poster})` : '') : result.Poster ? result.Poster : '', released: true, streamingServices: [], @@ -204,7 +204,7 @@ export class OMDbAPI extends APIModel { publishers: [], genres: result.Genre?.split(', ') ?? [], onlineRating: Number.parseFloat(result.imdbRating ?? 0), - image: result.Poster ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? (result.Poster ? `![](${result.Poster})` : '') : result.Poster ? result.Poster : '', released: true, releaseDate: this.plugin.dateFormatter.format(result.Released, this.apiDateFormat) ?? 'unknown', diff --git a/src/api/apis/OpenLibraryAPI.ts b/src/api/apis/OpenLibraryAPI.ts index 725db0e..d41f7c5 100644 --- a/src/api/apis/OpenLibraryAPI.ts +++ b/src/api/apis/OpenLibraryAPI.ts @@ -78,7 +78,9 @@ export class OpenLibraryAPI extends APIModel { plot: result.description ?? 'unknown', pages: result.number_of_pages_median ?? 'unknown', onlineRating: Number.parseFloat(Number(result.ratings_average ?? 0).toFixed(2)), - image: `https://covers.openlibrary.org/b/OLID/` + result.cover_edition_key + `-L.jpg`, + image: this.plugin.settings.generateEmbedLinksForImages + ? `![](${`https://covers.openlibrary.org/b/OLID/` + result.cover_edition_key + `-L.jpg`}` + : `https://covers.openlibrary.org/b/OLID/` + result.cover_edition_key + `-L.jpg`, released: true, diff --git a/src/api/apis/SteamAPI.ts b/src/api/apis/SteamAPI.ts index 45182e0..bc76393 100644 --- a/src/api/apis/SteamAPI.ts +++ b/src/api/apis/SteamAPI.ts @@ -115,7 +115,7 @@ export class SteamAPI extends APIModel { publishers: result['publishers'], genres: result.genres?.map((x: any) => x.description) ?? [], onlineRating: Number.parseFloat(result.metacritic?.score ?? 0), - image: result.header_image ?? '', + image: this.plugin.settings.generateEmbedLinksForImages ? `![](${result.header_image ?? ''})` : result.header_image ?? '', released: !result.release_date?.comming_soon, releaseDate: this.plugin.dateFormatter.format(result.release_date?.date, this.apiDateFormat) ?? 'unknown', diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 5d91d47..5e72ea1 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -18,6 +18,7 @@ export interface MediaDbPluginSettings { openNoteInNewTab: boolean; useDefaultFrontMatter: boolean; enableTemplaterIntegration: boolean; + generateEmbedLinksForImages: boolean; apiToggle: { OMDbAPI: { movie: boolean; @@ -83,6 +84,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { openNoteInNewTab: true, useDefaultFrontMatter: true, enableTemplaterIntegration: false, + generateEmbedLinksForImages: false, apiToggle: { OMDbAPI: { movie: true, @@ -279,6 +281,15 @@ export class MediaDbSettingTab extends PluginSettingTab { void this.plugin.saveSettings(); }); }); + new Setting(containerEl) + .setName('Embed image links in YAML') + .setDesc('Save image links as markdown embeds in the frontmatter, for easier handling with e.g. Dataview.') + .addToggle(cb => { + cb.setValue(this.plugin.settings.generateEmbedLinksForImages).onChange(data => { + this.plugin.settings.generateEmbedLinksForImages = data; + void this.plugin.saveSettings(); + }); + }); containerEl.createEl('h3', { text: 'APIs Per Media Type' }); containerEl.createEl('h5', { text: 'Movies' });