public async Task StopRecording() { Status.LocalizationKey = nameof(LanguageManager.Stopped); RecentItemViewModel savingRecentItem = null; // Assume saving to file only when extension is present if (!string.IsNullOrWhiteSpace(VideoViewModel.SelectedVideoWriter.Extension)) { savingRecentItem = RecentViewModel.Add(_currentFileName, _isVideo ? RecentItemType.Video : RecentItemType.Audio, true); } // Reference Recorder as it will be set to null var rec = _recorder; var task = Task.Run(() => rec.Dispose()); lock (_stopRecTaskLock) { _stopRecTasks.Add(task); } AfterRecording(); try { // Ensure saved await task; lock (_stopRecTaskLock) { _stopRecTasks.Remove(task); } } catch (Exception e) { ServiceProvider.MessageProvider.ShowException(e, "Error occurred when stopping recording.\nThis might sometimes occur if you stop recording just as soon as you start it."); return; } if (savingRecentItem != null) { // After Save savingRecentItem.Saved(); if (Settings.CopyOutPathToClipboard) { savingRecentItem.FilePath.WriteToClipboard(); } _systemTray.ShowTextNotification((savingRecentItem.ItemType == RecentItemType.Video ? Loc.VideoSaved : Loc.AudioSaved) + ": " + Path.GetFileName(savingRecentItem.FilePath), () => { ServiceProvider.LaunchFile(new ProcessStartInfo(savingRecentItem.FilePath)); }); } }
public RecentItemViewModel Add(string FilePath, RecentItemType ItemType, bool IsSaving) { var item = new RecentItemViewModel(FilePath, ItemType, IsSaving); // Insert on Top _recentList.Insert(0, item); item.OnRemove += () => _recentList.Remove(item); return(item); }