@@ -2,7 +2,7 @@ import {MarkdownView, Notice, parseYaml, Plugin, stringifyYaml, TFile, TFolder}
2
2
import { getDefaultSettings , MediaDbPluginSettings , MediaDbSettingTab } from './settings/Settings' ;
3
3
import { APIManager } from './api/APIManager' ;
4
4
import { MediaTypeModel } from './models/MediaTypeModel' ;
5
- import { dateTimeToString , markdownTable , replaceIllegalFileNameCharactersInString } from './utils/Utils' ;
5
+ import { CreateNoteOptions , dateTimeToString , markdownTable , replaceIllegalFileNameCharactersInString } from './utils/Utils' ;
6
6
import { OMDbAPI } from './api/apis/OMDbAPI' ;
7
7
import { MALAPI } from './api/apis/MALAPI' ;
8
8
import { WikipediaAPI } from './api/apis/WikipediaAPI' ;
@@ -57,7 +57,7 @@ export default class MediaDbPlugin extends Plugin {
57
57
menu . addItem ( item => {
58
58
item . setTitle ( 'Import folder as Media DB entries' )
59
59
. setIcon ( 'database' )
60
- . onClick ( ( ) => this . createEntriesFromFolder ( file as TFolder ) ) ;
60
+ . onClick ( ( ) => this . createEntriesFromFolder ( file ) ) ;
61
61
} ) ;
62
62
}
63
63
} ) ) ;
@@ -164,27 +164,44 @@ export default class MediaDbPlugin extends Plugin {
164
164
} ) ;
165
165
166
166
if ( ! apiSearchResults ) {
167
+ // TODO: add new notice saying no results found?
167
168
return ;
168
169
}
169
170
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 ;
173
173
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
+ } ) ;
176
185
}
177
186
178
187
await this . createMediaDbNotes ( selectResults ) ;
179
188
}
180
189
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 ;
185
193
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
+ } ) ;
188
205
}
189
206
190
207
await this . createMediaDbNoteFromModel ( idSearchResult , { attachTemplate : true , openNote : true } ) ;
@@ -209,11 +226,11 @@ export default class MediaDbPlugin extends Plugin {
209
226
return detailModels ;
210
227
}
211
228
212
- async createMediaDbNoteFromModel ( mediaTypeModel : MediaTypeModel , options : { attachTemplate ?: boolean , attachFile ?: TFile , openNote ?: boolean } ) : Promise < void > {
229
+ async createMediaDbNoteFromModel ( mediaTypeModel : MediaTypeModel , options : CreateNoteOptions ) : Promise < void > {
213
230
try {
214
231
console . debug ( 'MDB | creating new note' ) ;
215
232
216
- let fileContent = await this . generateMediaDbNoteContents ( mediaTypeModel , { attachTemplate : options . attachTemplate , attachFile : options . attachFile } ) ;
233
+ let fileContent = await this . generateMediaDbNoteContents ( mediaTypeModel , options ) ;
217
234
218
235
await this . createNote ( this . mediaTypeManager . getFileName ( mediaTypeModel ) , fileContent , options . openNote ) ;
219
236
} catch ( e ) {
@@ -222,15 +239,13 @@ export default class MediaDbPlugin extends Plugin {
222
239
}
223
240
}
224
241
225
- private async generateMediaDbNoteContents ( mediaTypeModel : MediaTypeModel , options : { attachTemplate ?: boolean , attachFile ?: TFile } ) {
242
+ async generateMediaDbNoteContents ( mediaTypeModel : MediaTypeModel , options : CreateNoteOptions ) {
226
243
let fileMetadata = this . modelPropertyMapper . convertObject ( mediaTypeModel . toMetaDataObject ( ) ) ;
227
244
let fileContent = '' ;
245
+ const template = options . attachTemplate ? await this . mediaTypeManager . getTemplate ( mediaTypeModel , this . app ) : '' ;
228
246
229
247
( { 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 ) ) ;
234
249
235
250
fileContent = `---\n${ this . settings . useCustomYamlStringifier ? YAMLConverter . toYaml ( fileMetadata ) : stringifyYaml ( fileMetadata ) } ---\n` + fileContent ;
236
251
return fileContent ;
0 commit comments