Skip to content

Commit aeaf1aa

Browse files
authored
Do some refactoring (#15)
* refactor * refactor * refactor * resharp * resharp. * refactor * gui * Add dummy MenuBar to FileManagerPage, WorkbenchPage. Minor tweaks. * Remove german strings temporarily * refactor * refactor * gui
1 parent fa3b3c1 commit aeaf1aa

70 files changed

Lines changed: 565 additions & 797 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,3 +352,4 @@ MigrationBackup/
352352
# Secure Area. Always ignore key files, etc.
353353
.secureArea/*
354354
.secureArea.7z
355+
/src/electrifier/Strings/de-de/Resources.resw

src/electrifier/Activation/ActivationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ public abstract class ActivationHandler<T> : IActivationHandler
1414
public bool CanHandle(object args) => args is T && CanHandleInternal((args as T)!);
1515

1616
public async Task HandleAsync(object args) => await HandleInternalAsync((args as T)!);
17-
}
17+
}

src/electrifier/Activation/AppNotificationActivationHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
using electrifier.Contracts.Services;
2-
using electrifier.ViewModels;
3-
42
using Microsoft.UI.Dispatching;
53
using Microsoft.UI.Xaml;
64
using Microsoft.Windows.AppLifecycle;
7-
using Microsoft.Windows.AppNotifications;
85

96
namespace electrifier.Activation;
107

@@ -48,4 +45,4 @@ protected async override Task HandleInternalAsync(LaunchActivatedEventArgs args)
4845

4946
await Task.CompletedTask;
5047
}
51-
}
48+
}

src/electrifier/Activation/DefaultActivationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ protected async override Task HandleInternalAsync(LaunchActivatedEventArgs args)
2626

2727
await Task.CompletedTask;
2828
}
29-
}
29+
}

src/electrifier/Activation/IActivationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ public interface IActivationHandler
55
bool CanHandle(object args);
66

77
Task HandleAsync(object args);
8-
}
8+
}

src/electrifier/App.xaml.cs

Lines changed: 97 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
// Disable XAML Generated break on unhalted exception
22
// <seealso href="" />
3-
#define DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
3+
//#define DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
44

55

6-
using System.Text;
76
using CommunityToolkit.WinUI;
87
using electrifier.Activation;
98
using electrifier.Contracts.Services;
9+
using electrifier.Models.Configuration.Global;
1010
using electrifier.Models;
11-
using electrifier.Notifications;
1211
using electrifier.Services;
1312
using electrifier.ViewModels;
1413
using electrifier.Views;
15-
16-
using Microsoft.AppCenter;
1714
using Microsoft.AppCenter.Analytics;
1815
using Microsoft.AppCenter.Crashes;
16+
using Microsoft.AppCenter;
1917
using Microsoft.Extensions.DependencyInjection;
2018
using Microsoft.Extensions.Hosting;
2119
using Microsoft.UI.Xaml;
20+
using System.Diagnostics;
21+
using System.Text;
2222

2323
namespace electrifier;
2424

@@ -35,15 +35,26 @@ public IHost Host
3535
get;
3636
}
3737

38-
public static T GetService<T>()
38+
public static T? GetService<T>()
3939
where T : class
4040
{
41-
if ((App.Current as App)!.Host.Services.GetService(typeof(T)) is not T service)
41+
try
42+
{
43+
if ((App.Current as App)!.Host.Services.GetService(typeof(T)) is not T service)
44+
{
45+
throw new ArgumentException(
46+
$"{typeof(T)} needs to be registered in ConfigureServices within App.xaml.cs.");
47+
}
48+
49+
return service;
50+
}
51+
catch (Exception ex)
4252
{
43-
throw new ArgumentException($"{typeof(T)} needs to be registered in ConfigureServices within App.xaml.cs.");
53+
Debug.WriteLine(ex.Message);
54+
Debug.WriteLine(ex.StackTrace);
4455
}
4556

46-
return service;
57+
return null;
4758
}
4859

4960
public static WindowEx MainWindow { get; } = new MainWindow();
@@ -58,72 +69,69 @@ public App()
5869
CreateDefaultBuilder().
5970
UseContentRoot(AppContext.BaseDirectory).
6071
ConfigureServices((context, services) =>
61-
{
62-
// Default Activation Handler
63-
_ = services.AddTransient<ActivationHandler<LaunchActivatedEventArgs>, DefaultActivationHandler>();
64-
65-
// Other Activation Handlers
66-
services.AddTransient<IActivationHandler, AppNotificationActivationHandler>();
67-
68-
// Services
69-
services.AddSingleton<IAppNotificationService, AppNotificationService>();
70-
services.AddSingleton<ILocalSettingsService, LocalSettingsService>();
71-
services.AddSingleton<IThemeSelectorService, ThemeSelectorService>();
72-
services.AddTransient<INavigationViewService, NavigationViewService>();
73-
services.AddTransient<IWebViewService, WebViewService>();
74-
75-
services.AddSingleton<IActivationService, ActivationService>();
76-
services.AddSingleton<INavigationService, NavigationService>();
77-
services.AddSingleton<IPageService, PageService>();
78-
79-
//// Core Services
80-
services.AddSingleton<IFileService, FileService>();
81-
82-
// Views and ViewModels
83-
services.AddTransient<ClipboardPage>();
84-
services.AddTransient<ClipboardViewModel>();
85-
services.AddTransient<DevicesPage>();
86-
services.AddTransient<DevicesViewModel>();
87-
services.AddTransient<FileManagerPage>();
88-
services.AddTransient<FileManagerViewModel>();
89-
services.AddTransient<NetworkDevicesPage>();
90-
services.AddTransient<NetworkDevicesViewModel>();
91-
services.AddTransient<SettingsPage>();
92-
services.AddTransient<SettingsViewModel>();
93-
services.AddTransient<ShellPage>();
94-
services.AddTransient<ShellViewModel>();
95-
services.AddTransient<WebFavoritesPage>();
96-
services.AddTransient<WebFavoritesViewModel>();
97-
services.AddTransient<WebHostsPage>();
98-
services.AddTransient<WebHostsViewModel>();
99-
services.AddTransient<WebViewPage>();
100-
services.AddTransient<WebViewViewModel>();
101-
services.AddTransient<WorkbenchPage>();
102-
services.AddTransient<WorkbenchViewModel>();
103-
104-
// Configuration
105-
services.Configure<LocalSettingsOptions>(context.Configuration.GetSection(nameof(LocalSettingsOptions)));
106-
}).Build();
107-
108-
App.GetService<IAppNotificationService>().Initialize();
109-
110-
// AppCenter.Start("{Your app secret here}", typeof(Analytics), typeof(Crashes));
111-
112-
// App_UnhandledException(this, new Microsoft.UI.Xaml.UnhandledExceptionEventArgs(this, false));
113-
//System.UnhandledExceptionEventArgs args = new System.UnhandledExceptionEventArgs();
114-
115-
//var v1 = new Microsoft.UI.Xaml.UnhandledExceptionEventArgs();
116-
117-
// UnhandledException.UnhandledException += App_UnhandledException;
118-
72+
{
73+
// Default Activation Handler
74+
_ = services.AddTransient<ActivationHandler<LaunchActivatedEventArgs>, DefaultActivationHandler>();
75+
76+
// Other Activation Handlers
77+
services.AddTransient<IActivationHandler, AppNotificationActivationHandler>();
78+
79+
// Services
80+
services.AddSingleton<IAppNotificationService, AppNotificationService>();
81+
services.AddSingleton<ILocalSettingsService, LocalSettingsService>();
82+
services.AddSingleton<IThemeSelectorService, ThemeSelectorService>();
83+
services.AddTransient<INavigationViewService, NavigationViewService>();
84+
services.AddTransient<IWebViewService, WebViewService>();
85+
86+
services.AddSingleton<IActivationService, ActivationService>();
87+
services.AddSingleton<INavigationService, NavigationService>();
88+
services.AddSingleton<IPageService, PageService>();
89+
90+
// Core Services
91+
services.AddSingleton<IFileService, FileService>();
92+
93+
// Views and ViewModels
94+
services.AddTransient<ClipboardPage>();
95+
services.AddTransient<ClipboardViewModel>();
96+
services.AddTransient<DevicesPage>();
97+
services.AddTransient<DevicesViewModel>();
98+
services.AddTransient<FileManagerPage>();
99+
services.AddTransient<FileManagerViewModel>();
100+
services.AddTransient<NetworkDevicesPage>();
101+
services.AddTransient<NetworkDevicesViewModel>();
102+
services.AddTransient<SettingsPage>();
103+
services.AddTransient<SettingsViewModel>();
104+
services.AddTransient<ShellPage>();
105+
services.AddTransient<ShellViewModel>();
106+
services.AddTransient<WebFavoritesPage>();
107+
services.AddTransient<WebFavoritesViewModel>();
108+
services.AddTransient<WebHostsPage>();
109+
services.AddTransient<WebHostsViewModel>();
110+
services.AddTransient<WebViewPage>();
111+
services.AddTransient<WebViewViewModel>();
112+
services.AddTransient<WorkbenchPage>();
113+
services.AddTransient<WorkbenchViewModel>();
114+
115+
// Configuration
116+
services.Configure<LocalSettingsOptions>(context.Configuration.GetSection(nameof(LocalSettingsOptions)));
117+
}).Build();
118+
119+
GetService<IAppNotificationService>()?
120+
.Initialize();
121+
122+
UnhandledException += App_UnhandledException;
119123
}
120124

121-
/// <summary>
122-
///
123-
/// </summary>
124-
/// <param name="sender"></param>
125-
/// <param name="args"></param>
126-
private void App_UnhandledException(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs args) => App_UnhandledException(sender, args, false);
125+
//private void App_StartAppCenter()
126+
//{
127+
// AppCenter.Start("{ TODO:Your_app_secret_here }", typeof(Analytics), typeof(Crashes));
128+
//}
129+
130+
131+
private void App_UnhandledException(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs args)
132+
{
133+
App_UnhandledException(sender, args, false);
134+
}
127135

128136
/// <summary>
129137
/// Log and handle exceptions as appropriate.
@@ -139,41 +147,24 @@ public App()
139147
/// <param name="itIsComplicated">
140148
/// Set <b>true</b> to force shutdown in case of critical error.<br/>
141149
/// <br/>
142-
/// Triggers <see cref="UnhandledExceptionEventArgs.Handled"/>.
150+
/// Triggers <see cref="Microsoft.UI.Xaml.UnhandledExceptionEventArgs.Handled"/>.
143151
/// </param>
144152
private void App_UnhandledException(
145153
object sender,
146154
Microsoft.UI.Xaml.UnhandledExceptionEventArgs args,
147-
bool itIsComplicated = false)
155+
bool itIsComplicated)
148156
{
149157
try
150158
{
159+
StringBuilder sb = new();
160+
161+
sb.AppendJoin("\n", "Exception happened!", "line 1", "line 2");
162+
151163
// TODO: Try to make an backup of current configuration and mark as "dirty".
152164
// TODO: Log and handle exceptions as appropriate.
153165

154-
//var guru = App.GetService<GuruMeditationDialoge>();
155-
156166
//guru?.ThrowGuruMeditation(sender, args);
157167

158-
159-
160-
/*
161-
var stringBuilder = new StringBuilder()
162-
.AppendLine("GURU MEDITATION")
163-
.AppendLine("Sender: { }")
164-
.AppendLine(args?.ToString());
165-
*/
166-
167-
168-
169-
//if (args is not null)
170-
//{
171-
// // TODO: Exception happened!
172-
173-
// args.Handled = true;
174-
//}
175-
176-
177168
/*
178169
179170
private async void ShowDialog_Click(object sender, RoutedEventArgs e)
@@ -214,23 +205,25 @@ private async void ShowDialog_Click(object sender, RoutedEventArgs e)
214205
}
215206
catch (Exception ex)
216207
{
217-
ex.ToString();
208+
var dummy = ex.ToString();
209+
210+
211+
// TODO: Log inner exception
218212
}
219213
finally
220214
{
221-
if (args is not null)
222-
{
223-
//args.Handled = !itIsComplicated;
224-
}
215+
args.Handled = true; // TODO: For test purposes only
216+
//args.Handled = !itIsComplicated; // TODO
225217
}
226218
}
227219

228220
protected async override void OnLaunched(LaunchActivatedEventArgs args)
229221
{
230222
base.OnLaunched(args);
231223

232-
// TODO: App.GetService<IAppNotificationService>().Show(string.Format("AppNotificationSamplePayload".GetLocalized(), AppContext.BaseDirectory));
224+
//GetService<IAppNotificationService>()?
225+
// .Show(string.Format("AppNotificationSamplePayload".GetLocalized(), AppContext.BaseDirectory));
233226

234-
await App.GetService<IActivationService>().ActivateAsync(args);
227+
await GetService<IActivationService>()?.ActivateAsync(args);
235228
}
236-
}
229+
}

src/electrifier/Behaviors/NavigationViewHeaderBehavior.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,4 @@ private void UpdateHeaderTemplate()
119119
AssociatedObject.HeaderTemplate = headerTemplate ?? DefaultHeaderTemplate;
120120
}
121121
}
122-
}
122+
}

src/electrifier/Behaviors/NavigationViewHeaderMode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ public enum NavigationViewHeaderMode
55
Always,
66
Never,
77
Minimal
8-
}
8+
}

src/electrifier/Contracts/Services/IActivationService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
public interface IActivationService
44
{
55
Task ActivateAsync(object activationArgs);
6-
}
6+
}

src/electrifier/Contracts/Services/IAppNotificationService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ public interface IAppNotificationService
1111
NameValueCollection ParseArguments(string arguments);
1212

1313
void Unregister();
14-
}
14+
}

0 commit comments

Comments
 (0)