@@ -2,7 +2,7 @@ import {MarkdownView, Notice, parseYaml, Plugin, stringifyYaml, TFile, TFolder}
22import { getDefaultSettings , MediaDbPluginSettings , MediaDbSettingTab } from './settings/Settings' ;
33import { APIManager } from './api/APIManager' ;
44import { MediaTypeModel } from './models/MediaTypeModel' ;
5- import { dateTimeToString , markdownTable , replaceIllegalFileNameCharactersInString } from './utils/Utils' ;
5+ import { CreateNoteOptions , dateTimeToString , markdownTable , replaceIllegalFileNameCharactersInString } from './utils/Utils' ;
66import { OMDbAPI } from './api/apis/OMDbAPI' ;
77import { MALAPI } from './api/apis/MALAPI' ;
88import { WikipediaAPI } from './api/apis/WikipediaAPI' ;
@@ -57,7 +57,7 @@ export default class MediaDbPlugin extends Plugin {
5757 menu . addItem ( item => {
5858 item . setTitle ( 'Import folder as Media DB entries' )
5959 . setIcon ( 'database' )
60- . onClick ( ( ) => this . createEntriesFromFolder ( file as TFolder ) ) ;
60+ . onClick ( ( ) => this . createEntriesFromFolder ( file ) ) ;
6161 } ) ;
6262 }
6363 } ) ) ;
@@ -164,27 +164,44 @@ export default class MediaDbPlugin extends Plugin {
164164 } ) ;
165165
166166 if ( ! apiSearchResults ) {
167+ // TODO: add new notice saying no results found?
167168 return ;
168169 }
169170
170- const selectResults : MediaTypeModel [ ] = await this . modalHelper . openSelectModal ( { elements : apiSearchResults } , async ( selectModalData ) => {
171- return await this . queryDetails ( selectModalData . selected ) ;
172- } ) ;
171+ let selectResults : MediaTypeModel [ ] ;
172+ let proceed : boolean ;
173173
174- if ( ! selectResults ) {
175- return ;
174+ while ( ! proceed ) {
175+ selectResults = await this . modalHelper . openSelectModal ( { elements : apiSearchResults } , async ( selectModalData ) => {
176+ return await this . queryDetails ( selectModalData . selected ) ;
177+ } ) ;
178+ if ( ! selectResults ) {
179+ return ;
180+ }
181+
182+ proceed = await this . modalHelper . openPreviewModal ( { elements : selectResults } , async ( previewModalData ) => {
183+ return previewModalData . confirmed ;
184+ } ) ;
176185 }
177186
178187 await this . createMediaDbNotes ( selectResults ) ;
179188 }
180189
181- async createEntryWithIdSearchModal ( ) {
182- const idSearchResult : MediaTypeModel = await this . modalHelper . openIdSearchModal ( { } , async ( idSearchModalData ) => {
183- return await this . apiManager . queryDetailedInfoById ( idSearchModalData . query , idSearchModalData . api ) ;
184- } ) ;
190+ async createEntryWithIdSearchModal ( ) : Promise < void > {
191+ let idSearchResult : MediaTypeModel ;
192+ let proceed : boolean ;
185193
186- if ( ! idSearchResult ) {
187- return ;
194+ while ( ! proceed ) {
195+ idSearchResult = await this . modalHelper . openIdSearchModal ( { } , async ( idSearchModalData ) => {
196+ return await this . apiManager . queryDetailedInfoById ( idSearchModalData . query , idSearchModalData . api ) ;
197+ } ) ;
198+ if ( ! idSearchResult ) {
199+ return ;
200+ }
201+
202+ proceed = await this . modalHelper . openPreviewModal ( { elements : [ idSearchResult ] } , async ( previewModalData ) => {
203+ return previewModalData . confirmed ;
204+ } ) ;
188205 }
189206
190207 await this . createMediaDbNoteFromModel ( idSearchResult , { attachTemplate : true , openNote : true } ) ;
@@ -209,11 +226,11 @@ export default class MediaDbPlugin extends Plugin {
209226 return detailModels ;
210227 }
211228
212- async createMediaDbNoteFromModel ( mediaTypeModel : MediaTypeModel , options : { attachTemplate ?: boolean , attachFile ?: TFile , openNote ?: boolean } ) : Promise < void > {
229+ async createMediaDbNoteFromModel ( mediaTypeModel : MediaTypeModel , options : CreateNoteOptions ) : Promise < void > {
213230 try {
214231 console . debug ( 'MDB | creating new note' ) ;
215232
216- let fileContent = await this . generateMediaDbNoteContents ( mediaTypeModel , { attachTemplate : options . attachTemplate , attachFile : options . attachFile } ) ;
233+ let fileContent = await this . generateMediaDbNoteContents ( mediaTypeModel , options ) ;
217234
218235 await this . createNote ( this . mediaTypeManager . getFileName ( mediaTypeModel ) , fileContent , options . openNote ) ;
219236 } catch ( e ) {
@@ -222,15 +239,13 @@ export default class MediaDbPlugin extends Plugin {
222239 }
223240 }
224241
225- private async generateMediaDbNoteContents ( mediaTypeModel : MediaTypeModel , options : { attachTemplate ?: boolean , attachFile ?: TFile } ) {
242+ async generateMediaDbNoteContents ( mediaTypeModel : MediaTypeModel , options : CreateNoteOptions ) {
226243 let fileMetadata = this . modelPropertyMapper . convertObject ( mediaTypeModel . toMetaDataObject ( ) ) ;
227244 let fileContent = '' ;
245+ const template = options . attachTemplate ? await this . mediaTypeManager . getTemplate ( mediaTypeModel , this . app ) : '' ;
228246
229247 ( { fileMetadata, fileContent} = await this . attachFile ( fileMetadata , fileContent , options . attachFile ) ) ;
230- ( {
231- fileMetadata,
232- fileContent,
233- } = await this . attachTemplate ( fileMetadata , fileContent , options . attachTemplate ? await this . mediaTypeManager . getTemplate ( mediaTypeModel , this . app ) : '' ) ) ;
248+ ( { fileMetadata, fileContent} = await this . attachTemplate ( fileMetadata , fileContent , template ) ) ;
234249
235250 fileContent = `---\n${ this . settings . useCustomYamlStringifier ? YAMLConverter . toYaml ( fileMetadata ) : stringifyYaml ( fileMetadata ) } ---\n` + fileContent ;
236251 return fileContent ;
0 commit comments