From 71bd0e0264d54b6d369d28f1d07df05ea689555e Mon Sep 17 00:00:00 2001 From: Jaex Date: Sat, 3 Sep 2022 17:47:08 +0300 Subject: [PATCH] Added ScreenRecordingStatus --- ShareX.ScreenCaptureLib/Enums.cs | 5 ++ .../Forms/ScreenRecordForm.cs | 67 ++++++++++++------- ShareX/ScreenRecordManager.cs | 19 +++--- 3 files changed, 58 insertions(+), 33 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Enums.cs b/ShareX.ScreenCaptureLib/Enums.cs index 01aeeccfd..afad56d89 100644 --- a/ShareX.ScreenCaptureLib/Enums.cs +++ b/ShareX.ScreenCaptureLib/Enums.cs @@ -341,4 +341,9 @@ public enum ScreenRecordState { Waiting, BeforeStart, AfterStart, AfterRecordingStart, RecordingEnd, Encoding } + + public enum ScreenRecordingStatus + { + Waiting, Countdown, Working, Recording, Paused, Stopped, Aborted + } } \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/Forms/ScreenRecordForm.cs b/ShareX.ScreenCaptureLib/Forms/ScreenRecordForm.cs index 40f3e57ec..f6303ef85 100644 --- a/ShareX.ScreenCaptureLib/Forms/ScreenRecordForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/ScreenRecordForm.cs @@ -37,15 +37,23 @@ public partial class ScreenRecordForm : Form { public event Action StopRequested; - public bool IsWorking { get; private set; } - public bool IsRecording { get; private set; } - public bool IsCountdown { get; set; } + private ScreenRecordingStatus status; + + public ScreenRecordingStatus Status + { + get + { + return status; + } + private set + { + status = value; + } + } + public TimeSpan Countdown { get; set; } public Stopwatch Timer { get; private set; } public ManualResetEvent RecordResetEvent { get; set; } - public bool IsStopRequested { get; private set; } - public bool IsPauseRequested { get; private set; } - public bool IsAbortRequested { get; private set; } public bool ActivateWindow { get; set; } = true; public float Duration { get; set; } = 0; @@ -137,7 +145,7 @@ private void ScreenRegionForm_Shown(object sender, EventArgs e) private void ScreenRecordForm_FormClosed(object sender, FormClosedEventArgs e) { - if (!IsStopRequested) + if (Status != ScreenRecordingStatus.Stopped) { AbortRecording(); } @@ -150,7 +158,7 @@ protected void OnStopRequested() public void StartCountdown(int milliseconds) { - IsCountdown = true; + Status = ScreenRecordingStatus.Countdown; Countdown = TimeSpan.FromMilliseconds(milliseconds); Timer.Start(); @@ -160,7 +168,10 @@ public void StartCountdown(int milliseconds) public void StartRecordingTimer() { - IsCountdown = Duration > 0; + if (Duration > 0) + { + Status = ScreenRecordingStatus.Countdown; + } Countdown = TimeSpan.FromSeconds(Duration); borderColor = Color.FromArgb(0, 255, 0); @@ -185,7 +196,7 @@ private void UpdateTimer() { TimeSpan timer; - if (IsCountdown) + if (Status == ScreenRecordingStatus.Countdown) { timer = Countdown - Timer.Elapsed; if (timer.Ticks < 0) timer = TimeSpan.Zero; @@ -246,23 +257,29 @@ private void btnAbort_MouseClick(object sender, MouseEventArgs e) public void StartStopRecording(bool isPause = false) { - if (IsWorking) + if (Status == ScreenRecordingStatus.Working || Status == ScreenRecordingStatus.Recording) { - IsStopRequested = true; - if (isPause) { RecordResetEvent.Reset(); - IsPauseRequested = true; + Status = ScreenRecordingStatus.Paused; } - - if (!IsRecording) + else if (Status != ScreenRecordingStatus.Recording && Status != ScreenRecordingStatus.Paused) { - IsAbortRequested = true; + Status = ScreenRecordingStatus.Aborted; + } + else + { + Status = ScreenRecordingStatus.Stopped; } OnStopRequested(); } + else if (Status == ScreenRecordingStatus.Paused && !isPause) + { + Status = ScreenRecordingStatus.Stopped; + RecordResetEvent.Set(); + } else if (RecordResetEvent != null) { RecordResetEvent.Set(); @@ -271,7 +288,7 @@ public void StartStopRecording(bool isPause = false) public void AbortRecording() { - IsAbortRequested = true; + Status = ScreenRecordingStatus.Aborted; StartStopRecording(); } @@ -295,22 +312,26 @@ public void ChangeState(ScreenRecordState state) cmsMain.Enabled = true; break; case ScreenRecordState.AfterStart: - IsWorking = true; - IsPauseRequested = false; + Status = ScreenRecordingStatus.Working; string trayTextAfterStart = "ShareX - " + Resources.ScreenRecordForm_StartRecording_Click_tray_icon_to_stop_recording_; niTray.Text = trayTextAfterStart.Truncate(63); niTray.Icon = Resources.control_record.ToIcon(); tsmiStart.Text = Resources.ScreenRecordForm_Stop; btnStart.Text = Resources.ScreenRecordForm_Stop; + // TODO: Translate + btnPause.Text = "Pause"; break; case ScreenRecordState.AfterRecordingStart: - IsRecording = true; + Status = ScreenRecordingStatus.Recording; StartRecordingTimer(); break; case ScreenRecordState.RecordingEnd: - IsWorking = false; - IsRecording = false; StopRecordingTimer(); + // TODO: Translate + if (Status == ScreenRecordingStatus.Paused) + { + btnPause.Text = "Resume"; + } break; case ScreenRecordState.Encoding: Hide(); diff --git a/ShareX/ScreenRecordManager.cs b/ShareX/ScreenRecordManager.cs index 626c7ac67..46bf98c93 100644 --- a/ShareX/ScreenRecordManager.cs +++ b/ShareX/ScreenRecordManager.cs @@ -213,13 +213,13 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t FileHelpers.DeleteFile(tempPath); } - do + while (recordForm.Status == ScreenRecordingStatus.Waiting || recordForm.Status == ScreenRecordingStatus.Paused) { if (!abortRequested) { recordForm.ChangeState(ScreenRecordState.BeforeStart); - if (recordForm.IsPauseRequested || !taskSettings.CaptureSettings.ScreenRecordAutoStart) + if (recordForm.Status == ScreenRecordingStatus.Paused || !taskSettings.CaptureSettings.ScreenRecordAutoStart) { recordForm.RecordResetEvent.WaitOne(); } @@ -235,18 +235,18 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t } } - if (recordForm.IsAbortRequested) + if (recordForm.Status == ScreenRecordingStatus.Aborted) { abortRequested = true; } - if (recordForm.IsPauseRequested && File.Exists(path)) + if (recordForm.Status == ScreenRecordingStatus.Waiting || recordForm.Status == ScreenRecordingStatus.Paused) { - FileHelpers.RenameFile(path, concatPath); - } + if (recordForm.Status == ScreenRecordingStatus.Paused && File.Exists(path)) + { + FileHelpers.RenameFile(path, concatPath); + } - if (!abortRequested) - { ScreenRecordingOptions options = new ScreenRecordingOptions() { IsRecording = true, @@ -269,7 +269,7 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t screenRecorder.StartRecording(); recordForm.ChangeState(ScreenRecordState.RecordingEnd); - if (recordForm.IsAbortRequested) + if (recordForm.Status == ScreenRecordingStatus.Aborted) { abortRequested = true; } @@ -286,7 +286,6 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t } } } - while (recordForm.IsPauseRequested); } catch (Exception e) {