Skip to content

Commit b6adbc0

Browse files
Add error handling to recording and audio capture
Co-authored-by: toniolo.luca <toniolo.luca@outlook.com>
1 parent 9b91f20 commit b6adbc0

3 files changed

Lines changed: 77 additions & 20 deletions

File tree

src/Captura.Loc/LanguageFields.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ void Set(string Value, [CallerMemberName] string PropertyName = null)
2727
RaisePropertyChanged(PropertyName);
2828
}
2929

30+
/// <summary>
31+
/// Fired when the language changes. This event is invoked by derived classes (e.g., LanguageManager).
32+
/// </summary>
33+
#pragma warning disable CS0067 // The event is never used - invoked by derived classes
3034
public virtual event Action<CultureInfo> LanguageChanged;
35+
#pragma warning restore CS0067
3136

3237
public string About
3338
{

src/Captura.MouseKeyHook/Steps/StepsRecorder.cs

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Reactive;
33
using System.Reactive.Linq;
44
using System.Reactive.Subjects;
@@ -167,23 +167,52 @@ public StepsRecorder(IMouseKeyHook Hook,
167167

168168
void DoRecord(IObservable<IRecordStep> StepsObservable, IObservable<Unit> ShotObservable)
169169
{
170-
var frames = ShotObservable.Select(M => _imageProvider.Capture())
171-
.Zip(StepsObservable, (Frame, Step) =>
172-
{
173-
Step.Draw(Frame, _imageProvider.PointTransform);
170+
try
171+
{
172+
var frames = ShotObservable.Select(M => _imageProvider.Capture())
173+
.Zip(StepsObservable, (Frame, Step) =>
174+
{
175+
Step.Draw(Frame, _imageProvider.PointTransform);
174176

175-
return Frame.GenerateFrame(TimeSpan.Zero);
176-
});
177+
return Frame.GenerateFrame(TimeSpan.Zero);
178+
});
177179

178-
foreach (var frame in frames.ToEnumerable())
180+
foreach (var frame in frames.ToEnumerable())
181+
{
182+
_videoWriter.WriteFrame(frame);
183+
}
184+
}
185+
catch (Exception e)
179186
{
180-
_videoWriter.WriteFrame(frame);
187+
ErrorOccurred?.Invoke(e);
181188
}
182189
}
183190

184-
public void Start() => _recording = true;
191+
public void Start()
192+
{
193+
try
194+
{
195+
_recording = true;
196+
}
197+
catch (Exception e)
198+
{
199+
ErrorOccurred?.Invoke(e);
200+
throw;
201+
}
202+
}
185203

186-
public void Stop() => _recording = false;
204+
public void Stop()
205+
{
206+
try
207+
{
208+
_recording = false;
209+
}
210+
catch (Exception e)
211+
{
212+
ErrorOccurred?.Invoke(e);
213+
throw;
214+
}
215+
}
187216

188217
public event Action<Exception> ErrorOccurred;
189218

src/Screna/AudioRecorder.cs

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Threading;
33
using System.Threading.Tasks;
44

@@ -54,16 +54,32 @@ public void Dispose()
5454

5555
public void Start()
5656
{
57-
_audioProvider.Start();
57+
try
58+
{
59+
_audioProvider.Start();
5860

59-
_continueEvent.Set();
61+
_continueEvent.Set();
62+
}
63+
catch (Exception e)
64+
{
65+
ErrorOccurred?.Invoke(e);
66+
throw;
67+
}
6068
}
6169

6270
public void Stop()
6371
{
64-
_continueEvent.Reset();
72+
try
73+
{
74+
_continueEvent.Reset();
6575

66-
_audioProvider.Stop();
76+
_audioProvider.Stop();
77+
}
78+
catch (Exception e)
79+
{
80+
ErrorOccurred?.Invoke(e);
81+
throw;
82+
}
6783
}
6884

6985
void Loop()
@@ -80,13 +96,20 @@ bool CanContinue()
8096
}
8197
}
8298

83-
while (CanContinue())
99+
try
84100
{
85-
var read = _audioProvider.Read(_buffer, 0, _buffer.Length);
101+
while (CanContinue())
102+
{
103+
var read = _audioProvider.Read(_buffer, 0, _buffer.Length);
86104

87-
_audioWriter.Write(_buffer, 0, read);
105+
_audioWriter.Write(_buffer, 0, read);
88106

89-
Thread.Sleep(ReadInterval);
107+
Thread.Sleep(ReadInterval);
108+
}
109+
}
110+
catch (Exception e)
111+
{
112+
ErrorOccurred?.Invoke(e);
90113
}
91114
}
92115

0 commit comments

Comments
 (0)