Templates
This commit is contained in:
parent
ac82168740
commit
9d874cbd18
5 changed files with 126 additions and 16 deletions
|
|
@ -86,7 +86,7 @@ export class MALAPI extends APIModel {
|
|||
image: result.images?.jpg?.image_url ?? '',
|
||||
|
||||
released: true,
|
||||
premiere: result.aired?.string ?? 'unknown',
|
||||
premiere: (new Date(result.aired?.from)).toLocaleDateString() ?? 'unknown',
|
||||
|
||||
watched: false,
|
||||
lastWatched: '',
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import {APIModel} from '../APIModel';
|
|||
import {MediaTypeModel} from '../../models/MediaTypeModel';
|
||||
import {MovieModel} from '../../models/MovieModel';
|
||||
import MediaDbPlugin from '../../main';
|
||||
import {SeriesModel} from '../../models/SeriesModel';
|
||||
|
||||
export class OMDbAPI extends APIModel {
|
||||
plugin: MediaDbPlugin;
|
||||
|
|
@ -48,6 +49,14 @@ export class OMDbAPI extends APIModel {
|
|||
dataSource: this.apiName,
|
||||
id: value.imdbID,
|
||||
} as MovieModel));
|
||||
} else if (value.Type === 'series') {
|
||||
ret.push(new SeriesModel({
|
||||
type: 'series',
|
||||
title: value.Title,
|
||||
year: value.Year,
|
||||
dataSource: this.apiName,
|
||||
id: value.imdbID,
|
||||
} as SeriesModel));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -66,31 +75,57 @@ export class OMDbAPI extends APIModel {
|
|||
throw Error(`Received status code ${fetchData.status} from an API.`);
|
||||
}
|
||||
|
||||
const data = await fetchData.json();
|
||||
console.log(data);
|
||||
const result = await fetchData.json();
|
||||
console.log(result);
|
||||
|
||||
if (data.Type === 'movie') {
|
||||
if (result.Type === 'movie') {
|
||||
const model = new MovieModel({
|
||||
type: 'movie',
|
||||
title: data.Title,
|
||||
year: data.Year,
|
||||
title: result.Title,
|
||||
year: result.Year,
|
||||
dataSource: this.apiName,
|
||||
id: data.imdbID,
|
||||
id: result.imdbID,
|
||||
|
||||
genres: data.Genre?.split(', ') ?? [],
|
||||
producer: data.Director ?? 'unknown',
|
||||
duration: data.Runtime ?? 'unknown',
|
||||
onlineRating: Number.parseFloat(data.imdbRating ?? 0),
|
||||
image: data.Poster ?? '',
|
||||
genres: result.Genre?.split(', ') ?? [],
|
||||
producer: result.Director ?? 'unknown',
|
||||
duration: result.Runtime ?? 'unknown',
|
||||
onlineRating: Number.parseFloat(result.imdbRating ?? 0),
|
||||
image: result.Poster ?? '',
|
||||
|
||||
released: true,
|
||||
premiere: data.Released ?? 'unknown',
|
||||
premiere: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
||||
|
||||
watched: false,
|
||||
lastWatched: '',
|
||||
personalRating: 0,
|
||||
} as MovieModel);
|
||||
|
||||
return model;
|
||||
} else if (result.Type === 'series') {
|
||||
const model = new SeriesModel({
|
||||
type: 'series',
|
||||
title: result.Title,
|
||||
year: result.Year,
|
||||
dataSource: this.apiName,
|
||||
id: result.imdbID,
|
||||
|
||||
genres: result.Genre?.split(', ') ?? [],
|
||||
studios: [result.Director] ?? 'unknown',
|
||||
episodes: 0,
|
||||
duration: result.Runtime ?? 'unknown',
|
||||
onlineRating: Number.parseFloat(result.imdbRating ?? 0),
|
||||
image: result.Poster ?? '',
|
||||
|
||||
released: true,
|
||||
airing: false,
|
||||
airedFrom: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
||||
airedTo: 'unknown',
|
||||
|
||||
watched: false,
|
||||
lastWatched: '',
|
||||
personalRating: 0,
|
||||
} as SeriesModel);
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
|
|
|
|||
22
src/main.ts
22
src/main.ts
|
|
@ -1,4 +1,4 @@
|
|||
import {Notice, Plugin} from 'obsidian';
|
||||
import {Notice, Plugin, TFile} from 'obsidian';
|
||||
import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings';
|
||||
import {APIManager} from './api/APIManager';
|
||||
import {TestAPI} from './api/apis/TestAPI';
|
||||
|
|
@ -43,7 +43,7 @@ export default class MediaDbPlugin extends Plugin {
|
|||
async createMediaDbNote(): Promise<void> {
|
||||
try {
|
||||
let data: MediaTypeModel = await this.openMediaDbSearchModal();
|
||||
console.log('MDB | Create new note or something...');
|
||||
console.log('MDB | Creating new note...');
|
||||
|
||||
data = await this.apiManager.queryDetailedInfo(data);
|
||||
|
||||
|
|
@ -51,7 +51,23 @@ export default class MediaDbPlugin extends Plugin {
|
|||
|
||||
data.toMetaData();
|
||||
|
||||
const fileContent = `---\n${data.toMetaData()}---\n`;
|
||||
let fileContent = `---\n${data.toMetaData()}---\n`;
|
||||
|
||||
if (data.type === 'movie' && this.settings.movieTemplate) {
|
||||
const templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.movieTemplate).first();
|
||||
if (templateFile) {
|
||||
let template = await this.app.vault.read(templateFile);
|
||||
// console.log(template);
|
||||
fileContent += template;
|
||||
}
|
||||
} else if (data.type === 'series' && this.settings.seriesTemplate) {
|
||||
const templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.seriesTemplate).first();
|
||||
if (templateFile) {
|
||||
let template = await this.app.vault.read(templateFile);
|
||||
// console.log(template);
|
||||
fileContent += template;
|
||||
}
|
||||
}
|
||||
|
||||
const fileName = replaceIllegalFileNameCharactersInString(data.getFileName());
|
||||
const filePath = `${this.settings.folder.replace(/\/$/, '')}/${fileName}.md`;
|
||||
|
|
|
|||
|
|
@ -2,18 +2,23 @@ import {App, PluginSettingTab, Setting} from 'obsidian';
|
|||
|
||||
import MediaDbPlugin from '../main';
|
||||
import {FolderSuggest} from './suggesters/FolderSuggester';
|
||||
import {FileSuggest} from './suggesters/FileSuggester';
|
||||
|
||||
|
||||
export interface MediaDbPluginSettings {
|
||||
folder: string,
|
||||
sfwFilter: boolean,
|
||||
OMDbKey: string,
|
||||
movieTemplate: string,
|
||||
seriesTemplate: string,
|
||||
}
|
||||
|
||||
export const DEFAULT_SETTINGS: MediaDbPluginSettings = {
|
||||
folder: '',
|
||||
sfwFilter: true,
|
||||
OMDbKey: '',
|
||||
movieTemplate: '',
|
||||
seriesTemplate: '',
|
||||
};
|
||||
|
||||
export class MediaDbSettingTab extends PluginSettingTab {
|
||||
|
|
@ -44,6 +49,32 @@ export class MediaDbSettingTab extends PluginSettingTab {
|
|||
});
|
||||
});
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName('Movie template')
|
||||
.setDesc('Template file to be used when creating a new note for a movie.')
|
||||
.addSearch(cb => {
|
||||
new FileSuggest(this.app, cb.inputEl);
|
||||
cb.setPlaceholder('Example: movieTemplate.md')
|
||||
.setValue(this.plugin.settings.movieTemplate)
|
||||
.onChange(data => {
|
||||
this.plugin.settings.movieTemplate = data;
|
||||
this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName('Series template')
|
||||
.setDesc('Template file to be used when creating a new note for a series.')
|
||||
.addSearch(cb => {
|
||||
new FileSuggest(this.app, cb.inputEl);
|
||||
cb.setPlaceholder('Example: seriesTemplate.md')
|
||||
.setValue(this.plugin.settings.seriesTemplate)
|
||||
.onChange(data => {
|
||||
this.plugin.settings.seriesTemplate = data;
|
||||
this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName('OMDb API key')
|
||||
.setDesc('API key for "www.omdbapi.com".')
|
||||
|
|
|
|||
28
src/settings/suggesters/FileSuggester.ts
Normal file
28
src/settings/suggesters/FileSuggester.ts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
import {TextInputSuggest} from './Suggest';
|
||||
import {TAbstractFile, TFile} from 'obsidian';
|
||||
|
||||
export class FileSuggest extends TextInputSuggest<TFile> {
|
||||
getSuggestions(inputStr: string): TFile[] {
|
||||
const abstractFiles = this.app.vault.getAllLoadedFiles();
|
||||
const files: TFile[] = [];
|
||||
const lowerCaseInputStr = inputStr.toLowerCase();
|
||||
|
||||
abstractFiles.forEach((file: TAbstractFile) => {
|
||||
if (file instanceof TFile && file.name.toLowerCase().contains(lowerCaseInputStr)) {
|
||||
files.push(file);
|
||||
}
|
||||
});
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
renderSuggestion(file: TFile, el: HTMLElement): void {
|
||||
el.setText(file.name);
|
||||
}
|
||||
|
||||
selectSuggestion(file: TFile): void {
|
||||
this.inputEl.value = file.name;
|
||||
this.inputEl.trigger('input');
|
||||
this.close();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue