@@ -326,11 +326,10 @@ export class DatabaseUI extends DisposableObject {
326
326
}
327
327
328
328
private async chooseDatabaseFolder (
329
- subFolder : boolean ,
330
329
progress : ProgressCallback ,
331
330
) : Promise < void > {
332
331
try {
333
- await this . chooseAndSetDatabase ( true , subFolder , progress ) ;
332
+ await this . chooseAndSetDatabase ( true , progress ) ;
334
333
} catch ( e ) {
335
334
void showAndLogExceptionWithTelemetry (
336
335
this . app . logger ,
@@ -345,7 +344,7 @@ export class DatabaseUI extends DisposableObject {
345
344
private async handleChooseDatabaseFolder ( ) : Promise < void > {
346
345
return withProgress (
347
346
async ( progress ) => {
348
- await this . chooseDatabaseFolder ( false , progress ) ;
347
+ await this . chooseDatabaseFolder ( progress ) ;
349
348
} ,
350
349
{
351
350
title : "Adding database from folder" ,
@@ -356,7 +355,7 @@ export class DatabaseUI extends DisposableObject {
356
355
private async handleChooseDatabaseFolderFromPalette ( ) : Promise < void > {
357
356
return withProgress (
358
357
async ( progress ) => {
359
- await this . chooseDatabaseFolder ( false , progress ) ;
358
+ await this . chooseDatabaseFolder ( progress ) ;
360
359
} ,
361
360
{
362
361
title : "Choose a Database from a Folder" ,
@@ -367,7 +366,7 @@ export class DatabaseUI extends DisposableObject {
367
366
private async handleChooseMultipleDatabaseFolderFromPalette ( ) : Promise < void > {
368
367
return withProgress (
369
368
async ( progress ) => {
370
- await this . chooseDatabaseFolder ( true , progress ) ;
369
+ await this . chooseDatabasesParentFolder ( progress ) ;
371
370
} ,
372
371
{
373
372
title : "Choose a Folder contains all Database Folders" ,
@@ -510,7 +509,7 @@ export class DatabaseUI extends DisposableObject {
510
509
progress : ProgressCallback ,
511
510
) : Promise < void > {
512
511
try {
513
- await this . chooseAndSetDatabase ( false , false , progress ) ;
512
+ await this . chooseAndSetDatabase ( false , progress ) ;
514
513
} catch ( e : unknown ) {
515
514
void showAndLogExceptionWithTelemetry (
516
515
this . app . logger ,
@@ -978,68 +977,79 @@ export class DatabaseUI extends DisposableObject {
978
977
*/
979
978
private async chooseAndSetDatabase (
980
979
byFolder : boolean ,
981
- subFolder : boolean ,
982
980
progress : ProgressCallback ,
983
981
) : Promise < DatabaseItem [ ] | DatabaseItem | undefined > {
984
982
const uri = await chooseDatabaseDir ( byFolder ) ;
985
983
if ( ! uri ) {
986
984
return undefined ;
987
985
}
988
986
989
- if ( subFolder ) {
990
- if ( ! byFolder ) {
991
- return undefined ;
992
- }
987
+ if ( byFolder && ! uri . fsPath . endsWith ( "testproj" ) ) {
988
+ const fixedUri = await this . fixDbUri ( uri ) ;
989
+ // we are selecting a database folder
990
+ return await this . databaseManager . openDatabase ( fixedUri , {
991
+ type : "folder" ,
992
+ } ) ;
993
+ } else {
994
+ // we are selecting a database archive or a testproj.
995
+ // Unzip archives (if an archive) and copy into a workspace-controlled area
996
+ // before importing.
997
+ return await this . databaseFetcher . importLocalDatabase (
998
+ uri . toString ( true ) ,
999
+ progress ,
1000
+ ) ;
1001
+ }
1002
+ }
993
1003
994
- const databases : DatabaseItem [ ] = [ ] ;
995
- const failures : string [ ] = [ ] ;
996
- const entries = await workspace . fs . readDirectory ( uri ) ;
997
- for ( const entry of entries ) {
998
- if ( entry [ 1 ] === FileType . Directory ) {
999
- try {
1000
- const fixedUri = await this . fixDbUri ( Uri . joinPath ( uri , entry [ 0 ] ) ) ;
1001
- const database = await this . databaseManager . openDatabase ( fixedUri , {
1002
- type : "folder" ,
1003
- } ) ;
1004
- databases . push ( database ) ;
1005
- } catch ( e ) {
1006
- failures . push ( entry [ 0 ] ) ;
1007
- }
1008
- }
1009
- }
1004
+ /**
1005
+ * Ask the user for a parent directory that contains all databases.
1006
+ * Returns all valid databases, or `undefined` if the operation was canceled.
1007
+ */
1008
+ private async chooseDatabasesParentFolder (
1009
+ progress : ProgressCallback ,
1010
+ ) : Promise < DatabaseItem [ ] | undefined > {
1011
+ const uri = await chooseDatabaseDir ( true ) ;
1012
+ if ( ! uri ) {
1013
+ return undefined ;
1014
+ }
1010
1015
1011
- if ( failures . length ) {
1012
- void showAndLogErrorMessage (
1013
- this . app . logger ,
1014
- `Failed to import ${ failures . length } database(s) (${ failures . join (
1015
- ", " ,
1016
- ) } ), successfully imported ${ databases . length } database(s).`,
1017
- ) ;
1018
- } else {
1019
- void showAndLogInformationMessage (
1020
- this . app . logger ,
1021
- `Successfully imported ${ databases . length } database(s).` ,
1022
- ) ;
1016
+ const databases : DatabaseItem [ ] = [ ] ;
1017
+ const failures : string [ ] = [ ] ;
1018
+ const entries = await workspace . fs . readDirectory ( uri ) ;
1019
+ for ( const [ index , entry ] of entries . entries ( ) ) {
1020
+ progress ( {
1021
+ step : index + 1 ,
1022
+ maxStep : entries . length ,
1023
+ message : `Importing ${ entry [ 0 ] } ` ,
1024
+ } ) ;
1025
+
1026
+ if ( entry [ 1 ] === FileType . Directory ) {
1027
+ try {
1028
+ const fixedUri = await this . fixDbUri ( Uri . joinPath ( uri , entry [ 0 ] ) ) ;
1029
+ const database = await this . databaseManager . openDatabase ( fixedUri , {
1030
+ type : "folder" ,
1031
+ } ) ;
1032
+ databases . push ( database ) ;
1033
+ } catch ( e ) {
1034
+ failures . push ( entry [ 0 ] ) ;
1035
+ }
1023
1036
}
1037
+ }
1024
1038
1025
- return databases ;
1039
+ if ( failures . length ) {
1040
+ void showAndLogErrorMessage (
1041
+ this . app . logger ,
1042
+ `Failed to import ${ failures . length } database(s), successfully imported ${ databases . length } database(s).` ,
1043
+ { fullMessage : `Failed imports: \n${ failures . join ( "\n" ) } ` } ,
1044
+ ) ;
1026
1045
} else {
1027
- if ( byFolder && ! uri . fsPath . endsWith ( "testproj" ) ) {
1028
- const fixedUri = await this . fixDbUri ( uri ) ;
1029
- // we are selecting a database folder
1030
- return await this . databaseManager . openDatabase ( fixedUri , {
1031
- type : "folder" ,
1032
- } ) ;
1033
- } else {
1034
- // we are selecting a database archive or a testproj.
1035
- // Unzip archives (if an archive) and copy into a workspace-controlled area
1036
- // before importing.
1037
- return await this . databaseFetcher . importLocalDatabase (
1038
- uri . toString ( true ) ,
1039
- progress ,
1040
- ) ;
1041
- }
1046
+ void showAndLogInformationMessage (
1047
+ this . app . logger ,
1048
+ `Successfully imported ${ databases . length } database(s).` ,
1049
+ ) ;
1042
1050
}
1051
+
1052
+ return databases ;
1043
1053
}
1044
1054
1045
1055
/**
0 commit comments