Own YAML Converter and update note won't override user data anymore
This commit is contained in:
parent
5916ed66eb
commit
0298270b03
14 changed files with 129 additions and 38 deletions
|
|
@ -107,9 +107,11 @@ export class MALAPI extends APIModel {
|
||||||
released: true,
|
released: true,
|
||||||
premiere: (new Date(result.aired?.from)).toLocaleDateString() ?? 'unknown',
|
premiere: (new Date(result.aired?.from)).toLocaleDateString() ?? 'unknown',
|
||||||
|
|
||||||
watched: false,
|
userData: {
|
||||||
lastWatched: '',
|
watched: false,
|
||||||
personalRating: 0,
|
lastWatched: '',
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as MovieModel);
|
} as MovieModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
@ -135,9 +137,11 @@ export class MALAPI extends APIModel {
|
||||||
airedTo: (new Date(result.aired?.to)).toLocaleDateString() ?? 'unknown',
|
airedTo: (new Date(result.aired?.to)).toLocaleDateString() ?? 'unknown',
|
||||||
airing: result.airing,
|
airing: result.airing,
|
||||||
|
|
||||||
watched: false,
|
userData: {
|
||||||
lastWatched: '',
|
watched: false,
|
||||||
personalRating: 0,
|
lastWatched: '',
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as SeriesModel);
|
} as SeriesModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,10 @@ export class MusicBrainzAPI extends APIModel {
|
||||||
genres: result.genres.map((g: any) => g.name),
|
genres: result.genres.map((g: any) => g.name),
|
||||||
subType: result['primary-type'],
|
subType: result['primary-type'],
|
||||||
rating: result.rating.value * 2,
|
rating: result.rating.value * 2,
|
||||||
|
|
||||||
|
userData: {
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as MusicReleaseModel);
|
} as MusicReleaseModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
|
||||||
|
|
@ -132,9 +132,11 @@ export class OMDbAPI extends APIModel {
|
||||||
released: true,
|
released: true,
|
||||||
premiere: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
premiere: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
||||||
|
|
||||||
watched: false,
|
userData: {
|
||||||
lastWatched: '',
|
watched: false,
|
||||||
personalRating: 0,
|
lastWatched: '',
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as MovieModel);
|
} as MovieModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
@ -160,9 +162,11 @@ export class OMDbAPI extends APIModel {
|
||||||
airedFrom: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
airedFrom: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
||||||
airedTo: 'unknown',
|
airedTo: 'unknown',
|
||||||
|
|
||||||
watched: false,
|
userData: {
|
||||||
lastWatched: '',
|
watched: false,
|
||||||
personalRating: 0,
|
lastWatched: '',
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as SeriesModel);
|
} as SeriesModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
@ -183,8 +187,10 @@ export class OMDbAPI extends APIModel {
|
||||||
released: true,
|
released: true,
|
||||||
releaseDate: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
releaseDate: (new Date(result.Released)).toLocaleDateString() ?? 'unknown',
|
||||||
|
|
||||||
played: false,
|
userData: {
|
||||||
personalRating: 0,
|
played: false,
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as GameModel);
|
} as GameModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,8 @@
|
||||||
import {APIModel} from '../APIModel';
|
import {APIModel} from '../APIModel';
|
||||||
import {MediaTypeModel} from '../../models/MediaTypeModel';
|
import {MediaTypeModel} from '../../models/MediaTypeModel';
|
||||||
import {MovieModel} from '../../models/MovieModel';
|
|
||||||
import MediaDbPlugin from '../../main';
|
import MediaDbPlugin from '../../main';
|
||||||
import {SeriesModel} from '../../models/SeriesModel';
|
|
||||||
import {GameModel} from '../../models/GameModel';
|
import {GameModel} from '../../models/GameModel';
|
||||||
import {contactEmail, debugLog, pluginName} from '../../utils/Utils';
|
import {debugLog} from '../../utils/Utils';
|
||||||
import {requestUrl} from 'obsidian';
|
import {requestUrl} from 'obsidian';
|
||||||
import {MediaType} from '../../utils/MediaType';
|
import {MediaType} from '../../utils/MediaType';
|
||||||
|
|
||||||
|
|
@ -99,8 +97,10 @@ export class SteamAPI extends APIModel {
|
||||||
released: !result.release_date?.comming_soon,
|
released: !result.release_date?.comming_soon,
|
||||||
releaseDate: (new Date(result.release_date?.date)).toLocaleDateString() ?? 'unknown',
|
releaseDate: (new Date(result.release_date?.date)).toLocaleDateString() ?? 'unknown',
|
||||||
|
|
||||||
played: false,
|
userData: {
|
||||||
personalRating: 0,
|
played: false,
|
||||||
|
personalRating: 0,
|
||||||
|
},
|
||||||
} as GameModel);
|
} as GameModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,8 @@ export class WikipediaAPI extends APIModel {
|
||||||
wikiUrl: result.fullurl,
|
wikiUrl: result.fullurl,
|
||||||
lastUpdated: (new Date(result.touched)).toLocaleDateString() ?? 'unknown',
|
lastUpdated: (new Date(result.touched)).toLocaleDateString() ?? 'unknown',
|
||||||
length: result.length,
|
length: result.length,
|
||||||
|
|
||||||
|
userData: {},
|
||||||
} as WikiModel);
|
} as WikiModel);
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|
|
||||||
16
src/main.ts
16
src/main.ts
|
|
@ -1,4 +1,4 @@
|
||||||
import {Notice, Plugin, TFile} from 'obsidian';
|
import {FrontMatterCache, Notice, Plugin, TFile} from 'obsidian';
|
||||||
import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings';
|
import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings';
|
||||||
import {APIManager} from './api/APIManager';
|
import {APIManager} from './api/APIManager';
|
||||||
import {MediaTypeModel} from './models/MediaTypeModel';
|
import {MediaTypeModel} from './models/MediaTypeModel';
|
||||||
|
|
@ -130,21 +130,25 @@ export default class MediaDbPlugin extends Plugin {
|
||||||
const activeLeaf: TFile = this.app.workspace.getActiveFile();
|
const activeLeaf: TFile = this.app.workspace.getActiveFile();
|
||||||
if (!activeLeaf.name) return;
|
if (!activeLeaf.name) return;
|
||||||
|
|
||||||
let metadata = this.app.metadataCache.getFileCache(activeLeaf).frontmatter;
|
let metadata: FrontMatterCache = this.app.metadataCache.getFileCache(activeLeaf).frontmatter;
|
||||||
|
|
||||||
if (!metadata.type || !metadata.dataSource || !metadata.id) {
|
if (!metadata?.type || !metadata?.dataSource || !metadata?.id) {
|
||||||
throw new Error('MDB | active note is not a Media DB entry or is missing metadata');
|
throw new Error('MDB | active note is not a Media DB entry or is missing metadata');
|
||||||
}
|
}
|
||||||
|
|
||||||
const newMetadata = await this.apiManager.queryDetailedInfo({dataSource: metadata.dataSource, id: metadata.id} as MediaTypeModel);
|
delete metadata.position; // remove unnecessary data from the FrontMatterCache
|
||||||
|
let oldMediaTypeModel = this.mediaTypeManager.createMediaTypeModelFromMediaType(metadata, metadata.type);
|
||||||
|
|
||||||
if (!newMetadata) {
|
let newMediaTypeModel = await this.apiManager.queryDetailedInfo({dataSource: metadata.dataSource, id: metadata.id} as MediaTypeModel);
|
||||||
|
if (!newMediaTypeModel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newMediaTypeModel = Object.assign(oldMediaTypeModel, newMediaTypeModel.getWithOutUserData());
|
||||||
|
|
||||||
console.log('MDB | deleting old entry');
|
console.log('MDB | deleting old entry');
|
||||||
await this.app.vault.delete(activeLeaf);
|
await this.app.vault.delete(activeLeaf);
|
||||||
await this.createMediaDbNoteFromModel(newMetadata);
|
await this.createMediaDbNoteFromModel(newMediaTypeModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadSettings() {
|
async loadSettings() {
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,10 @@ export class GameModel extends MediaTypeModel {
|
||||||
released: boolean;
|
released: boolean;
|
||||||
releaseDate: string;
|
releaseDate: string;
|
||||||
|
|
||||||
played: boolean;
|
userData: {
|
||||||
personalRating: number;
|
played: boolean;
|
||||||
|
personalRating: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
constructor(obj: any = {}) {
|
constructor(obj: any = {}) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import {MediaType} from '../utils/MediaType';
|
import {MediaType} from '../utils/MediaType';
|
||||||
import {stringifyYaml} from 'obsidian';
|
import {YAMLConverter} from '../utils/YAMLConverter';
|
||||||
|
|
||||||
export abstract class MediaTypeModel {
|
export abstract class MediaTypeModel {
|
||||||
type: string;
|
type: string;
|
||||||
|
|
@ -11,12 +11,20 @@ export abstract class MediaTypeModel {
|
||||||
url: string;
|
url: string;
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
|
userData: object;
|
||||||
|
|
||||||
abstract getMediaType(): MediaType;
|
abstract getMediaType(): MediaType;
|
||||||
|
|
||||||
abstract getTags(): string[];
|
abstract getTags(): string[];
|
||||||
|
|
||||||
toMetaData(): string {
|
toMetaData(): string {
|
||||||
return stringifyYaml({...this, tags: '#' + this.getTags().join('/')});
|
return YAMLConverter.toYaml({...this.getWithOutUserData(), ...this.userData, tags: '#' + this.getTags().join('/')});
|
||||||
|
}
|
||||||
|
|
||||||
|
getWithOutUserData(): object {
|
||||||
|
const copy = JSON.parse(JSON.stringify(this));
|
||||||
|
delete copy.userData;
|
||||||
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,11 @@ export class MovieModel extends MediaTypeModel {
|
||||||
released: boolean;
|
released: boolean;
|
||||||
premiere: string;
|
premiere: string;
|
||||||
|
|
||||||
watched: boolean;
|
userData: {
|
||||||
lastWatched: string;
|
watched: boolean;
|
||||||
personalRating: number;
|
lastWatched: string;
|
||||||
|
personalRating: number;
|
||||||
|
};
|
||||||
|
|
||||||
constructor(obj: any = {}) {
|
constructor(obj: any = {}) {
|
||||||
super();
|
super();
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,9 @@ export class MusicReleaseModel extends MediaTypeModel {
|
||||||
artists: string[];
|
artists: string[];
|
||||||
rating: number;
|
rating: number;
|
||||||
|
|
||||||
personalRating: number;
|
userData: {
|
||||||
|
personalRating: number;
|
||||||
|
};
|
||||||
|
|
||||||
constructor(obj: any = {}) {
|
constructor(obj: any = {}) {
|
||||||
super();
|
super();
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,11 @@ export class SeriesModel extends MediaTypeModel {
|
||||||
airedFrom: string;
|
airedFrom: string;
|
||||||
airedTo: string;
|
airedTo: string;
|
||||||
|
|
||||||
watched: boolean;
|
userData: {
|
||||||
lastWatched: string;
|
watched: boolean;
|
||||||
personalRating: number;
|
lastWatched: string;
|
||||||
|
personalRating: number;
|
||||||
|
};
|
||||||
|
|
||||||
constructor(obj: any = {}) {
|
constructor(obj: any = {}) {
|
||||||
super();
|
super();
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ export class WikiModel extends MediaTypeModel {
|
||||||
lastUpdated: string;
|
lastUpdated: string;
|
||||||
length: number;
|
length: number;
|
||||||
|
|
||||||
|
userData: {};
|
||||||
|
|
||||||
constructor(obj: any = {}) {
|
constructor(obj: any = {}) {
|
||||||
super();
|
super();
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,11 @@ import {MediaType} from './MediaType';
|
||||||
import {MediaTypeModel} from '../models/MediaTypeModel';
|
import {MediaTypeModel} from '../models/MediaTypeModel';
|
||||||
import {replaceTags} from './Utils';
|
import {replaceTags} from './Utils';
|
||||||
import {App, TFile} from 'obsidian';
|
import {App, TFile} from 'obsidian';
|
||||||
|
import {MovieModel} from '../models/MovieModel';
|
||||||
|
import {SeriesModel} from '../models/SeriesModel';
|
||||||
|
import {GameModel} from '../models/GameModel';
|
||||||
|
import {WikiModel} from '../models/WikiModel';
|
||||||
|
import {MusicReleaseModel} from '../models/MusicReleaseModel';
|
||||||
|
|
||||||
export class MediaTypeManager {
|
export class MediaTypeManager {
|
||||||
mediaFileNameTemplateMap: Map<MediaType, string>;
|
mediaFileNameTemplateMap: Map<MediaType, string>;
|
||||||
|
|
@ -49,4 +54,20 @@ export class MediaTypeManager {
|
||||||
// console.log(template);
|
// console.log(template);
|
||||||
return replaceTags(template, mediaTypeModel);
|
return replaceTags(template, mediaTypeModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createMediaTypeModelFromMediaType(obj: any, mediaType: MediaType): MediaTypeModel {
|
||||||
|
if (mediaType === MediaType.Movie) {
|
||||||
|
return new MovieModel(obj);
|
||||||
|
} else if (mediaType === MediaType.Series) {
|
||||||
|
return new SeriesModel(obj);
|
||||||
|
} else if (mediaType === MediaType.Game) {
|
||||||
|
return new GameModel(obj);
|
||||||
|
} else if (mediaType === MediaType.Wiki) {
|
||||||
|
return new WikiModel(obj);
|
||||||
|
} else if (mediaType === MediaType.MusicRelease) {
|
||||||
|
return new MusicReleaseModel(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
35
src/utils/YAMLConverter.ts
Normal file
35
src/utils/YAMLConverter.ts
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
export class YAMLConverter {
|
||||||
|
static toYaml(obj: any): string {
|
||||||
|
let output = '';
|
||||||
|
|
||||||
|
for (const [key, value] of Object.entries(obj)) {
|
||||||
|
output += `${key}: ${YAMLConverter.toYamlString(value)}\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static toYamlString(value: any): string {
|
||||||
|
if (typeof value === 'boolean') {
|
||||||
|
return value ? 'true' : 'false';
|
||||||
|
} else if (typeof value === 'number') {
|
||||||
|
return value.toString();
|
||||||
|
} else if (typeof value === 'string') {
|
||||||
|
return '"' + value + '"';
|
||||||
|
} else if (typeof value === 'object') {
|
||||||
|
let output = '';
|
||||||
|
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
for (const valueElement of value) {
|
||||||
|
output += `\n - ${YAMLConverter.toYamlString(valueElement)}`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (const [objKey, objValue] of Object.entries(value)) {
|
||||||
|
output += `\n ${objKey}: ${YAMLConverter.toYamlString(objValue)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue