Skip to content

Commit 918c5b6

Browse files
committed
Cleanup and light changes
1 parent 3a4b697 commit 918c5b6

File tree

8 files changed

+198
-121
lines changed

8 files changed

+198
-121
lines changed

src/main.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {MarkdownView, Notice, parseYaml, Plugin, stringifyYaml, TFile, TFolder}
22
import {getDefaultSettings, MediaDbPluginSettings, MediaDbSettingTab} from './settings/Settings';
33
import {APIManager} from './api/APIManager';
44
import {MediaTypeModel} from './models/MediaTypeModel';
5-
import {dateTimeToString, markdownTable, replaceIllegalFileNameCharactersInString} from './utils/Utils';
5+
import {CreateNoteOptions, dateTimeToString, markdownTable, replaceIllegalFileNameCharactersInString} from './utils/Utils';
66
import {OMDbAPI} from './api/apis/OMDbAPI';
77
import {MALAPI} from './api/apis/MALAPI';
88
import {WikipediaAPI} from './api/apis/WikipediaAPI';
@@ -179,9 +179,9 @@ export default class MediaDbPlugin extends Plugin {
179179
return;
180180
}
181181

182-
proceed = await this.modalHelper.openPreviewModal(selectResults, async () => {
183-
return true;
184-
})
182+
proceed = await this.modalHelper.openPreviewModal({elements: selectResults}, async (previewModalData) => {
183+
return previewModalData.confirmed;
184+
});
185185
}
186186

187187
await this.createMediaDbNotes(selectResults);
@@ -194,14 +194,14 @@ export default class MediaDbPlugin extends Plugin {
194194
while (!proceed) {
195195
idSearchResult = await this.modalHelper.openIdSearchModal({}, async (idSearchModalData) => {
196196
return await this.apiManager.queryDetailedInfoById(idSearchModalData.query, idSearchModalData.api);
197-
})
197+
});
198198
if (!idSearchResult) {
199199
return;
200200
}
201201

202-
proceed = await this.modalHelper.openPreviewModal([idSearchResult], async () => {
203-
return true;
204-
})
202+
proceed = await this.modalHelper.openPreviewModal({elements: [idSearchResult]}, async (previewModalData) => {
203+
return previewModalData.confirmed;
204+
});
205205
}
206206

207207
await this.createMediaDbNoteFromModel(idSearchResult, {attachTemplate: true, openNote: true});
@@ -226,11 +226,11 @@ export default class MediaDbPlugin extends Plugin {
226226
return detailModels;
227227
}
228228

229-
async createMediaDbNoteFromModel(mediaTypeModel: MediaTypeModel, options: { attachTemplate?: boolean, attachFile?: TFile, openNote?: boolean }): Promise<void> {
229+
async createMediaDbNoteFromModel(mediaTypeModel: MediaTypeModel, options: CreateNoteOptions): Promise<void> {
230230
try {
231231
console.debug('MDB | creating new note');
232232

233-
let fileContent = await this.generateMediaDbNoteContents(mediaTypeModel, {attachTemplate: options.attachTemplate, attachFile: options.attachFile});
233+
let fileContent = await this.generateMediaDbNoteContents(mediaTypeModel, options);
234234

235235
await this.createNote(this.mediaTypeManager.getFileName(mediaTypeModel), fileContent, options.openNote);
236236
} catch (e) {
@@ -239,15 +239,13 @@ export default class MediaDbPlugin extends Plugin {
239239
}
240240
}
241241

242-
async generateMediaDbNoteContents(mediaTypeModel: MediaTypeModel, options: {attachTemplate?: boolean, attachFile?: TFile}) {
242+
async generateMediaDbNoteContents(mediaTypeModel: MediaTypeModel, options: CreateNoteOptions) {
243243
let fileMetadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject());
244244
let fileContent = '';
245+
const template = options.attachTemplate ? await this.mediaTypeManager.getTemplate(mediaTypeModel, this.app) : '';
245246

246247
({fileMetadata, fileContent} = await this.attachFile(fileMetadata, fileContent, options.attachFile));
247-
({
248-
fileMetadata,
249-
fileContent,
250-
} = await this.attachTemplate(fileMetadata, fileContent, options.attachTemplate ? await this.mediaTypeManager.getTemplate(mediaTypeModel, this.app) : ''));
248+
({fileMetadata, fileContent} = await this.attachTemplate(fileMetadata, fileContent, template));
251249

252250
fileContent = `---\n${this.settings.useCustomYamlStringifier ? YAMLConverter.toYaml(fileMetadata) : stringifyYaml(fileMetadata)}---\n` + fileContent;
253251
return fileContent;

src/modals/MediaDbPreviewModal.ts

Lines changed: 76 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,78 @@
1-
import { MarkdownRenderer, Modal, Setting, TFile } from "obsidian";
2-
import MediaDbPlugin from "src/main";
3-
import { MediaTypeModel } from "src/models/MediaTypeModel";
1+
import {ButtonComponent, MarkdownRenderer, Modal, Setting} from 'obsidian';
2+
import MediaDbPlugin from 'src/main';
3+
import {MediaTypeModel} from 'src/models/MediaTypeModel';
4+
import {PREVIEW_MODAL_DEFAULT_OPTIONS, PreviewModalData, PreviewModalOptions} from '../utils/ModalHelper';
5+
import {CreateNoteOptions} from '../utils/Utils';
46

57
export class MediaDbPreviewModal extends Modal {
6-
selectedSearchResults: MediaTypeModel[];
7-
options: { attachTemplate: boolean, attachFile: TFile};
8-
submitCallback: (res: boolean) => void;
9-
closeCallback: (err?: Error) => void;
10-
plugin: MediaDbPlugin;
11-
searchBtn: any;
12-
cancelButton: any;
13-
submitButton: any;
14-
busy: any;
15-
16-
constructor(plugin: MediaDbPlugin, mediaTypeModel: MediaTypeModel[], options: any) {
17-
super(plugin.app);
18-
this.plugin = plugin;
19-
this.selectedSearchResults = mediaTypeModel;
20-
this.options = options;
21-
}
22-
23-
setSubmitCallback(submitCallback: (res: boolean) => void): void {
24-
this.submitCallback = submitCallback;
25-
}
26-
27-
setCloseCallback(closeCallback: (err?: Error) => void): void {
28-
this.closeCallback = closeCallback;
29-
}
30-
31-
async preview(): Promise<void> {
32-
let { contentEl } = this;
33-
for (let result of this.selectedSearchResults) {
34-
let fileContent = await this.plugin.generateMediaDbNoteContents(result, { attachTemplate: this.options.attachTemplate, attachFile: this.options.attachFile });
35-
this.contentEl.createEl("h3", {text: result.englishTitle});
36-
const fileDiv = this.contentEl.createDiv();
37-
fileContent = `\n${fileContent}\n`;
38-
MarkdownRenderer.renderMarkdown(fileContent, fileDiv, null, null);
39-
}
40-
41-
contentEl.createDiv({ cls: 'media-db-plugin-spacer' });
42-
43-
const bottomSettingRow = new Setting(contentEl);
44-
bottomSettingRow.addButton(btn => {
45-
btn.setButtonText('Cancel');
46-
btn.onClick(() => this.closeCallback());
47-
btn.buttonEl.addClass('media-db-plugin-button');
48-
this.cancelButton = btn;
49-
});
50-
bottomSettingRow.addButton(btn => {
51-
btn.setButtonText('Ok');
52-
btn.setCta();
53-
btn.onClick(() => this.submitCallback(true));
54-
btn.buttonEl.addClass('media-db-plugin-button');
55-
this.submitButton = btn;
56-
})
57-
}
58-
59-
submit() {
60-
if (!this.busy) {
61-
this.busy = true;
62-
this.submitButton.setButtonText('Creating entry...');
63-
this.submitCallback(true);
64-
}
65-
}
66-
67-
onOpen(): void {
68-
this.preview()
69-
}
70-
}
8+
plugin: MediaDbPlugin;
9+
10+
createNoteOptions: CreateNoteOptions;
11+
elements: MediaTypeModel[];
12+
isBusy: boolean;
13+
title: string;
14+
cancelButton: ButtonComponent;
15+
submitButton: ButtonComponent;
16+
17+
submitCallback: (previewModalData: PreviewModalData) => void;
18+
closeCallback: (err?: Error) => void;
19+
20+
constructor(plugin: MediaDbPlugin, previewModalOptions: PreviewModalOptions) {
21+
previewModalOptions = Object.assign({}, PREVIEW_MODAL_DEFAULT_OPTIONS, previewModalOptions);
22+
23+
super(plugin.app);
24+
25+
this.plugin = plugin;
26+
this.title = previewModalOptions.modalTitle;
27+
this.elements = previewModalOptions.elements;
28+
this.createNoteOptions = previewModalOptions.createNoteOptions;
29+
}
30+
31+
setSubmitCallback(submitCallback: (previewModalData: PreviewModalData) => void): void {
32+
this.submitCallback = submitCallback;
33+
}
34+
35+
setCloseCallback(closeCallback: (err?: Error) => void): void {
36+
this.closeCallback = closeCallback;
37+
}
38+
39+
async preview(): Promise<void> {
40+
let {contentEl} = this;
41+
contentEl.addClass('media-db-plugin-preview-modal');
42+
43+
contentEl.createEl('h2', {text: this.title});
44+
45+
const previewWrapper = contentEl.createDiv({cls: 'media-db-plugin-preview-wrapper'});
46+
47+
for (let result of this.elements) {
48+
previewWrapper.createEl('h3', {text: result.englishTitle});
49+
const fileDiv = previewWrapper.createDiv();
50+
51+
let fileContent = await this.plugin.generateMediaDbNoteContents(result, this.createNoteOptions);
52+
fileContent = `\n${fileContent}\n`;
53+
54+
MarkdownRenderer.renderMarkdown(fileContent, fileDiv, null, null);
55+
}
56+
57+
contentEl.createDiv({cls: 'media-db-plugin-spacer'});
58+
59+
const bottomSettingRow = new Setting(contentEl);
60+
bottomSettingRow.addButton(btn => {
61+
btn.setButtonText('Cancel');
62+
btn.onClick(() => this.closeCallback());
63+
btn.buttonEl.addClass('media-db-plugin-button');
64+
this.cancelButton = btn;
65+
});
66+
bottomSettingRow.addButton(btn => {
67+
btn.setButtonText('Ok');
68+
btn.setCta();
69+
btn.onClick(() => this.submitCallback({confirmed: true}));
70+
btn.buttonEl.addClass('media-db-plugin-button');
71+
this.submitButton = btn;
72+
});
73+
}
74+
75+
onOpen(): void {
76+
this.preview();
77+
}
78+
}

src/modals/SelectModal.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ export abstract class SelectModal<T> extends Modal {
7979
async onOpen() {
8080
const {contentEl} = this;
8181

82+
contentEl.addClass('media-db-plugin-select-modal');
83+
8284
contentEl.createEl('h2', {text: this.title});
8385
contentEl.createEl('p', {text: this.description});
8486

85-
contentEl.addClass('media-db-plugin-select-modal');
86-
8787
this.elementWrapper = contentEl.createDiv({cls: 'media-db-plugin-select-wrapper'});
8888
this.elementWrapper.tabIndex = 0;
8989

src/settings/PropertyMappingModelComponent.svelte

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,16 @@
4646
<div class="media-db-plugin-property-mapping-to">
4747
<input type="text" spellcheck="false" bind:value="{property.newProperty}">
4848
</div>
49-
{ /if }
50-
{ /if }
49+
{ /if }
50+
{ /if }
5151
</div>
52-
{ /each }
52+
{ /each }
5353
</div>
5454
{ #if !validationResult?.res }
5555
<div class="media-db-plugin-property-mapping-validation">
5656
{validationResult?.err?.message}
5757
</div>
58-
{ /if }
58+
{ /if }
5959
<button
6060
class="media-db-plugin-property-mappings-save-button {validationResult?.res ? 'mod-cta' : 'mod-muted'}"
6161
on:click={() => { if(model.validate().res) save(model) }}>Save

src/settings/PropertyMappingModelsComponent.svelte

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import PropertyMappingModelComponent from './PropertyMappingModelComponent.svelte';
44
55
export let models: PropertyMappingModel[] = [];
6-
76
export let save: (model: PropertyMappingModel) => void;
8-
9-
// TODO: validate all the mappings before saving.
107
</script>
118

129
<style>
@@ -16,7 +13,7 @@
1613
<div class="setting-item" style="display: flex; gap: 10px; flex-direction: column; align-items: stretch;">
1714
{ #each models as model }
1815
<PropertyMappingModelComponent model={model} save={save}></PropertyMappingModelComponent>
19-
{ /each }
16+
{ /each }
2017

2118
<!--
2219
<pre>{JSON.stringify(models, null, 4)}</pre>

0 commit comments

Comments
 (0)