private async Task Translate() { if (_vm == null) { return; } if (string.IsNullOrWhiteSpace(_vm.Text)) { return; } try { _cts?.Cancel(); _cts = new CancellationTokenSource(); ITranslator translator = new GoogleTranslator(); var sequence = new TranslationSequence(_vm.Text); _vm.IsLoading = true; SavedTranslationSequence saved = await ReadCache(sequence); TranslationSequence result; if (saved == null) { result = await translator.TranslateAsync(sequence, _vm.Language, _cts.Token); saved = new SavedTranslationSequence { SourceTranslationSequence = sequence, TranslationSequence = result, Language = _vm.Language }; } else { result = saved.TranslationSequence; } _vm.Result = result.Sequence; _vm.Suggestions = await GetSuggestions(result); saved.LastTimeUsed = DateTime.Now; _jsonParser.Cache.Add(saved); } catch (TranslationFailedException) { } _vm.IsLoading = false; }
private async void OnLoaded(object sender, RoutedEventArgs e) { SavedTranslationSequence last = _jsonParser.Cache.LastOrDefault(); _vm.Text = last?.SourceTranslationSequence.Sequence; TranslationSequence lastTranslationSequence = last?.TranslationSequence; _vm.Result = lastTranslationSequence?.Sequence; _vm.Suggestions = await GetSuggestions(lastTranslationSequence); _vm.Language = last?.Language ?? TranslateLanguages.Afrikaans; await Task.Run(() => _jsonParser.Cache.RemoveAll(saved => { TimeSpan timeSpan = DateTime.Now - saved.LastTimeUsed; return(timeSpan.Days >= 7); })); }
private Task <SavedTranslationSequence> ReadCache(TranslationSequence sequence) { SavedTranslationSequence Enumerate() { SavedTranslationSequence savedSequence = null; Parallel.ForEach(_jsonParser.Cache, (saved, state) => { if (saved.SourceTranslationSequence.Sequence != sequence.Sequence || saved.Language != _vm.Language) { return; } saved.LastTimeUsed = DateTime.Now; savedSequence = saved; state.Stop(); }); return(savedSequence); } return(Task.Run((Func <SavedTranslationSequence>)Enumerate)); }