Skip to content

Commit 52f1073

Browse files
committed
Added notifications for feedback to users on errors or important events
Users will be notified via toast notifications now in case of errors or other improtant events. Also, improved logging in lots of areas.
1 parent a1b7b45 commit 52f1073

File tree

37 files changed

+906
-480
lines changed

37 files changed

+906
-480
lines changed

src/Pixel.Automation.AppExplorer.ViewModels/Application/ApplicationExplorerViewModel.cs

Lines changed: 52 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using Caliburn.Micro;
22
using Dawn;
3+
using Notifications.Wpf.Core;
34
using Pixel.Automation.AppExplorer.ViewModels.Contracts;
45
using Pixel.Automation.Core.Interfaces;
56
using Pixel.Automation.Core.Models;
67
using Pixel.Automation.Editor.Core;
8+
using Pixel.Automation.Editor.Core.Helpers;
79
using Pixel.Persistence.Services.Client;
810
using Serilog;
911
using System.ComponentModel;
@@ -26,6 +28,7 @@ public class ApplicationExplorerViewModel : AnchorableHost
2628
private readonly ITypeProvider typeProvider;
2729
private readonly IApplicationDataManager applicationDataManager;
2830
private readonly IWindowManager windowManager;
31+
private readonly INotificationManager notificationManager;
2932

3033
/// <summary>
3134
/// Child views that are dependent on the selected application such as control explorer and prefab explorer
@@ -90,13 +93,14 @@ public ApplicationDescriptionViewModel SelectedApplication
9093
/// <param name="typeProvider"></param>
9194
/// <param name="childView"></param>
9295
public ApplicationExplorerViewModel(IEventAggregator eventAggregator, IApplicationDataManager applicationDataManager,
93-
ITypeProvider typeProvider, IEnumerable<IApplicationAware> childView, IWindowManager windowManager)
96+
ITypeProvider typeProvider, IEnumerable<IApplicationAware> childView, IWindowManager windowManager, INotificationManager notificationManager)
9497
{
9598
this.DisplayName = "Application Repository";
96-
this.eventAggregator = Guard.Argument(eventAggregator).NotNull().Value; ;
97-
this.typeProvider = Guard.Argument(typeProvider).NotNull().Value; ;
98-
this.applicationDataManager = Guard.Argument(applicationDataManager).NotNull().Value;
99-
this.windowManager = Guard.Argument(windowManager).NotNull().Value;
99+
this.eventAggregator = Guard.Argument(eventAggregator, nameof(eventAggregator)).NotNull().Value; ;
100+
this.typeProvider = Guard.Argument(typeProvider, nameof(typeProvider)).NotNull().Value; ;
101+
this.applicationDataManager = Guard.Argument(applicationDataManager, nameof(applicationDataManager)).NotNull().Value;
102+
this.windowManager = Guard.Argument(windowManager, nameof(windowManager)).NotNull().Value;
103+
this.notificationManager = Guard.Argument(notificationManager, nameof(notificationManager)).NotNull().Value;
100104
this.ChildViews.AddRange(childView);
101105
this.SelectedView = this.ChildViews[0];
102106

@@ -155,7 +159,7 @@ private void CreateCollectionView()
155159

156160
public void OpenApplication(ApplicationDescriptionViewModel applicationDescriptionViewModel)
157161
{
158-
Guard.Argument(applicationDescriptionViewModel).NotNull();
162+
Guard.Argument(applicationDescriptionViewModel, nameof(applicationDescriptionViewModel)).NotNull();
159163

160164
IsApplicationOpen = true;
161165
foreach (var childView in ChildViews)
@@ -186,33 +190,49 @@ public void GoBack()
186190

187191
public async Task AddApplication(KnownApplication knownApplication)
188192
{
189-
Guard.Argument(knownApplication).NotNull();
193+
try
194+
{
195+
Guard.Argument(knownApplication).NotNull();
190196

191-
IApplication application = (IApplication)Activator.CreateInstance(knownApplication.UnderlyingApplicationType);
197+
IApplication application = (IApplication)Activator.CreateInstance(knownApplication.UnderlyingApplicationType);
192198

193-
ApplicationDescription newApplication = new ApplicationDescription(application);
194-
var applicationDescriptionViewModel = new ApplicationDescriptionViewModel(newApplication);
195-
applicationDescriptionViewModel.AddScreen("Home");
196-
applicationDescriptionViewModel.ScreenCollection.SetActiveScreen("Home");
197-
if (string.IsNullOrEmpty(applicationDescriptionViewModel.ApplicationName))
199+
ApplicationDescription newApplication = new ApplicationDescription(application);
200+
var applicationDescriptionViewModel = new ApplicationDescriptionViewModel(newApplication);
201+
applicationDescriptionViewModel.AddScreen("Home");
202+
applicationDescriptionViewModel.ScreenCollection.SetActiveScreen("Home");
203+
if (string.IsNullOrEmpty(applicationDescriptionViewModel.ApplicationName))
204+
{
205+
applicationDescriptionViewModel.ApplicationName = $"{this.Applications.Count() + 1}";
206+
applicationDescriptionViewModel.ApplicationType = knownApplication.UnderlyingApplicationType.Name;
207+
}
208+
209+
this.Applications.Add(applicationDescriptionViewModel);
210+
this.SelectedApplication = applicationDescriptionViewModel;
211+
await SaveApplicationAsync(applicationDescriptionViewModel);
212+
await EditApplicationAsync(applicationDescriptionViewModel);
213+
NotifyOfPropertyChange(() => Applications);
214+
logger.Information("New application of type {0} has been added to the application repository", application.ToString());
215+
}
216+
catch (Exception ex)
198217
{
199-
applicationDescriptionViewModel.ApplicationName = $"{this.Applications.Count() + 1}";
200-
applicationDescriptionViewModel.ApplicationType = knownApplication.UnderlyingApplicationType.Name;
218+
logger.Error(ex, "There was an error while trying to add a '{0}' application", knownApplication.ToString());
219+
await notificationManager.ShowErrorNotificationAsync(ex);
201220
}
202-
203-
this.Applications.Add(applicationDescriptionViewModel);
204-
this.SelectedApplication = applicationDescriptionViewModel;
205-
await SaveApplicationAsync(applicationDescriptionViewModel);
206-
await EditApplicationAsync(applicationDescriptionViewModel);
207-
NotifyOfPropertyChange(() => Applications);
208-
logger.Information("New application of type {0} has been added to the application repository", application.ToString());
209221
}
210222

211223
public async Task EditApplicationAsync(ApplicationDescriptionViewModel applicationDescriptionViewModel)
212224
{
213225
await this.eventAggregator.PublishOnUIThreadAsync(new PropertyGridObjectEventArgs(applicationDescriptionViewModel.ApplicationDetails,
214226
async () => {
215-
await SaveApplicationAsync(applicationDescriptionViewModel);
227+
try
228+
{
229+
await SaveApplicationAsync(applicationDescriptionViewModel);
230+
}
231+
catch (Exception ex)
232+
{
233+
logger.Error(ex, "There was an error while trying to save application : '{0}' after edit", applicationDescriptionViewModel?.ApplicationName);
234+
await notificationManager.ShowErrorNotificationAsync(ex);
235+
}
216236
},
217237
() => {
218238
return true;
@@ -221,7 +241,7 @@ await this.eventAggregator.PublishOnUIThreadAsync(new PropertyGridObjectEventArg
221241

222242
public async Task SaveApplicationAsync(ApplicationDescriptionViewModel applicationDescriptionViewModel)
223243
{
224-
Guard.Argument(applicationDescriptionViewModel).NotNull();
244+
Guard.Argument(applicationDescriptionViewModel, nameof(applicationDescriptionViewModel)).NotNull();
225245
await this.applicationDataManager.AddOrUpdateApplicationAsync(applicationDescriptionViewModel.Model);
226246
logger.Information($"Saved application data for : {applicationDescriptionViewModel.ApplicationName}");
227247
await this.eventAggregator.PublishOnUIThreadAsync(new ApplicationUpdatedEventArgs(applicationDescriptionViewModel.ApplicationId));
@@ -236,9 +256,9 @@ public async Task SaveApplicationAsync(ApplicationDescriptionViewModel applicati
236256
/// <returns></returns>
237257
public async Task DeleteApplicationAsync(ApplicationDescriptionViewModel applicationDescriptionViewModel)
238258
{
239-
Guard.Argument(applicationDescriptionViewModel, nameof(applicationDescriptionViewModel)).NotNull();
240259
try
241260
{
261+
Guard.Argument(applicationDescriptionViewModel, nameof(applicationDescriptionViewModel)).NotNull();
242262
MessageBoxResult result = MessageBox.Show("Are you sure you want to delete this application?", "Confirm Delete", MessageBoxButton.OKCancel);
243263
if (result == MessageBoxResult.OK)
244264
{
@@ -248,7 +268,8 @@ public async Task DeleteApplicationAsync(ApplicationDescriptionViewModel applica
248268
}
249269
catch (Exception ex)
250270
{
251-
logger.Error(ex, ex.Message);
271+
logger.Error(ex, "There was an error while trying to delete application : '{0}'", applicationDescriptionViewModel?.ApplicationName);
272+
await notificationManager.ShowErrorNotificationAsync(ex);
252273
}
253274
}
254275

@@ -272,6 +293,7 @@ public async Task CreateScreen(ApplicationDescriptionViewModel applicationDescri
272293
catch (Exception ex)
273294
{
274295
logger.Error(ex, "There was an error while creating new screen");
296+
await notificationManager.ShowErrorNotificationAsync(ex);
275297
}
276298
}
277299

@@ -297,6 +319,7 @@ public async Task RenameScreen(ApplicationDescriptionViewModel applicationDescri
297319
catch (Exception ex)
298320
{
299321
logger.Error(ex, "There was an error while renaming the screen");
322+
await notificationManager.ShowErrorNotificationAsync(ex);
300323
}
301324
}
302325

@@ -351,6 +374,7 @@ public async Task RenameApplication(ActionExecutionContext context, ApplicationD
351374
if (this.Applications.Any(a => a.ApplicationName.Equals(newName)))
352375
{
353376
logger.Warning($"An application already exists with name {newName}.");
377+
await notificationManager.ShowErrorNotificationAsync($"An application already exists with name {newName}");
354378
return;
355379
}
356380
if (newName != applicationDescriptionViewModel.ApplicationName)
@@ -366,8 +390,9 @@ public async Task RenameApplication(ActionExecutionContext context, ApplicationD
366390
}
367391
catch (Exception ex)
368392
{
369-
logger.Error(ex, ex.Message);
393+
logger.Error(ex, "There was an error while trying to rename application : '{0}'", applicationDescriptionViewModel.ApplicationName);
370394
CanEdit = false;
395+
await notificationManager.ShowErrorNotificationAsync(ex);
371396
}
372397
}
373398

0 commit comments

Comments
 (0)