/// <summary> /// Display the eventual database download errors or switch to the database selection view /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void DatabaseDownloadEndedHandler(object sender, DatabaseDownloadEndedEventArgs args) { syncService.DatabaseDownloadEnded -= DatabaseDownloadEndedHandler; SyncInProgress = false; Error = args.Error; if (args.Result) { Application.Current.Dispatcher.Invoke(() => OpenDatabaseSelectionView(databasePath)); } }
/// <summary> /// Database download ended event handler, move to the next phase if it was a success /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void DatabaseDownloadEndedHandler(object sender, DatabaseDownloadEndedEventArgs args) { syncService.DatabaseDownloadEnded -= DatabaseDownloadEndedHandler; Error = args.Error; if (!args.Result) { SyncInProgress = false; DownloadSyncStepState = SyncStepStates.Failed; return; } var incomingDatabase = databaseRepository.GetDatabase(args.Path); if (incomingDatabase is null) { Error = "CorruptedSyncDatabase"; SyncInProgress = false; DownloadSyncStepState = SyncStepStates.Failed; return; } DownloadSyncStepState = SyncStepStates.Done; if (databaseRepository.GetDatabase().SyncData.LastSync == DateTime.MinValue || incomingDatabase.SyncData.LastSync > databaseRepository.GetDatabase().SyncData.LastSync) { syncService.DatabasesMerged += DatabasesMergedHandler; syncService.MergeDatabases(databaseRepository.GetDatabase(), incomingDatabase); MergeSyncStepState = SyncStepStates.InProgress; } else if (databaseRepository.GetDatabase().SyncData.LastSync != incomingDatabase.SyncData.LastSync) { // Just upload because only local changes syncService.DatabaseUploadEnded += DatabaseUploadEndedHandler; syncService.UploadDatabase(Username, Password, settingsService.GetDatabasePath()); MergeSyncStepState = SyncStepStates.Skipped; UploadSyncStepState = SyncStepStates.InProgress; } else { Error = "DatabaseAlreadyUpToDate"; SyncInProgress = false; MergeSyncStepState = SyncStepStates.Skipped; UploadSyncStepState = SyncStepStates.Skipped; } File.Delete(args.Path); }