public DictionaryViewModel(WordlistReader wordlistReader) : this() { WordlistReader = wordlistReader; OriginLanguageCode = wordlistReader.OriginLanguageCode; DestinationLanguageCode = wordlistReader.DestinationLanguageCode; CreationDate = wordlistReader.CreationDate; NumberOfEntries = 0; Status = DictionaryStatus.Queued; UpdateStatusText(); }
private async Task <bool> CheckForConflictingDictionary(WordlistReader wordlistReader) { DictionaryViewModel conflictingDictionary = Dictionaries.FirstOrDefault(dict => (dict.OriginLanguageCode == wordlistReader.OriginLanguageCode && dict.DestinationLanguageCode == wordlistReader.DestinationLanguageCode) || (dict.OriginLanguageCode == wordlistReader.DestinationLanguageCode && dict.DestinationLanguageCode == wordlistReader.OriginLanguageCode)); if (conflictingDictionary == null) { return(true); } DateTimeFormatter dateTimeFormatter = new DateTimeFormatter("shortdate shorttime"); string content = resourceLoader.GetString("Import_Conflict_Body1"); content += "\r\n\r\n"; content += string.Format(resourceLoader.GetString("Import_Conflict_Body2"), conflictingDictionary.OriginLanguage, conflictingDictionary.DestinationLanguage, dateTimeFormatter.Format(conflictingDictionary.CreationDate)); content += "\r\n"; content += string.Format(resourceLoader.GetString("Import_Conflict_Body3"), conflictingDictionary.OriginLanguage, conflictingDictionary.DestinationLanguage, dateTimeFormatter.Format(wordlistReader.CreationDate)); ContentDialog contentDialog = new ContentDialog() { Title = resourceLoader.GetString("Import_Conflict_Title"), Content = content, PrimaryButtonText = resourceLoader.GetString("Import_Conflict_Replace"), CloseButtonText = resourceLoader.GetString("Import_Conflict_Skip"), DefaultButton = ContentDialogButton.Primary, XamlRoot = MainWindow.Instance.Content.XamlRoot }; bool replace = await contentDialog.ShowAsync() == ContentDialogResult.Primary; if (replace) { bool removedSuccessfully = await RemoveDictionary(conflictingDictionary); // as long as another import is still in process, we cannot replace a dictionary if (!removedSuccessfully) { return(false); } } return(replace); }
private async void RunImportDictionaryCommand() { FileOpenPicker fileOpenPicker = new FileOpenPicker(); fileOpenPicker.FileTypeFilter.Add(".txt"); fileOpenPicker.FileTypeFilter.Add(".zip"); IntPtr hwnd = WinRT.Interop.WindowNative.GetWindowHandle(MainWindow.Instance); WinRT.Interop.InitializeWithWindow.Initialize(fileOpenPicker, hwnd); IReadOnlyList <StorageFile> wordlistFiles = await fileOpenPicker.PickMultipleFilesAsync(); if (wordlistFiles == null) { return; } foreach (StorageFile wordlistFile in wordlistFiles) { WordlistReader wordlistReader = new WordlistReader(wordlistFile); try { await wordlistReader.ReadHeader(); } catch { wordlistReader.Dispose(); ContentDialog contentDialog = new ContentDialog() { Title = resourceLoader.GetString("Import_Header_Error_Title"), Content = string.Format(resourceLoader.GetString("Import_Header_Error_Body"), wordlistFile.Name), CloseButtonText = "OK", XamlRoot = MainWindow.Instance.Content.XamlRoot }; await contentDialog.ShowAsync(); continue; } bool allConflictsResolved = await CheckForConflictingDictionary(wordlistReader); if (allConflictsResolved) { DictionaryViewModel dictionaryViewModel = new DictionaryViewModel(wordlistReader); Dictionaries.Add(dictionaryViewModel); } else { wordlistReader.Dispose(); } } if (!IsImportInProgress) { cancellationTokenSource = new CancellationTokenSource(); importQueueProcessTask = ProcessImportQueue(); } }