@@ -20,11 +20,12 @@ public DataLoader(ILogger<DataLoader> logger, IOptions<AppSettings> options, IDa
2020 _appSettings = options . Value ;
2121 _databaseMigrator = databaseMigrator ;
2222 }
23- public async Task LoadDataAsync ( ParseResult result )
23+ public async Task < bool > LoadDataAsync ( ParseResult result )
2424 {
2525 _logger . LogInformation ( "Loading data started" ) ;
2626 var start = DateTime . Now ;
2727 var favorites = Enumerable . Empty < int > ( ) ;
28+ var historyRecords = Enumerable . Empty < HistoryRecord > ( ) ;
2829 var success = false ;
2930 var sql = string . Empty ;
3031 var filePath = Path . Combine ( _appSettings . AppDataPath , Database . DB_FILE_NAME ) ;
@@ -34,22 +35,46 @@ public async Task LoadDataAsync(ParseResult result)
3435 // backup database
3536 File . Copy ( filePath , bakFilePath , true ) ;
3637
37- // select favorites and delete database
38- using ( var db = new Database ( ) )
38+ // select favorites, history and delete database
39+ await using ( var db = new Database ( ) )
3940 {
40- favorites = db . Stations . Where ( s => s . IsFavorite ) . Select ( s => s . Id ) . ToList ( ) ;
41- db . Database . EnsureDeleted ( ) ;
42- }
41+ try
42+ {
43+ favorites = await db . Stations . Where ( s => s . IsFavorite ) . Select ( s => s . Id ) . ToListAsync ( ) ;
44+ var migrationIds = await db . Database . SqlQueryRaw < string > ( "SELECT MigrationId FROM __EFMigrationsHistory" ) . ToListAsync ( ) ;
45+ if ( migrationIds . Any ( id => id . Contains ( "AddedHistory" ) ) )
46+ {
47+ historyRecords = await db . HistoryRecords . ToListAsync ( ) ;
48+ }
4349
44- Debug . WriteLine ( $ "Database was backuped ({ DateTime . Now - start } )") ;
50+ Debug . WriteLine ( $ "Database was backuped ({ DateTime . Now - start } )") ;
51+ }
52+ catch ( Exception ex )
53+ {
54+ Debug . WriteLine ( ex . Message ) ;
55+ _logger . LogError ( ex , "Failed to backup database" ) ;
56+ if ( ex . InnerException != null )
57+ {
58+ Debug . WriteLine ( ex . InnerException ) ;
59+ _logger . LogError ( ex . InnerException , ex . InnerException . Message ) ;
60+ }
61+
62+ return false ;
63+ }
64+ finally
65+ {
66+ await db . Database . EnsureDeletedAsync ( ) ;
67+ await db . DisposeAsync ( ) ;
68+ }
69+ }
4570 }
4671
4772 _databaseMigrator . MigrateDatabase ( ) ;
4873 Debug . WriteLine ( $ "Database migrated ({ DateTime . Now - start } )") ;
4974
50- using ( var db = new Database ( ) )
75+ await using ( var db = new Database ( ) )
5176 {
52- using ( var transaction = db . Database . BeginTransaction ( ) )
77+ await using ( var transaction = await db . Database . BeginTransactionAsync ( ) )
5378 {
5479 try
5580 {
@@ -130,6 +155,13 @@ public async Task LoadDataAsync(ParseResult result)
130155 await db . SaveChangesAsync ( ) ;
131156 Debug . WriteLine ( $ "Added station subgenres ({ DateTime . Now - start } )") ;
132157
158+ if ( historyRecords . Any ( ) )
159+ {
160+ await db . HistoryRecords . AddRangeAsync ( historyRecords ) ;
161+ await db . SaveChangesAsync ( ) ;
162+ Debug . WriteLine ( $ "Restored history records ({ DateTime . Now - start } )") ;
163+ }
164+
133165 await transaction . CommitAsync ( ) ;
134166 success = true ;
135167 _logger . LogInformation ( "Loading data completed" ) ;
@@ -152,5 +184,7 @@ public async Task LoadDataAsync(ParseResult result)
152184 {
153185 File . Copy ( bakFilePath , filePath , true ) ;
154186 }
187+
188+ return success ;
155189 }
156190}
0 commit comments