Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit08d523f

Browse files
committed
added a default handler
1 parent7ff7914 commit08d523f

File tree

2 files changed

+43
-22
lines changed

2 files changed

+43
-22
lines changed

‎App/Services/UserNotifier.cs

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
usingSystem.Collections.Generic;
44
usingSystem.Threading;
55
usingSystem.Threading.Tasks;
6+
usingCoder.Desktop.App.Views;
67
usingMicrosoft.Extensions.Logging;
78
usingMicrosoft.Windows.AppNotifications;
89
usingMicrosoft.Windows.AppNotifications.Builder;
@@ -20,17 +21,26 @@ public interface IUserNotifier : INotificationHandler, IAsyncDisposable
2021
publicvoidUnregisterHandler(stringname);
2122

2223
publicTaskShowErrorNotification(stringtitle,stringmessage,CancellationTokenct=default);
23-
publicTaskShowActionNotification(stringtitle,stringmessage,stringhandlerName,IDictionary<string,string>?args=null,CancellationTokenct=default);
24+
publicTaskShowActionNotification(stringtitle,stringmessage,string?handlerName,IDictionary<string,string>?args=null,CancellationTokenct=default);
2425
}
2526

26-
publicclassUserNotifier(ILogger<UserNotifier>logger,IDispatcherQueueManagerdispatcherQueueManager):IUserNotifier
27+
publicclassUserNotifier:IUserNotifier
2728
{
2829
privateconststringCoderNotificationHandler="CoderNotificationHandler";
2930

3031
privatereadonlyAppNotificationManager_notificationManager=AppNotificationManager.Default;
32+
privatereadonlyILogger<UserNotifier>_logger;
33+
privatereadonlyIDispatcherQueueManager_dispatcherQueueManager;
3134

3235
privateConcurrentDictionary<string,INotificationHandler>Handlers{get;}=new();
3336

37+
publicUserNotifier(ILogger<UserNotifier>logger,IDispatcherQueueManagerdispatcherQueueManager)
38+
{
39+
_logger=logger;
40+
_dispatcherQueueManager=dispatcherQueueManager;
41+
Handlers.TryAdd(nameof(DefaultNotificationHandler),newDefaultNotificationHandler());
42+
}
43+
3444
publicValueTaskDisposeAsync()
3545
{
3646
returnValueTask.CompletedTask;
@@ -61,10 +71,18 @@ public Task ShowErrorNotification(string title, string message, CancellationToke
6171
returnTask.CompletedTask;
6272
}
6373

64-
publicTaskShowActionNotification(stringtitle,stringmessage,stringhandlerName,IDictionary<string,string>?args=null,CancellationTokenct=default)
74+
publicTaskShowActionNotification(stringtitle,stringmessage,string?handlerName,IDictionary<string,string>?args=null,CancellationTokenct=default)
6575
{
66-
if(!Handlers.TryGetValue(handlerName,out_))
67-
thrownewInvalidOperationException($"No action handler with the name '{handlerName}' is registered.");
76+
if(handlerName==null)
77+
{
78+
// Use default handler if no handler name is provided
79+
handlerName=nameof(DefaultNotificationHandler);
80+
}
81+
else
82+
{
83+
if(!Handlers.TryGetValue(handlerName,out_))
84+
thrownewInvalidOperationException($"No action handler with the name '{handlerName}' is registered. Use null for default");
85+
}
6886

6987
varbuilder=newAppNotificationBuilder()
7088
.AddText(title)
@@ -90,20 +108,32 @@ public void HandleNotificationActivation(IDictionary<string, string> args)
90108

91109
if(!Handlers.TryGetValue(handlerName,outvarhandler))
92110
{
93-
logger.LogWarning("no action handler '{HandlerName}' found for notification activation, ignoring",handlerName);
111+
_logger.LogWarning("no action handler '{HandlerName}' found for notification activation, ignoring",handlerName);
94112
return;
95113
}
96114

97-
dispatcherQueueManager.RunInUiThread(()=>
115+
_dispatcherQueueManager.RunInUiThread(()=>
98116
{
99117
try
100118
{
101119
handler.HandleNotificationActivation(args);
102120
}
103121
catch(Exceptionex)
104122
{
105-
logger.LogWarning(ex,"could not handle activation for notification with handler '{HandlerName}",handlerName);
123+
_logger.LogWarning(ex,"could not handle activation for notification with handler '{HandlerName}",handlerName);
106124
}
107125
});
108126
}
109127
}
128+
129+
publicclassDefaultNotificationHandler:INotificationHandler
130+
{
131+
publicvoidHandleNotificationActivation(IDictionary<string,string>_)
132+
{
133+
varapp=(App)Microsoft.UI.Xaml.Application.Current;
134+
if(app!=null&&app.TrayWindow!=null)
135+
{
136+
app.TrayWindow.Tray_Open();
137+
}
138+
}
139+
}

‎App/Views/TrayWindow.xaml.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
namespaceCoder.Desktop.App.Views;
2525

26-
publicsealedpartialclassTrayWindow:Window,INotificationHandler
26+
publicsealedpartialclassTrayWindow:Window
2727
{
2828
privateconstintWIDTH=300;
2929

@@ -38,8 +38,6 @@ public sealed partial class TrayWindow : Window, INotificationHandler
3838
privateVpnLifecycleprevVpnLifecycle=VpnLifecycle.Stopped;
3939
privateRpcLifecycleprevRpcLifecycle=RpcLifecycle.Disconnected;
4040

41-
privateNativeApi.POINT?_lastActivatePosition;
42-
4341
privatereadonlyIRpcController_rpcController;
4442
privatereadonlyICredentialManager_credentialManager;
4543
privatereadonlyISyncSessionController_syncSessionController;
@@ -69,7 +67,6 @@ public TrayWindow(
6967
_mainPage=mainPage;
7068

7169
InitializeComponent();
72-
_userNotifier.RegisterHandler("TrayWindow",this);
7370
AppWindow.Hide();
7471
Activated+=Window_Activated;
7572
RootFrame.SizeChanged+=RootFrame_SizeChanged;
@@ -158,7 +155,7 @@ private void NotifyUser(RpcModel rpcModel)
158155
{
159156
// This method is called when the state changes, but we don't want to notify
160157
// the user if the state hasn't changed.
161-
varisRpcLifecycleChanged=rpcModel.RpcLifecycle!=RpcLifecycle.Connecting&&prevRpcLifecycle!=rpcModel.RpcLifecycle;
158+
varisRpcLifecycleChanged=rpcModel.RpcLifecycle==RpcLifecycle.Disconnected&&prevRpcLifecycle!=rpcModel.RpcLifecycle;
162159
varisVpnLifecycleChanged=(rpcModel.VpnLifecycle==VpnLifecycle.Started||rpcModel.VpnLifecycle==VpnLifecycle.Stopped)&&prevVpnLifecycle!=rpcModel.VpnLifecycle;
163160

164161
if(!isRpcLifecycleChanged&&!isVpnLifecycleChanged)
@@ -170,8 +167,7 @@ private void NotifyUser(RpcModel rpcModel)
170167
if(isRpcLifecycleChanged)
171168
message+=rpcModel.RpcLifecycleswitch
172169
{
173-
RpcLifecycle.Connected=>"Connected to Coder vpn service.",
174-
RpcLifecycle.Disconnected=>"Disconnected from Coder vpn service.",
170+
RpcLifecycle.Disconnected=>"Disconnected from Coder background service.",
175171
_=>""// This will never be hit.
176172
};
177173

@@ -196,7 +192,7 @@ private void NotifyUser(RpcModel rpcModel)
196192
}
197193

198194
// Trigger notification
199-
_userNotifier.ShowActionNotification(message,string.Empty,nameof(TrayWindow),null,CancellationToken.None);
195+
_userNotifier.ShowActionNotification(message,string.Empty,null,null,CancellationToken.None);
200196
}
201197

202198
privatevoidRpcController_StateChanged(object?_,RpcModelmodel)
@@ -355,7 +351,7 @@ private void Window_Activated(object sender, WindowActivatedEventArgs e)
355351
}
356352

357353
[RelayCommand]
358-
privatevoidTray_Open()
354+
publicvoidTray_Open()
359355
{
360356
MoveResizeAndActivate();
361357
}
@@ -374,11 +370,6 @@ private void Tray_Exit()
374370
_=((App)Application.Current).ExitApplication();
375371
}
376372

377-
publicvoidHandleNotificationActivation(IDictionary<string,string>args)
378-
{
379-
Tray_Open();
380-
}
381-
382373
publicstaticclassNativeApi
383374
{
384375
[DllImport("dwmapi.dll")]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp