Skip to content

Commit 1caad28

Browse files
committed
refactored to support, but did not implement, centralized error state notification #471
1 parent be3b6a3 commit 1caad28

File tree

8 files changed

+130
-44
lines changed

8 files changed

+130
-44
lines changed

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@
290290
<DependentUpon>AddMarkerForm.cs</DependentUpon>
291291
</Compile>
292292
<Compile Include="UI\Settings\IAddTodoSettingsView.cs" />
293+
<Compile Include="UI\SourceControl\ActionFailedEventArgs.cs" />
293294
<Compile Include="UI\SourceControl\App.cs" />
294295
<Compile Include="Properties\Annotations.cs" />
295296
<Compile Include="Properties\Resources.Designer.cs">
@@ -406,7 +407,7 @@
406407
<Compile Include="UI\SourceControl\ICreateBranchView.cs" />
407408
<Compile Include="UI\SourceControl\IDeleteBranchView.cs" />
408409
<Compile Include="UI\SourceControl\IMergeView.cs" />
409-
<Compile Include="UI\SourceControl\IProviderPresenter.cs" />
410+
<Compile Include="UI\SourceControl\ProviderPresenter.cs" />
410411
<Compile Include="UI\SourceControl\IRefreshableView.cs" />
411412
<Compile Include="UI\SourceControl\ISettingsView.cs" />
412413
<Compile Include="UI\SourceControl\ISourceControlView.cs" />
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using Rubberduck.SourceControl;
3+
4+
namespace Rubberduck.UI.SourceControl
5+
{
6+
public class ActionFailedEventArgs : EventArgs
7+
{
8+
private readonly string _message;
9+
public string Message { get { return _message; } }
10+
11+
private readonly string _title;
12+
public string Title { get { return _title; } }
13+
14+
public ActionFailedEventArgs(string title, string message)
15+
{
16+
_title = title;
17+
_message = message;
18+
}
19+
20+
public ActionFailedEventArgs(SourceControlException ex)
21+
: this(ex.Message, ex.InnerException.Message) { }
22+
}
23+
}

RetailCoder.VBE/UI/SourceControl/BranchesPresenter.cs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ public interface IBranchesPresenter : IProviderPresenter, IRefreshable
1111
event EventHandler<EventArgs> BranchChanged;
1212
}
1313

14-
public class BranchesPresenter : IBranchesPresenter
14+
public class BranchesPresenter : ProviderPresenterBase, IBranchesPresenter
1515
{
1616
private readonly IBranchesView _view;
1717
private readonly ICreateBranchView _createView;
1818
private readonly IDeleteBranchView _deleteView;
1919
private readonly IMergeView _mergeView;
2020

21-
public ISourceControlProvider Provider { get; set; }
22-
2321
public event EventHandler<EventArgs> BranchChanged;
2422

2523
public BranchesPresenter
@@ -77,7 +75,10 @@ private void OnSelectedBranchChanged(object sender, EventArgs e)
7775
catch (SourceControlException ex)
7876
{
7977
//todo: find a better way of displaying these errors
78+
//todo: remove messagebox
8079
MessageBox.Show(ex.InnerException.Message, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
80+
81+
RaiseActionFailedEvent(ex);
8182
}
8283

8384
if (BranchChanged != null)
@@ -145,7 +146,16 @@ private void OnDeleteViewSelectionChanged(object sender, BranchDeleteArgs e)
145146
private void OnDeleteBranch(object sender, BranchDeleteArgs e)
146147
{
147148
_deleteView.Hide();
148-
Provider.DeleteBranch(e.BranchName);
149+
150+
try
151+
{
152+
Provider.DeleteBranch(e.BranchName);
153+
}
154+
catch (SourceControlException ex)
155+
{
156+
RaiseActionFailedEvent(ex);
157+
}
158+
149159
RefreshView();
150160
}
151161

@@ -164,7 +174,16 @@ private void OnShowCreateBranchView(object sender, EventArgs e)
164174
private void OnCreateBranch(object sender, BranchCreateArgs e)
165175
{
166176
HideCreateBranchView();
167-
this.Provider.CreateBranch(e.BranchName);
177+
178+
try
179+
{
180+
this.Provider.CreateBranch(e.BranchName);
181+
}
182+
catch (SourceControlException ex)
183+
{
184+
RaiseActionFailedEvent(ex);
185+
}
186+
168187
RefreshView();
169188
}
170189

@@ -211,6 +230,7 @@ private void OnMerge(object sender, EventArgs e)
211230
{
212231
_mergeView.Status = MergeStatus.Failure;
213232
_mergeView.StatusText = ex.Message + ": " + ex.InnerException.Message;
233+
//todo: raise action failed event?
214234
}
215235
}
216236

RetailCoder.VBE/UI/SourceControl/ChangesPresenter.cs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ public interface IChangesPresenter : IProviderPresenter, IRefreshable
1010
void Commit();
1111
}
1212

13-
public class ChangesPresenter : IChangesPresenter
13+
public class ChangesPresenter : ProviderPresenterBase, IChangesPresenter
1414
{
1515
private readonly IChangesView _view;
1616

17-
public ISourceControlProvider Provider { get; set; }
18-
1917
public ChangesPresenter(IChangesView view)
2018
{
2119
_view = view;
@@ -66,18 +64,25 @@ public void Commit()
6664
return;
6765
}
6866

69-
this.Provider.Stage(changes);
70-
this.Provider.Commit(_view.CommitMessage);
71-
72-
if (_view.CommitAction == CommitAction.CommitAndSync)
67+
try
7368
{
74-
this.Provider.Pull();
75-
this.Provider.Push();
69+
this.Provider.Stage(changes);
70+
this.Provider.Commit(_view.CommitMessage);
71+
72+
if (_view.CommitAction == CommitAction.CommitAndSync)
73+
{
74+
this.Provider.Pull();
75+
this.Provider.Push();
76+
}
77+
78+
if (_view.CommitAction == CommitAction.CommitAndPush)
79+
{
80+
this.Provider.Push();
81+
}
7682
}
77-
78-
if (_view.CommitAction == CommitAction.CommitAndPush)
83+
catch(SourceControlException ex)
7984
{
80-
this.Provider.Push();
85+
RaiseActionFailedEvent(ex);
8186
}
8287
}
8388

RetailCoder.VBE/UI/SourceControl/IProviderPresenter.cs

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using Rubberduck.SourceControl;
3+
4+
namespace Rubberduck.UI.SourceControl
5+
{
6+
public interface IProviderPresenter
7+
{
8+
ISourceControlProvider Provider { get; set; }
9+
event EventHandler<ActionFailedEventArgs> ActionFailed;
10+
}
11+
12+
public abstract class ProviderPresenterBase : IProviderPresenter
13+
{
14+
public virtual ISourceControlProvider Provider { get; set; }
15+
16+
public event EventHandler<ActionFailedEventArgs> ActionFailed;
17+
protected virtual void RaiseActionFailedEvent(SourceControlException ex)
18+
{
19+
var handler = ActionFailed;
20+
if (handler != null)
21+
{
22+
handler(this, new ActionFailedEventArgs(ex));
23+
}
24+
}
25+
}
26+
}

RetailCoder.VBE/UI/SourceControl/SettingsPresenter.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,17 @@
77

88
namespace Rubberduck.UI.SourceControl
99
{
10-
public interface ISettingsPresenter : IProviderPresenter
10+
public interface ISettingsPresenter : IProviderPresenter, IRefreshable
1111
{
12-
void RefreshView();
1312
}
1413

15-
public class SettingsPresenter : ISettingsPresenter
14+
public class SettingsPresenter : ProviderPresenterBase, ISettingsPresenter
1615
{
1716
private readonly ISettingsView _view;
1817
private readonly IConfigurationService<SourceControlConfiguration> _configurationService;
1918
private readonly IFolderBrowserFactory _folderBrowserFactory;
2019
private SourceControlConfiguration _config;
2120

22-
public ISourceControlProvider Provider { get; set; }
23-
2421
public SettingsPresenter(ISettingsView view, IConfigurationService<SourceControlConfiguration> configService, IFolderBrowserFactory folderBrowserFactory)
2522
{
2623
_configurationService = configService;

RetailCoder.VBE/UI/SourceControl/UnsyncedCommitsPresenter.cs

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using System.Threading.Tasks;
62
using Rubberduck.SourceControl;
73

84
namespace Rubberduck.UI.SourceControl
@@ -11,12 +7,10 @@ public interface IUnsyncedCommitsPresenter : IProviderPresenter, IRefreshable
117
{
128
}
139

14-
public class UnsyncedCommitsPresenter : IUnsyncedCommitsPresenter
10+
public class UnsyncedCommitsPresenter : ProviderPresenterBase, IUnsyncedCommitsPresenter
1511
{
1612
private readonly IUnsyncedCommitsView _view;
1713

18-
public ISourceControlProvider Provider { get; set; }
19-
2014
public UnsyncedCommitsPresenter(IUnsyncedCommitsView view)
2115
{
2216
_view = view;
@@ -29,24 +23,53 @@ public UnsyncedCommitsPresenter(IUnsyncedCommitsView view)
2923

3024
void OnPush(object sender, EventArgs e)
3125
{
32-
Provider.Push();
26+
try
27+
{
28+
Provider.Push();
29+
}
30+
catch (SourceControlException ex)
31+
{
32+
RaiseActionFailedEvent(ex);
33+
}
3334
}
3435

3536
void OnPull(object sender, EventArgs e)
3637
{
37-
Provider.Pull();
38+
try
39+
{
40+
Provider.Pull();
41+
}
42+
catch (SourceControlException ex)
43+
{
44+
RaiseActionFailedEvent(ex);
45+
}
3846
}
3947

4048
void OnFetch(object sender, EventArgs e)
4149
{
42-
Provider.Fetch();
50+
try
51+
{
52+
Provider.Fetch();
53+
}
54+
catch (SourceControlException ex)
55+
{
56+
RaiseActionFailedEvent(ex);
57+
}
58+
4359
_view.IncomingCommits = Provider.UnsyncedRemoteCommits;
4460
}
4561

4662
void OnSync(object sender, EventArgs e)
4763
{
48-
Provider.Pull();
49-
Provider.Push();
64+
try
65+
{
66+
Provider.Pull();
67+
Provider.Push();
68+
}
69+
catch (SourceControlException ex)
70+
{
71+
RaiseActionFailedEvent(ex);
72+
}
5073
}
5174

5275
public void RefreshView()

0 commit comments

Comments
 (0)