Templates

This commit is contained in:
mProjectsCode 2022-05-09 21:46:43 +02:00
parent ac82168740
commit 9d874cbd18
5 changed files with 126 additions and 16 deletions

View file

@ -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: '',

View file

@ -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;
}

View file

@ -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`;

View file

@ -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".')

View 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();
}
}