public async Task <bool> RemoveDictionary(DictionaryViewModel dictionaryViewModel) { if (dictionaryViewModel.Status != DictionaryStatus.Installed) { return(false); } if (IsImportInProgress) { ContentDialog contentDialog = new ContentDialog() { Title = resourceLoader.GetString("Import_In_Progress_Title"), Content = resourceLoader.GetString("Import_In_Progress_Body"), CloseButtonText = "OK", XamlRoot = MainWindow.Instance.Content.XamlRoot }; await contentDialog.ShowAsync(); return(false); } await DatabaseManager.Instance.DeleteDictionary(dictionaryViewModel.Dictionary); Dictionaries.Remove(dictionaryViewModel); DictionariesChanged?.Invoke(this, EventArgs.Empty); return(true); }
private async Task ProcessImportQueue() { while (true) { DictionaryViewModel dictionaryViewModel = Dictionaries.FirstOrDefault(dict => dict.Status == DictionaryStatus.Queued); if (dictionaryViewModel == null) { break; } dictionaryViewModel.Status = DictionaryStatus.Installing; try { await DatabaseManager.Instance.ImportWordlist(dictionaryViewModel, cancellationTokenSource.Token); await DatabaseManager.Instance.OptimizeTable(dictionaryViewModel.Dictionary); } catch (OperationCanceledException) { Dictionaries.Remove(dictionaryViewModel); cancellationTokenSource = new CancellationTokenSource(); continue; } catch { ContentDialog contentDialog = new ContentDialog() { Title = resourceLoader.GetString("Import_Error_Title"), Content = string.Format(resourceLoader.GetString("Import_Error_Body"), dictionaryViewModel.OriginLanguage, dictionaryViewModel.DestinationLanguage), CloseButtonText = "OK", XamlRoot = MainWindow.Instance.Content.XamlRoot }; await contentDialog.ShowAsync(); Dictionaries.Remove(dictionaryViewModel); continue; } finally { dictionaryViewModel.WordlistReader.Dispose(); dictionaryViewModel.WordlistReader = null; } dictionaryViewModel.Status = DictionaryStatus.Installed; DictionariesChanged?.Invoke(this, EventArgs.Empty); } }