Skip to content

Commit bb25caf

Browse files
committed
fix for #36, #33 and #34
1 parent 0db760b commit bb25caf

File tree

3 files changed

+108
-35
lines changed

3 files changed

+108
-35
lines changed

src/api/apis/MALAPI.ts

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,20 @@ export class MALAPI extends APIModel {
4141
let ret: MediaTypeModel[] = [];
4242

4343
for (const result of data.data) {
44-
const type = this.typeMappings.get(result.type.toLowerCase());
44+
const type = this.typeMappings.get(result.type?.toLowerCase());
4545
if (type === undefined) {
46-
continue;
46+
ret.push(new MovieModel({
47+
subType: '',
48+
title: result.title,
49+
englishTitle: result.title_english ?? result.title,
50+
year: result.year ?? result.aired?.prop?.from?.year ?? '',
51+
dataSource: this.apiName,
52+
id: result.mal_id,
53+
} as MovieModel));
4754
}
4855
if (type === 'movie' || type === 'special') {
4956
ret.push(new MovieModel({
50-
type: type,
57+
subType: type,
5158
title: result.title,
5259
englishTitle: result.title_english ?? result.title,
5360
year: result.year ?? result.aired?.prop?.from?.year ?? '',
@@ -56,7 +63,7 @@ export class MALAPI extends APIModel {
5663
} as MovieModel));
5764
} else if (type === 'series' || type === 'ova') {
5865
ret.push(new SeriesModel({
59-
type: type,
66+
subType: type,
6067
title: result.title,
6168
englishTitle: result.title_english ?? result.title,
6269
year: result.year ?? result.aired?.prop?.from?.year ?? '',
@@ -83,14 +90,39 @@ export class MALAPI extends APIModel {
8390
debugLog(data);
8491
const result = data.data;
8592

86-
const type = this.typeMappings.get(result.type.toLowerCase());
93+
const type = this.typeMappings.get(result.type?.toLowerCase());
8794
if (type === undefined) {
88-
throw Error(`${result.type.toLowerCase()} is an unsupported type.`);
95+
const model = new MovieModel({
96+
subType: '',
97+
title: result.title,
98+
englishTitle: result.title_english ?? result.title,
99+
year: result.year ?? result.aired?.prop?.from?.year ?? '',
100+
dataSource: this.apiName,
101+
url: result.url,
102+
id: result.mal_id,
103+
104+
genres: result.genres?.map((x: any) => x.name) ?? [],
105+
producer: result.studios?.map((x: any) => x.name).join(', ') ?? 'unknown',
106+
duration: result.duration ?? 'unknown',
107+
onlineRating: result.score ?? 0,
108+
image: result.images?.jpg?.image_url ?? '',
109+
110+
released: true,
111+
premiere: (new Date(result.aired?.from)).toLocaleDateString() ?? 'unknown',
112+
113+
userData: {
114+
watched: false,
115+
lastWatched: '',
116+
personalRating: 0,
117+
},
118+
} as MovieModel);
119+
120+
return model;
89121
}
90122

91123
if (type === 'movie' || type === 'special') {
92124
const model = new MovieModel({
93-
type: type,
125+
subType: type,
94126
title: result.title,
95127
englishTitle: result.title_english ?? result.title,
96128
year: result.year ?? result.aired?.prop?.from?.year ?? '',
@@ -117,7 +149,7 @@ export class MALAPI extends APIModel {
117149
return model;
118150
} else if (type === 'series' || type === 'ova') {
119151
const model = new SeriesModel({
120-
type: type,
152+
subType: type,
121153
title: result.title,
122154
englishTitle: result.title_english ?? result.title,
123155
year: result.year ?? result.aired?.prop?.from?.year ?? '',

src/main.ts

Lines changed: 67 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Notice, Plugin, stringifyYaml, TFile, TFolder} from 'obsidian';
1+
import {Notice, parseYaml, Plugin, stringifyYaml, TFile, TFolder} from 'obsidian';
22
import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings';
33
import {APIManager} from './api/APIManager';
44
import {MediaTypeModel} from './models/MediaTypeModel';
@@ -109,33 +109,13 @@ export default class MediaDbPlugin extends Plugin {
109109
console.log('MDB | Creating new note...');
110110
// console.log(mediaTypeModel);
111111

112-
let metadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject());
113-
if (attachFile) {
114-
let attachFileMetadata: any = this.app.metadataCache.getFileCache(attachFile).frontmatter;
115-
if (attachFileMetadata) {
116-
attachFileMetadata = JSON.parse(JSON.stringify(attachFileMetadata)); // deep copy
117-
delete attachFileMetadata.position;
118-
} else {
119-
attachFileMetadata = {};
120-
}
121-
122-
metadata = Object.assign(attachFileMetadata, metadata);
123-
}
124-
125-
debugLog(metadata);
112+
let fileMetadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject());
113+
let fileContent = '';
126114

127-
let fileContent = `---\n${this.settings.useCustomYamlStringifier ? YAMLConverter.toYaml(metadata) : stringifyYaml(metadata)}---\n`;
115+
({fileMetadata, fileContent} = await this.attachFile(fileMetadata, fileContent, attachFile));
116+
({fileMetadata, fileContent} = await this.attachTemplate(fileMetadata, fileContent, await this.mediaTypeManager.getTemplate(mediaTypeModel, this.app)));
128117

129-
if (this.settings.templates) {
130-
fileContent += await this.mediaTypeManager.getContent(mediaTypeModel, this.app);
131-
}
132-
133-
if (attachFile) {
134-
let attachFileContent: string = await this.app.vault.read(attachFile);
135-
const regExp = new RegExp('^(---)\\n[\\s\\S]*\\n---');
136-
attachFileContent = attachFileContent.replace(regExp, '');
137-
fileContent += '\n\n' + attachFileContent;
138-
}
118+
fileContent = `---\n${this.settings.useCustomYamlStringifier ? YAMLConverter.toYaml(fileMetadata) : stringifyYaml(fileMetadata)}---\n` + fileContent;
139119

140120
await this.createNote(this.mediaTypeManager.getFileName(mediaTypeModel), fileContent);
141121
} catch (e) {
@@ -144,6 +124,67 @@ export default class MediaDbPlugin extends Plugin {
144124
}
145125
}
146126

127+
async attachFile(fileMetadata: any, fileContent: string, fileToAttach?: TFile): Promise<{ fileMetadata: any, fileContent: string }> {
128+
if (!fileToAttach) {
129+
return {fileMetadata: fileMetadata, fileContent: fileContent};
130+
}
131+
132+
let attachFileMetadata: any = this.app.metadataCache.getFileCache(fileToAttach).frontmatter;
133+
if (attachFileMetadata) {
134+
attachFileMetadata = JSON.parse(JSON.stringify(attachFileMetadata)); // deep copy
135+
delete attachFileMetadata.position;
136+
} else {
137+
attachFileMetadata = {};
138+
}
139+
fileMetadata = Object.assign(attachFileMetadata, fileMetadata);
140+
141+
let attachFileContent: string = await this.app.vault.read(fileToAttach);
142+
const regExp = new RegExp('^(---)\\n[\\s\\S]*\\n---');
143+
attachFileContent = attachFileContent.replace(regExp, '');
144+
fileContent += '\n' + attachFileContent;
145+
146+
return {fileMetadata: fileMetadata, fileContent: fileContent};
147+
}
148+
149+
async attachTemplate(fileMetadata: any, fileContent: string, template: string): Promise<{ fileMetadata: any, fileContent: string }> {
150+
if (!template) {
151+
return {fileMetadata: fileMetadata, fileContent: fileContent};
152+
}
153+
154+
let templateMetadata: any = this.getMetaDataFromFileContent(template);
155+
fileMetadata = Object.assign(templateMetadata, fileMetadata);
156+
157+
const regExp = new RegExp('^(---)\\n[\\s\\S]*\\n---');
158+
const attachFileContent = template.replace(regExp, '');
159+
fileContent += '\n' + attachFileContent;
160+
161+
return {fileMetadata: fileMetadata, fileContent: fileContent};
162+
}
163+
164+
getMetaDataFromFileContent(fileContent: string): any {
165+
let metadata: any;
166+
167+
const regExp = new RegExp('^(---)\\n[\\s\\S]*\\n---');
168+
const frontMatterRegExpResult = regExp.exec(fileContent);
169+
if (!frontMatterRegExpResult) {
170+
return {};
171+
}
172+
let frontMatter = frontMatterRegExpResult[0];
173+
if (!frontMatter) {
174+
return {};
175+
}
176+
frontMatter = frontMatter.substring(4);
177+
frontMatter = frontMatter.substring(0, frontMatter.length - 3);
178+
179+
metadata = parseYaml(frontMatter);
180+
181+
if (!metadata) {
182+
metadata = {};
183+
}
184+
185+
return metadata;
186+
}
187+
147188
async createNote(fileName: string, fileContent: string, openFile: boolean = false) {
148189
fileName = replaceIllegalFileNameCharactersInString(fileName);
149190
const filePath = `${this.settings.folder.replace(/\/$/, '')}/${fileName}.md`;

src/utils/MediaTypeManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class MediaTypeManager {
3737
return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel);
3838
}
3939

40-
async getContent(mediaTypeModel: MediaTypeModel, app: App) {
40+
async getTemplate(mediaTypeModel: MediaTypeModel, app: App) {
4141
const templateFileName = this.mediaTemplateMap.get(mediaTypeModel.getMediaType());
4242

4343
if (!templateFileName) {

0 commit comments

Comments
 (0)