@@ -95,38 +95,72 @@ export default class MediaDbPlugin extends Plugin {
9595
9696 async createEntryWithAdvancedSearchModal ( ) {
9797 let results : MediaTypeModel [ ] = [ ] ;
98+
99+ const { advancedSearchOptions, advancedSearchModal} = await this . openMediaDbAdvancedSearchModal ( ) ;
100+ if ( ! advancedSearchOptions ) {
101+ advancedSearchModal . close ( ) ;
102+ return ;
103+ }
104+
105+ let apiSearchResults : MediaTypeModel [ ] = undefined ;
98106 try {
99- const { query, apis} = await this . openMediaDbAdvancedSearchModal ( ) ;
107+ apiSearchResults = await this . apiManager . query ( advancedSearchOptions . query , advancedSearchOptions . apis ) ;
108+ } catch ( e ) {
109+ console . warn ( e ) ;
110+ new Notice ( e . toString ( ) ) ;
111+ advancedSearchModal . close ( ) ;
112+ return ;
113+ }
100114
101- new Notice ( 'MediaDB Searching...' ) ;
115+ advancedSearchModal . close ( ) ;
102116
103- const apiSearchResults = await this . apiManager . query ( query , apis ) ;
104- const selectResults = await this . openMediaDbSelectModal ( apiSearchResults , false ) ;
105- results = await this . queryDetails ( selectResults ) ;
117+ const { selectRes, selectModal} = await this . openMediaDbSelectModal ( apiSearchResults , false ) ;
118+ if ( ! selectRes ) {
119+ selectModal . close ( ) ;
120+ return ;
121+ }
122+
123+ try {
124+ results = await this . queryDetails ( selectRes ) ;
106125 } catch ( e ) {
107126 console . warn ( e ) ;
108127 new Notice ( e . toString ( ) ) ;
128+ selectModal . close ( ) ;
129+ return ;
109130 }
110131
132+ selectModal . close ( ) ;
133+
111134 debugLog ( results ) ;
112- await this . createMediaDbNotes ( results ) ;
135+ if ( results ) {
136+ await this . createMediaDbNotes ( results ) ;
137+ }
113138 }
114139
115140 async createEntryWithIdSearchModal ( ) {
116141 let result : MediaTypeModel = undefined ;
117- try {
118- const { query, api} = await this . openMediaDbIdSearchModal ( ) ;
119142
120- new Notice ( 'MediaDB Searching...' ) ;
143+ const { idSearchOptions, idSearchModal} = await this . openMediaDbIdSearchModal ( ) ;
144+ if ( ! idSearchOptions ) {
145+ idSearchModal . close ( ) ;
146+ return ;
147+ }
121148
122- result = await this . apiManager . queryDetailedInfoById ( query , api ) ;
149+ try {
150+ result = await this . apiManager . queryDetailedInfoById ( idSearchOptions . query , idSearchOptions . api ) ;
123151 } catch ( e ) {
124152 console . warn ( e ) ;
125153 new Notice ( e . toString ( ) ) ;
154+ idSearchModal . close ( ) ;
155+ return ;
126156 }
127157
158+ idSearchModal . close ( ) ;
159+
128160 debugLog ( result ) ;
129- await this . createMediaDbNoteFromModel ( result ) ;
161+ if ( result ) {
162+ await this . createMediaDbNoteFromModel ( result ) ;
163+ }
130164 }
131165
132166 async createMediaDbNotes ( models : MediaTypeModel [ ] , attachFile ?: TFile ) : Promise < void > {
@@ -340,23 +374,23 @@ export default class MediaDbPlugin extends Plugin {
340374 }
341375
342376 let selectedResults : MediaTypeModel [ ] = [ ] ;
377+ const modal = new MediaDbSearchResultModal ( this , results , true ) ;
343378 try {
344379 selectedResults = await new Promise ( ( resolve , reject ) => {
345- const searchResultModal = new MediaDbSearchResultModal ( this . app , this , results , true , ( res , err ) => {
380+ modal . title = `Results for \'${ title } \'` ;
381+ modal . setSubmitCallback ( res => resolve ( res ) ) ;
382+ modal . setSkipCallback ( ( ) => reject ( new UserCancelError ( 'user skipped' ) ) ) ;
383+ modal . setCloseCallback ( err => {
346384 if ( err ) {
347- return reject ( err ) ;
385+ reject ( err ) ;
348386 }
349- resolve ( res ) ;
350- } , ( ) => {
351387 reject ( new UserCancelError ( 'user canceled' ) ) ;
352- } , ( ) => {
353- reject ( new UserSkipError ( 'user skipped' ) ) ;
354388 } ) ;
355389
356- searchResultModal . title = `Results for \'${ title } \'` ;
357- searchResultModal . open ( ) ;
390+ modal . open ( ) ;
358391 } ) ;
359392 } catch ( e ) {
393+ modal . close ( ) ;
360394 if ( e instanceof UserCancelError ) {
361395 erroredFiles . push ( { filePath : file . path , error : e . message } ) ;
362396 canceled = true ;
@@ -377,6 +411,8 @@ export default class MediaDbPlugin extends Plugin {
377411
378412 const detailedResults = await this . queryDetails ( selectedResults ) ;
379413 await this . createMediaDbNotes ( detailedResults , appendContent ? file : null ) ;
414+
415+ modal . close ( ) ;
380416 }
381417 }
382418
@@ -396,39 +432,53 @@ export default class MediaDbPlugin extends Plugin {
396432 const targetFile = await this . app . vault . create ( filePath , fileContent ) ;
397433 }
398434
399- async openMediaDbAdvancedSearchModal ( ) : Promise < { query : string , apis : string [ ] } > {
400- return await new Promise ( ( resolve , reject ) => {
401- new MediaDbAdvancedSearchModal ( this . app , this , ( res , err ) => {
435+ async openMediaDbAdvancedSearchModal ( ) : Promise < { advancedSearchOptions : { query : string , apis : string [ ] } , advancedSearchModal : MediaDbAdvancedSearchModal } > {
436+ const modal = new MediaDbAdvancedSearchModal ( this ) ;
437+ const res : { query : string , apis : string [ ] } = await new Promise ( ( resolve , reject ) => {
438+ modal . setSubmitCallback ( res => resolve ( res ) ) ;
439+ modal . setCloseCallback ( err => {
402440 if ( err ) {
403- return reject ( err ) ;
441+ reject ( err ) ;
404442 }
405- resolve ( res ) ;
406- } ) . open ( ) ;
443+ resolve ( undefined ) ;
444+ } ) ;
445+
446+ modal . open ( ) ;
407447 } ) ;
448+ return { advancedSearchOptions : res , advancedSearchModal : modal } ;
408449 }
409450
410- async openMediaDbIdSearchModal ( ) : Promise < { query : string , api : string } > {
411- return await new Promise ( ( resolve , reject ) => {
412- new MediaDbIdSearchModal ( this . app , this , ( res , err ) => {
451+ async openMediaDbIdSearchModal ( ) : Promise < { idSearchOptions : { query : string , api : string } , idSearchModal : MediaDbIdSearchModal } > {
452+ const modal = new MediaDbIdSearchModal ( this ) ;
453+ const res : { query : string , api : string } = await new Promise ( ( resolve , reject ) => {
454+ modal . setSubmitCallback ( res => resolve ( res ) ) ;
455+ modal . setCloseCallback ( err => {
413456 if ( err ) {
414- return reject ( err ) ;
457+ reject ( err ) ;
415458 }
416- resolve ( res ) ;
417- } ) . open ( ) ;
459+ resolve ( undefined ) ;
460+ } ) ;
461+
462+ modal . open ( ) ;
418463 } ) ;
464+ return { idSearchOptions : res , idSearchModal : modal } ;
419465 }
420466
421- async openMediaDbSelectModal ( resultsToDisplay : MediaTypeModel [ ] , skipButton : boolean = false ) : Promise < MediaTypeModel [ ] > {
422- return await new Promise ( ( resolve , reject ) => {
423- new MediaDbSearchResultModal ( this . app , this , resultsToDisplay , skipButton , ( res , err ) => {
467+ async openMediaDbSelectModal ( resultsToDisplay : MediaTypeModel [ ] , skipButton : boolean = false ) : Promise < { selectRes : MediaTypeModel [ ] , selectModal : MediaDbSearchResultModal } > {
468+ const modal = new MediaDbSearchResultModal ( this , resultsToDisplay , skipButton ) ;
469+ const res : MediaTypeModel [ ] = await new Promise ( ( resolve , reject ) => {
470+ modal . setSubmitCallback ( res => resolve ( res ) ) ;
471+ modal . setSkipCallback ( ( ) => resolve ( [ ] ) ) ;
472+ modal . setCloseCallback ( err => {
424473 if ( err ) {
425- return reject ( err ) ;
474+ reject ( err ) ;
426475 }
427- resolve ( res ) ;
428- } , ( ) => {
429- resolve ( [ ] ) ;
430- } ) . open ( ) ;
476+ resolve ( undefined ) ;
477+ } ) ;
478+
479+ modal . open ( ) ;
431480 } ) ;
481+ return { selectRes : res , selectModal : modal } ;
432482 }
433483
434484 async loadSettings ( ) {
0 commit comments