Skip to content

Commit cf3d5c6

Browse files
Merge pull request #133 from ltctceplrm/master
Adding options to disable certain API per media type
2 parents 9257d8e + 9bc3bea commit cf3d5c6

File tree

5 files changed

+131
-10
lines changed

5 files changed

+131
-10
lines changed

src/api/APIModel.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import { MediaTypeModel } from '../models/MediaTypeModel';
22
import { MediaType } from '../utils/MediaType';
3+
import { MediaDbPluginSettings } from 'src/settings/Settings';
4+
import MediaDbPlugin from '../main';
35

46
export abstract class APIModel {
57
apiName: string;
68
apiUrl: string;
79
apiDescription: string;
810
types: MediaType[];
11+
plugin: MediaDbPlugin;
912

1013
/**
1114
* This function should query the api and return a list of matches. The matches should be caped at 20.
@@ -17,7 +20,9 @@ export abstract class APIModel {
1720
abstract getById(id: string): Promise<MediaTypeModel>;
1821

1922
hasType(type: MediaType): boolean {
20-
return this.types.contains(type);
23+
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)) {
24+
return true;
25+
}
2126
}
2227

2328
hasTypeOverlap(types: MediaType[]): boolean {

src/modals/MediaDbSearchModal.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ export class MediaDbSearchModal extends Modal {
7676

7777
const placeholder = 'Search by title';
7878
const searchComponent = new TextComponent(contentEl);
79+
let currentToggle: ToggleComponent = null;
80+
7981
searchComponent.inputEl.style.width = '100%';
8082
searchComponent.setPlaceholder(placeholder);
8183
searchComponent.setValue(this.query);
@@ -99,8 +101,21 @@ export class MediaDbSearchModal extends Modal {
99101
const apiToggleComponent = new ToggleComponent(apiToggleComponentWrapper);
100102
apiToggleComponent.setTooltip(unCamelCase(mediaType));
101103
apiToggleComponent.setValue(this.selectedTypes.find(x => x.name === mediaType).selected);
104+
if (apiToggleComponent.getValue()) {
105+
currentToggle = apiToggleComponent;
106+
}
102107
apiToggleComponent.onChange(value => {
103-
this.selectedTypes.find(x => x.name === mediaType).selected = value;
108+
if (value) {
109+
if (currentToggle && currentToggle !== apiToggleComponent) {
110+
currentToggle.setValue(false);
111+
this.selectedTypes.find(x => x.name === mediaType).selected = false;
112+
}
113+
currentToggle = apiToggleComponent;
114+
this.selectedTypes.find(x => x.name === mediaType).selected = true;
115+
} else {
116+
currentToggle = null;
117+
this.selectedTypes.find(x => x.name === mediaType).selected = false;
118+
}
104119
});
105120
apiToggleComponentWrapper.appendChild(apiToggleComponent.toggleEl);
106121
}

src/settings/Settings.ts

Lines changed: 107 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,23 @@ export interface MediaDbPluginSettings {
1919
openNoteInNewTab: boolean;
2020
useDefaultFrontMatter: boolean;
2121
enableTemplaterIntegration: boolean;
22-
22+
apiToggle: {
23+
OMDbAPI: {
24+
movie: boolean;
25+
series: boolean;
26+
game: boolean;
27+
},
28+
MALAPI: {
29+
movie: boolean;
30+
series: boolean;
31+
},
32+
SteamAPI: {
33+
game: boolean;
34+
},
35+
MobyGamesAPI: {
36+
game: boolean;
37+
}
38+
},
2339
movieTemplate: string;
2440
seriesTemplate: string;
2541
mangaTemplate: string;
@@ -69,7 +85,23 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = {
6985
openNoteInNewTab: true,
7086
useDefaultFrontMatter: true,
7187
enableTemplaterIntegration: false,
72-
88+
apiToggle: {
89+
OMDbAPI: {
90+
movie: true,
91+
series: true,
92+
game: true,
93+
},
94+
MALAPI: {
95+
movie: true,
96+
series: true,
97+
},
98+
SteamAPI: {
99+
game: true,
100+
},
101+
MobyGamesAPI: {
102+
game: true,
103+
}
104+
},
73105
movieTemplate: '',
74106
seriesTemplate: '',
75107
mangaTemplate: '',
@@ -209,10 +241,10 @@ export class MediaDbSettingTab extends PluginSettingTab {
209241
.setDesc(
210242
fragWithHTML(
211243
"Your custom date format. Use <em>'YYYY-MM-DD'</em> for example.<br>" +
212-
"For more syntax, refer to <a href='https://momentjs.com/docs/#/displaying/format/'>format reference</a>.<br>" +
213-
"Your current syntax looks like this: <b><a id='media-db-dateformat-preview' style='pointer-events: none; cursor: default; text-decoration: none;'>" +
214-
this.plugin.dateFormatter.getPreview() +
215-
'</a></b>',
244+
"For more syntax, refer to <a href='https://momentjs.com/docs/#/displaying/format/'>format reference</a>.<br>" +
245+
"Your current syntax looks like this: <b><a id='media-db-dateformat-preview' style='pointer-events: none; cursor: default; text-decoration: none;'>" +
246+
this.plugin.dateFormatter.getPreview() +
247+
'</a></b>',
216248
),
217249
)
218250
.addText(cb => {
@@ -260,6 +292,75 @@ export class MediaDbSettingTab extends PluginSettingTab {
260292
});
261293
});
262294

295+
296+
containerEl.createEl('h3', { text: 'APIs Per Media Type' });
297+
containerEl.createEl('h5', { text: 'Movies' });
298+
new Setting(containerEl)
299+
.setName('OMDb API')
300+
.setDesc('Use OMDb API for movies.')
301+
.addToggle(cb => {
302+
cb.setValue(this.plugin.settings.apiToggle.OMDbAPI.movie).onChange(data => {
303+
this.plugin.settings.apiToggle.OMDbAPI.movie = data;
304+
this.plugin.saveSettings();
305+
});
306+
});
307+
new Setting(containerEl)
308+
.setName('MAL API')
309+
.setDesc('Use MAL API for movies.')
310+
.addToggle(cb => {
311+
cb.setValue(this.plugin.settings.apiToggle.MALAPI.movie).onChange(data => {
312+
this.plugin.settings.apiToggle.MALAPI.movie = data;
313+
this.plugin.saveSettings();
314+
});
315+
});
316+
containerEl.createEl('h5', { text: 'Series' });
317+
new Setting(containerEl)
318+
.setName('OMDb API')
319+
.setDesc('Use OMDb API for series.')
320+
.addToggle(cb => {
321+
cb.setValue(this.plugin.settings.apiToggle.OMDbAPI.series).onChange(data => {
322+
this.plugin.settings.apiToggle.OMDbAPI.series = data;
323+
this.plugin.saveSettings();
324+
});
325+
});
326+
new Setting(containerEl)
327+
.setName('MAL API')
328+
.setDesc('Use MAL API for series.')
329+
.addToggle(cb => {
330+
cb.setValue(this.plugin.settings.apiToggle.MALAPI.series).onChange(data => {
331+
this.plugin.settings.apiToggle.MALAPI.series = data;
332+
this.plugin.saveSettings();
333+
});
334+
});
335+
containerEl.createEl('h5', { text: 'Games' });
336+
new Setting(containerEl)
337+
.setName('OMDb API')
338+
.setDesc('Use OMDb API for games.')
339+
.addToggle(cb => {
340+
cb.setValue(this.plugin.settings.apiToggle.OMDbAPI.game).onChange(data => {
341+
this.plugin.settings.apiToggle.OMDbAPI.game = data;
342+
this.plugin.saveSettings();
343+
});
344+
});
345+
new Setting(containerEl)
346+
.setName('Steam API')
347+
.setDesc('Use OMDb API for games.')
348+
.addToggle(cb => {
349+
cb.setValue(this.plugin.settings.apiToggle.SteamAPI.game).onChange(data => {
350+
this.plugin.settings.apiToggle.SteamAPI.game = data;
351+
this.plugin.saveSettings();
352+
});
353+
});
354+
new Setting(containerEl)
355+
.setName('MobyGames API')
356+
.setDesc('Use MobyGames API for games.')
357+
.addToggle(cb => {
358+
cb.setValue(this.plugin.settings.apiToggle.MobyGamesAPI.game).onChange(data => {
359+
this.plugin.settings.apiToggle.MobyGamesAPI.game = data;
360+
this.plugin.saveSettings();
361+
});
362+
});
363+
263364
containerEl.createEl('h3', { text: 'New File Location' });
264365
// region new file location
265366
new Setting(containerEl)

src/utils/MediaTypeManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class MediaTypeManager {
2828
mediaTemplateMap: Map<MediaType, string>;
2929
mediaFolderMap: Map<MediaType, string>;
3030

31-
constructor() {}
31+
constructor() { }
3232

3333
updateTemplates(settings: MediaDbPluginSettings): void {
3434
this.mediaFileNameTemplateMap = new Map<MediaType, string>();

src/utils/Utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ export function unCamelCase(str: string): string {
207207
// space before last upper in a sequence followed by lower
208208
.replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')
209209
// uppercase the first character
210-
.replace(/^./, function (str) {
210+
.replace(/^./, function(str) {
211211
return str.toUpperCase();
212212
})
213213
);

0 commit comments

Comments
 (0)