@@ -2,7 +2,7 @@ import {Notice, Plugin, TFile, TFolder} from 'obsidian';
22import { DEFAULT_SETTINGS , 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 { dateTimeToString , markdownTable , replaceIllegalFileNameCharactersInString , UserCancelError , UserSkipError } from './utils/Utils' ;
66import { OMDbAPI } from './api/apis/OMDbAPI' ;
77import { MediaDbAdvancedSearchModal } from './modals/MediaDbAdvancedSearchModal' ;
88import { MediaDbSearchResultModal } from './modals/MediaDbSearchResultModal' ;
@@ -177,10 +177,11 @@ export default class MediaDbPlugin extends Plugin {
177177
178178 async createEntriesFromFolder ( folder : TFolder ) {
179179 const erroredFiles : { filePath : string , error : string } [ ] = [ ] ;
180+ let canceled : boolean = false ;
180181
181- const { selectedAPI, titleFieldName} = await new Promise ( ( resolve , reject ) => {
182- new MediaDbFolderImportModal ( this . app , this , ( ( selectedAPI , titleFieldName ) => {
183- resolve ( { selectedAPI, titleFieldName} ) ;
182+ const { selectedAPI, titleFieldName, appendContent } = await new Promise ( ( resolve , reject ) => {
183+ new MediaDbFolderImportModal ( this . app , this , ( ( selectedAPI , titleFieldName , appendContent ) => {
184+ resolve ( { selectedAPI, titleFieldName, appendContent } ) ;
184185 } ) ) . open ( ) ;
185186 } ) ;
186187
@@ -193,6 +194,11 @@ export default class MediaDbPlugin extends Plugin {
193194 for ( const child of folder . children ) {
194195 if ( child instanceof TFile ) {
195196 const file = child as TFile ;
197+ if ( canceled ) {
198+ erroredFiles . push ( { filePath : file . path , error : 'user canceled' } ) ;
199+ continue ;
200+ }
201+
196202 let metadata : any = this . app . metadataCache . getFileCache ( file ) . frontmatter ;
197203
198204 let title = metadata [ titleFieldName ] ;
@@ -213,22 +219,40 @@ export default class MediaDbPlugin extends Plugin {
213219 continue ;
214220 }
215221
216- let selectedResults : MediaTypeModel [ ] = await new Promise ( ( resolve , reject ) => {
217- const searchResultModal = new MediaDbSearchResultModal ( this . app , this , results , ( err , res ) => {
218- if ( err ) {
219- return reject ( err ) ;
220- }
221- resolve ( res ) ;
222- } , ( ) => {
223- resolve ( [ ] ) ;
222+ let selectedResults : MediaTypeModel [ ] = [ ] ;
223+ try {
224+ selectedResults = await new Promise ( ( resolve , reject ) => {
225+ const searchResultModal = new MediaDbSearchResultModal ( this . app , this , results , true , ( err , res ) => {
226+ if ( err ) {
227+ return reject ( err ) ;
228+ }
229+ resolve ( res ) ;
230+ } , ( ) => {
231+ reject ( new UserCancelError ( 'user canceled' ) ) ;
232+ } , ( ) => {
233+ reject ( new UserSkipError ( 'user skipped' ) ) ;
234+ } ) ;
235+
236+ searchResultModal . title = `Results for \'${ title } \'` ;
237+ searchResultModal . open ( ) ;
224238 } ) ;
225-
226- searchResultModal . title = `Results for \'${ title } \'` ;
227- searchResultModal . open ( ) ;
228- } ) ;
239+ } catch ( e ) {
240+ if ( e instanceof UserCancelError ) {
241+ erroredFiles . push ( { filePath : file . path , error : e . message } ) ;
242+ canceled = true ;
243+ continue ;
244+ } else if ( e instanceof UserSkipError ) {
245+ erroredFiles . push ( { filePath : file . path , error : e . message } ) ;
246+ continue ;
247+ } else {
248+ erroredFiles . push ( { filePath : file . path , error : e . message } ) ;
249+ continue ;
250+ }
251+ }
229252
230253 if ( selectedResults . length === 0 ) {
231254 erroredFiles . push ( { filePath : file . path , error : `no search results selected` } ) ;
255+ continue ;
232256 }
233257
234258 await this . createMediaDbNote ( async ( ) => selectedResults ) ;
@@ -253,7 +277,7 @@ export default class MediaDbPlugin extends Plugin {
253277 if ( err ) {
254278 return reject ( err ) ;
255279 }
256- new MediaDbSearchResultModal ( this . app , this , results , ( err2 , res ) => {
280+ new MediaDbSearchResultModal ( this . app , this , results , false , ( err2 , res ) => {
257281 if ( err2 ) {
258282 return reject ( err2 ) ;
259283 }
0 commit comments