Append original file on bulk import #26
This commit is contained in:
parent
aa7659ee1f
commit
68654d97e7
2 changed files with 54 additions and 27 deletions
79
src/main.ts
79
src/main.ts
|
|
@ -2,7 +2,7 @@ import {Notice, Plugin, TFile, TFolder} from 'obsidian';
|
|||
import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings';
|
||||
import {APIManager} from './api/APIManager';
|
||||
import {MediaTypeModel} from './models/MediaTypeModel';
|
||||
import {dateTimeToString, markdownTable, replaceIllegalFileNameCharactersInString, UserCancelError, UserSkipError} from './utils/Utils';
|
||||
import {dateTimeToString, debugLog, markdownTable, replaceIllegalFileNameCharactersInString, UserCancelError, UserSkipError} from './utils/Utils';
|
||||
import {OMDbAPI} from './api/apis/OMDbAPI';
|
||||
import {MediaDbAdvancedSearchModal} from './modals/MediaDbAdvancedSearchModal';
|
||||
import {MediaDbSearchResultModal} from './modals/MediaDbSearchResultModal';
|
||||
|
|
@ -27,7 +27,7 @@ export default class MediaDbPlugin extends Plugin {
|
|||
|
||||
// add icon to the left ribbon
|
||||
const ribbonIconEl = this.addRibbonIcon('database', 'Add new Media DB entry', (evt: MouseEvent) =>
|
||||
this.createMediaDbNote(this.openMediaDbAdvancedSearchModal.bind(this)),
|
||||
this.createMediaDbNotes(this.openMediaDbAdvancedSearchModal.bind(this)),
|
||||
);
|
||||
ribbonIconEl.addClass('obsidian-media-db-plugin-ribbon-class');
|
||||
|
||||
|
|
@ -45,13 +45,13 @@ export default class MediaDbPlugin extends Plugin {
|
|||
this.addCommand({
|
||||
id: 'open-media-db-search-modal',
|
||||
name: 'Add new Media DB entry',
|
||||
callback: () => this.createMediaDbNote(this.openMediaDbAdvancedSearchModal.bind(this)),
|
||||
callback: () => this.createMediaDbNotes(this.openMediaDbAdvancedSearchModal.bind(this)),
|
||||
});
|
||||
// register command to open id search modal
|
||||
this.addCommand({
|
||||
id: 'open-media-db-id-search-modal',
|
||||
name: 'Add new Media DB entry by id',
|
||||
callback: () => this.createMediaDbNote(this.openMediaDbIdSearchModal.bind(this)),
|
||||
callback: () => this.createMediaDbNotes(this.openMediaDbIdSearchModal.bind(this)),
|
||||
});
|
||||
// register command to update the open note
|
||||
this.addCommand({
|
||||
|
|
@ -85,7 +85,7 @@ export default class MediaDbPlugin extends Plugin {
|
|||
this.modelPropertyMapper = new ModelPropertyMapper(this.settings);
|
||||
}
|
||||
|
||||
async createMediaDbNote(modal: () => Promise<MediaTypeModel[]>): Promise<void> {
|
||||
async createMediaDbNotes(modal: () => Promise<MediaTypeModel[]>, attachFile?: TFile): Promise<void> {
|
||||
let models: MediaTypeModel[] = [];
|
||||
try {
|
||||
models = await modal();
|
||||
|
|
@ -96,7 +96,7 @@ export default class MediaDbPlugin extends Plugin {
|
|||
|
||||
for (const model of models) {
|
||||
try {
|
||||
await this.createMediaDbNoteFromModel(await this.apiManager.queryDetailedInfo(model));
|
||||
await this.createMediaDbNoteFromModel(await this.apiManager.queryDetailedInfo(model), attachFile);
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
new Notice(e.toString());
|
||||
|
|
@ -104,43 +104,70 @@ export default class MediaDbPlugin extends Plugin {
|
|||
}
|
||||
}
|
||||
|
||||
async createMediaDbNoteFromModel(mediaTypeModel: MediaTypeModel): Promise<void> {
|
||||
async createMediaDbNoteFromModel(mediaTypeModel: MediaTypeModel, attachFile?: TFile): Promise<void> {
|
||||
try {
|
||||
console.log('MDB | Creating new note...');
|
||||
// console.log(mediaTypeModel);
|
||||
|
||||
let fileContent = `---\n${YAMLConverter.toYaml(this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject()))}---\n`;
|
||||
let metadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject());
|
||||
if (attachFile) {
|
||||
let attachFileMetadata: any = this.app.metadataCache.getFileCache(attachFile).frontmatter;
|
||||
if (attachFileMetadata) {
|
||||
attachFileMetadata = JSON.parse(JSON.stringify(attachFileMetadata)); // deep copy
|
||||
delete attachFileMetadata.position;
|
||||
} else {
|
||||
attachFileMetadata = {};
|
||||
}
|
||||
|
||||
metadata = Object.assign(attachFileMetadata, metadata);
|
||||
}
|
||||
|
||||
debugLog(metadata);
|
||||
|
||||
let fileContent = `---\n${YAMLConverter.toYaml(metadata)}---\n`;
|
||||
|
||||
if (this.settings.templates) {
|
||||
fileContent += await this.mediaTypeManager.getContent(mediaTypeModel, this.app);
|
||||
}
|
||||
|
||||
const fileName = replaceIllegalFileNameCharactersInString(this.mediaTypeManager.getFileName(mediaTypeModel));
|
||||
const filePath = `${this.settings.folder.replace(/\/$/, '')}/${fileName}.md`;
|
||||
|
||||
const folder = this.app.vault.getAbstractFileByPath(this.settings.folder);
|
||||
if (!folder) {
|
||||
await this.app.vault.createFolder(this.settings.folder.replace(/\/$/, ''));
|
||||
if (attachFile) {
|
||||
let attachFileContent: string = await this.app.vault.read(attachFile);
|
||||
const regExp = new RegExp('^(---)\\n[\\s\\S]*\\n---');
|
||||
attachFileContent = attachFileContent.replace(regExp, '');
|
||||
fileContent += '\n\n' + attachFileContent;
|
||||
}
|
||||
|
||||
const file = this.app.vault.getAbstractFileByPath(filePath);
|
||||
if (file) {
|
||||
await this.app.vault.delete(file);
|
||||
}
|
||||
await this.createNote(this.mediaTypeManager.getFileName(mediaTypeModel), fileContent);
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
new Notice(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
const targetFile = await this.app.vault.create(filePath, fileContent);
|
||||
async createNote(fileName: string, fileContent: string, openFile: boolean = false) {
|
||||
fileName = replaceIllegalFileNameCharactersInString(fileName);
|
||||
const filePath = `${this.settings.folder.replace(/\/$/, '')}/${fileName}.md`;
|
||||
|
||||
// open file
|
||||
const folder = this.app.vault.getAbstractFileByPath(this.settings.folder);
|
||||
if (!folder) {
|
||||
await this.app.vault.createFolder(this.settings.folder.replace(/\/$/, ''));
|
||||
}
|
||||
|
||||
const file = this.app.vault.getAbstractFileByPath(filePath);
|
||||
if (file) {
|
||||
await this.app.vault.delete(file);
|
||||
}
|
||||
|
||||
const targetFile = await this.app.vault.create(filePath, fileContent);
|
||||
|
||||
// open file
|
||||
if (openFile) {
|
||||
const activeLeaf = this.app.workspace.getUnpinnedLeaf();
|
||||
if (!activeLeaf) {
|
||||
console.warn('MDB | no active leaf, not opening media db note');
|
||||
return;
|
||||
}
|
||||
await activeLeaf.openFile(targetFile, {state: {mode: 'source'}});
|
||||
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
new Notice(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -155,7 +182,7 @@ export default class MediaDbPlugin extends Plugin {
|
|||
delete metadata.position; // remove unnecessary data from the FrontMatterCache
|
||||
metadata = this.modelPropertyMapper.convertObjectBack(metadata);
|
||||
|
||||
console.log(metadata);
|
||||
debugLog(metadata);
|
||||
|
||||
if (!metadata?.type || !metadata?.dataSource || !metadata?.id) {
|
||||
throw new Error('MDB | active note is not a Media DB entry or is missing metadata');
|
||||
|
|
@ -255,7 +282,7 @@ export default class MediaDbPlugin extends Plugin {
|
|||
continue;
|
||||
}
|
||||
|
||||
await this.createMediaDbNote(async () => selectedResults);
|
||||
await this.createMediaDbNotes(async () => selectedResults, appendContent ? file : null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue