diff --git a/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs b/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs index 779766b..74068fe 100644 --- a/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs +++ b/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs @@ -8,8 +8,7 @@ namespace Toolkit.Avalonia; public class ClassicDesktopStyleApplicationHandler : INavigateHandler { - public Task Handle(NavigateEventArgs args, - CancellationToken cancellationToken = default) + public Task Handle(NavigateEventArgs args) { if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime lifeTime) diff --git a/Toolkit.Avalonia/ContentControlHandler.cs b/Toolkit.Avalonia/ContentControlHandler.cs index 8343f78..0c69bc6 100644 --- a/Toolkit.Avalonia/ContentControlHandler.cs +++ b/Toolkit.Avalonia/ContentControlHandler.cs @@ -7,8 +7,7 @@ namespace Toolkit.Avalonia; public class ContentControlHandler : INavigateHandler { - public async Task Handle(NavigateEventArgs args, - CancellationToken cancellationToken) + public async Task Handle(NavigateEventArgs args) { if (args.Context is ContentControl contentControl) { diff --git a/Toolkit.Avalonia/ContentDialogHandler.cs b/Toolkit.Avalonia/ContentDialogHandler.cs index d327a3c..b7856e6 100644 --- a/Toolkit.Avalonia/ContentDialogHandler.cs +++ b/Toolkit.Avalonia/ContentDialogHandler.cs @@ -6,8 +6,7 @@ namespace Toolkit.Avalonia; public class ContentDialogHandler(IDispatcher dispatcher) : INavigateHandler { - public async Task Handle(NavigateEventArgs args, - CancellationToken cancellationToken) + public async Task Handle(NavigateEventArgs args) { if (args.Context is ContentDialog contentDialog) { @@ -86,7 +85,7 @@ public class ContentDialogHandler(IDispatcher dispatcher) : } // A hack to wait for the dialog to finish loading up to make it appear more responsive - await Task.Delay(250, cancellationToken); + await Task.Delay(250); if (content is IInitializer initializer) { await initializer.Initialize(); diff --git a/Toolkit.Avalonia/FrameHandler.cs b/Toolkit.Avalonia/FrameHandler.cs index 44e423d..04b5ab8 100644 --- a/Toolkit.Avalonia/FrameHandler.cs +++ b/Toolkit.Avalonia/FrameHandler.cs @@ -12,8 +12,7 @@ public class FrameHandler : INavigateHandler, INavigateBackHandler { - public Task Handle(NavigateEventArgs args, - CancellationToken cancellationToken) + public Task Handle(NavigateEventArgs args) { if (args.Context is Frame frame) { @@ -136,8 +135,7 @@ public class FrameHandler : return Task.CompletedTask; } - public Task Handle(NavigateBackEventArgs args, - CancellationToken cancellationToken = default) + public Task Handle(NavigateBackEventArgs args) { if (args.Context is Frame frame) { diff --git a/Toolkit.Avalonia/SingleViewApplicationHandler.cs b/Toolkit.Avalonia/SingleViewApplicationHandler.cs index 189bcc4..45825a7 100644 --- a/Toolkit.Avalonia/SingleViewApplicationHandler.cs +++ b/Toolkit.Avalonia/SingleViewApplicationHandler.cs @@ -8,8 +8,7 @@ namespace Toolkit.Avalonia; public class SingleViewApplicationHandler : INavigateHandler { - public Task Handle(NavigateEventArgs args, - CancellationToken cancellationToken = default) + public Task Handle(NavigateEventArgs args) { if (Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime lifeTime) diff --git a/Toolkit.Foundation/AppService.cs b/Toolkit.Foundation/AppService.cs index 6d054d3..a468121 100644 --- a/Toolkit.Foundation/AppService.cs +++ b/Toolkit.Foundation/AppService.cs @@ -13,7 +13,7 @@ public class AppService(IEnumerable initializers, await initializer.Initialize(); } - await publisher.Publish(cancellationToken); + publisher.Publish(cancellationToken); } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; diff --git a/Toolkit.Foundation/ComponentConfigurationViewModel.cs b/Toolkit.Foundation/ComponentConfigurationViewModel.cs index c326c36..83dc531 100644 --- a/Toolkit.Foundation/ComponentConfigurationViewModel.cs +++ b/Toolkit.Foundation/ComponentConfigurationViewModel.cs @@ -20,8 +20,7 @@ public partial class ComponentConfigurationViewModel args, - CancellationToken cancellationToken = default) + public Task Handle(ChangedEventArgs args) { throw new NotImplementedException(); } @@ -58,8 +57,7 @@ public partial class ComponentConfigurationViewModel args, - CancellationToken cancellationToken = default) + public Task Handle(ChangedEventArgs args) { if (args.Value is TConfiguration configuration) { @@ -101,8 +99,7 @@ public partial class ComponentConfigurationViewModel args, - CancellationToken cancellationToken = default) + public Task Handle(ChangedEventArgs args) { if (args.Value is TConfiguration configuration) { diff --git a/Toolkit.Foundation/ConfigurationChangedHandler.cs b/Toolkit.Foundation/ConfigurationChangedHandler.cs index 6a1cf8a..1244aa6 100644 --- a/Toolkit.Foundation/ConfigurationChangedHandler.cs +++ b/Toolkit.Foundation/ConfigurationChangedHandler.cs @@ -5,8 +5,7 @@ public class ConfigurationChangedHandler(ConfigurationVa where TValue : class, new() { - public Task Handle(ChangedEventArgs args, - CancellationToken cancellationToken = default) + public Task Handle(ChangedEventArgs args) { if (args.Value is TConfiguration configuration) { diff --git a/Toolkit.Foundation/ConfigurationInitializer.cs b/Toolkit.Foundation/ConfigurationInitializer.cs index aaf2185..1d033b8 100644 --- a/Toolkit.Foundation/ConfigurationInitializer.cs +++ b/Toolkit.Foundation/ConfigurationInitializer.cs @@ -9,7 +9,7 @@ public class ConfigurationInitializer(IConfigurationReader(IConfigurationReader(configuration)); + publisher.PublishUI(new ActivatedEventArgs(configuration)); + return Task.CompletedTask; } } \ No newline at end of file diff --git a/Toolkit.Foundation/ConfigurationMonitor.cs b/Toolkit.Foundation/ConfigurationMonitor.cs index baa65c8..ca86ea6 100644 --- a/Toolkit.Foundation/ConfigurationMonitor.cs +++ b/Toolkit.Foundation/ConfigurationMonitor.cs @@ -11,12 +11,12 @@ public class ConfigurationMonitor(IConfigurationFile(configuration)); + publisher.PublishUI(new ChangedEventArgs(configuration)); } } diff --git a/Toolkit.Foundation/INavigationScope.cs b/Toolkit.Foundation/INavigationScope.cs index bdab8e8..b6add22 100644 --- a/Toolkit.Foundation/INavigationScope.cs +++ b/Toolkit.Foundation/INavigationScope.cs @@ -2,8 +2,8 @@ public interface INavigationScope { - Task NavigateAsync(string route, object? sender = null, object? context = null, - EventHandler? navigated = null, object[]? parameters = null, CancellationToken cancellationToken = default); + void Navigate(string route, object? sender = null, object? context = null, + EventHandler? navigated = null, object[]? parameters = null); - Task NavigateBackAsync(object? context, CancellationToken cancellationToken = default); + void Back(object? context); } \ No newline at end of file diff --git a/Toolkit.Foundation/INotificationHandler.cs b/Toolkit.Foundation/INotificationHandler.cs index 3da0f29..6d52db3 100644 --- a/Toolkit.Foundation/INotificationHandler.cs +++ b/Toolkit.Foundation/INotificationHandler.cs @@ -3,6 +3,5 @@ public interface INotificationHandler : IHandler { - Task Handle(TMessage args, - CancellationToken cancellationToken = default); + Task Handle(TMessage args); } \ No newline at end of file diff --git a/Toolkit.Foundation/IPublisher.cs b/Toolkit.Foundation/IPublisher.cs index 36d973a..c01d127 100644 --- a/Toolkit.Foundation/IPublisher.cs +++ b/Toolkit.Foundation/IPublisher.cs @@ -2,45 +2,37 @@ public interface IPublisher { - public Task Publish(object key, - CancellationToken cancellationToken = default) + void Publish(object key) where TMessage : new(); - public Task Publish(TMessage message, - CancellationToken cancellationToken = default) + void Publish(TMessage message) where TMessage : notnull; - public Task Publish(TMessage message, - object key, - CancellationToken cancellationToken = default) + void Publish(TMessage message, + object key) where TMessage : notnull; - Task PublishUI(TMessage message, - object key, - CancellationToken cancellationToken = default) + void PublishUI(TMessage message, + object key) where TMessage : notnull; - Task PublishUI(object key, - CancellationToken cancellationToken = default) + void PublishUI(object key) where TMessage : new(); - Task PublishUI(TMessage message, - CancellationToken cancellationToken = default) + void PublishUI(TMessage message) where TMessage : notnull; - Task PublishUI(object message, - CancellationToken cancellationToken = default); + void PublishUI(object message); - Task Publish(object message, + void Publish(object message, Func, Task> marshal, - object? key = null, - CancellationToken cancellationToken = default); + object? key = null); - Task PublishUI(CancellationToken cancellationToken = default) + void PublishUI() where TMessage : new(); - Task Publish(CancellationToken cancellationToken = default) + void Publish() where TMessage : new(); - public Task Publish(object message, CancellationToken cancellationToken = default); + void Publish(object message); } \ No newline at end of file diff --git a/Toolkit.Foundation/NavigateBackHandler.cs b/Toolkit.Foundation/NavigateBackHandler.cs index b8b740e..fa0785f 100644 --- a/Toolkit.Foundation/NavigateBackHandler.cs +++ b/Toolkit.Foundation/NavigateBackHandler.cs @@ -5,16 +5,17 @@ namespace Toolkit.Foundation; public class NavigateBackHandler(IComponentScopeProvider provider) : INotificationHandler { - public async Task Handle(NavigateBackEventArgs args, - CancellationToken cancellationToken) + public Task Handle(NavigateBackEventArgs args) { if (provider.Get(args.Scope ?? "Root") is ComponentScopeDescriptor descriptor) { if (descriptor?.Services?.GetService() is INavigationScope navigationScope) { - await navigationScope.NavigateBackAsync(args.Context, cancellationToken); + navigationScope.Back(args.Context); } } + + return Task.CompletedTask; } } \ No newline at end of file diff --git a/Toolkit.Foundation/NavigateHandler.cs b/Toolkit.Foundation/NavigateHandler.cs index ae1a266..7a06f42 100644 --- a/Toolkit.Foundation/NavigateHandler.cs +++ b/Toolkit.Foundation/NavigateHandler.cs @@ -7,8 +7,7 @@ public class NavigateHandler(NamedComponent scope, IServiceProvider provider) : INotificationHandler { - public async Task Handle(NavigateEventArgs args, - CancellationToken cancellationToken) + public Task Handle(NavigateEventArgs args) { INavigationScope? navigationScope; if (args.Scope == "self") @@ -21,10 +20,9 @@ public class NavigateHandler(NamedComponent scope, navigationScope = descriptor?.Services?.GetRequiredService(); } - if (navigationScope is not null) - { - await navigationScope.NavigateAsync(args.Route, args.Sender, - args.Context, args.Navigated, args.Parameters, cancellationToken); - } + navigationScope?.Navigate(args.Route, args.Sender, + args.Context, args.Navigated, args.Parameters); + + return Task.CompletedTask; } } \ No newline at end of file diff --git a/Toolkit.Foundation/NavigationScope.cs b/Toolkit.Foundation/NavigationScope.cs index cadb894..7a3430d 100644 --- a/Toolkit.Foundation/NavigationScope.cs +++ b/Toolkit.Foundation/NavigationScope.cs @@ -10,8 +10,8 @@ public class NavigationScope(IPublisher publisher, IContentTemplateDescriptorProvider contentTemplateDescriptorProvider) : INavigationScope { - public async Task NavigateAsync(string route, object? sender = null, object? context = null, - EventHandler? navigated = null, object[]? parameters = null, CancellationToken cancellationToken = default) + public void Navigate(string route, object? sender = null, object? context = null, + EventHandler? navigated = null, object[]? parameters = null) { string[] segments = route.Split('/'); int segmentCount = segments.Length; @@ -65,7 +65,7 @@ public class NavigationScope(IPublisher publisher, Type navigateType = typeof(NavigateEventArgs<>).MakeGenericType(navigation.Type); if (Activator.CreateInstance(navigateType, [context, view, viewModel, sender, parameters]) is object navigate) { - await publisher.Publish(navigate, cancellationToken); + publisher.Publish(navigate); if (currentSegmentIndex == segmentCount) { navigated?.Invoke(this, EventArgs.Empty); @@ -79,8 +79,7 @@ public class NavigationScope(IPublisher publisher, } } - public async Task NavigateBackAsync(object? context, - CancellationToken cancellationToken = default) + public void Back(object? context) { if (context is not null) { @@ -95,7 +94,7 @@ public class NavigationScope(IPublisher publisher, Type navigateType = typeof(NavigateBackEventArgs<>).MakeGenericType(navigation.Type); if (Activator.CreateInstance(navigateType, [context]) is object navigate) { - await publisher.Publish(navigate, cancellationToken); + publisher.Publish(navigate); } } } diff --git a/Toolkit.Foundation/NotificationHandlerDelegate.cs b/Toolkit.Foundation/NotificationHandlerDelegate.cs index 448ac77..f0e6031 100644 --- a/Toolkit.Foundation/NotificationHandlerDelegate.cs +++ b/Toolkit.Foundation/NotificationHandlerDelegate.cs @@ -1,4 +1,3 @@ namespace Toolkit.Foundation; -public delegate Task NotificationHandlerDelegate(TMessage message, - CancellationToken cancellationToken); \ No newline at end of file +public delegate Task NotificationHandlerDelegate(TMessage message); \ No newline at end of file diff --git a/Toolkit.Foundation/NotificationHandlerWrapper.cs b/Toolkit.Foundation/NotificationHandlerWrapper.cs index b6391bf..e012ab3 100644 --- a/Toolkit.Foundation/NotificationHandlerWrapper.cs +++ b/Toolkit.Foundation/NotificationHandlerWrapper.cs @@ -6,19 +6,18 @@ public class NotificationHandlerWrapper(INotificationHandler private readonly IEnumerable> pipelineBehaviours = pipelineBehaviours.Reverse(); - public async Task Handle(TMessage message, - CancellationToken cancellationToken) + public async Task Handle(TMessage message) { NotificationHandlerDelegate currentHandler = handler.Handle; foreach (IPipelineBehaviour behaviour in pipelineBehaviours) { NotificationHandlerDelegate previousHandler = currentHandler; - currentHandler = async (args, token) => + currentHandler = async (args) => { - await behaviour.Handle(args, previousHandler, token); + await behaviour.Handle(args, previousHandler); }; } - await currentHandler(message, cancellationToken); + await currentHandler(message); } } \ No newline at end of file diff --git a/Toolkit.Foundation/ObservableCollectionViewModel.cs b/Toolkit.Foundation/ObservableCollectionViewModel.cs index 5e29530..a4a1743 100644 --- a/Toolkit.Foundation/ObservableCollectionViewModel.cs +++ b/Toolkit.Foundation/ObservableCollectionViewModel.cs @@ -235,7 +235,7 @@ public partial class ObservableCollectionViewModel : Disposer.Dispose(this); } - public async Task Enumerate() + public void Enumerate() { if (this.GetAttribute() is EnumerateAttribute attribute) { @@ -245,7 +245,7 @@ public partial class ObservableCollectionViewModel : } object? key = this.GetPropertyValue(() => attribute.Key) is { } value ? value : attribute.Key; - await Publisher.PublishUI(PrepareEnumeration(key)); + Publisher.PublishUI(PrepareEnumeration(key)); } } @@ -255,8 +255,7 @@ public partial class ObservableCollectionViewModel : IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)collection).GetEnumerator(); - public Task Handle(RemoveEventArgs args, - CancellationToken cancellationToken) + public Task Handle(RemoveEventArgs args) { foreach (TViewModel item in this.ToList()) { @@ -269,8 +268,7 @@ public partial class ObservableCollectionViewModel : return Task.CompletedTask; } - public Task Handle(CreateEventArgs args, - CancellationToken cancellationToken) + public Task Handle(CreateEventArgs args) { if (args.Value is TViewModel item) { @@ -280,8 +278,7 @@ public partial class ObservableCollectionViewModel : return Task.CompletedTask; } - public Task Handle(InsertEventArgs args, - CancellationToken cancellationToken) + public Task Handle(InsertEventArgs args) { if (args.Value is TViewModel item) { @@ -291,8 +288,7 @@ public partial class ObservableCollectionViewModel : return Task.CompletedTask; } - public Task Handle(MoveEventArgs args, - CancellationToken cancellationToken) + public Task Handle(MoveEventArgs args) { if (args.Value is TViewModel item) { @@ -302,8 +298,7 @@ public partial class ObservableCollectionViewModel : return Task.CompletedTask; } - public Task Handle(ReplaceEventArgs args, - CancellationToken cancellationToken) + public Task Handle(ReplaceEventArgs args) { if (args.Value is TViewModel item) { @@ -328,7 +323,7 @@ public partial class ObservableCollectionViewModel : } Initialized = true; - await Enumerate(); + Enumerate(); } public void Insert(int index, TViewModel item) => diff --git a/Toolkit.Foundation/Publisher.cs b/Toolkit.Foundation/Publisher.cs index 6f1ce5a..26ff1d5 100644 --- a/Toolkit.Foundation/Publisher.cs +++ b/Toolkit.Foundation/Publisher.cs @@ -8,29 +8,21 @@ public class Publisher(ISubscriptionManager subscriptionManager, IDispatcher dispatcher) : IPublisher { - public Task Publish(object key, - CancellationToken cancellationToken = default) + public void Publish(object key) where TMessage : new() => - Publish(new TMessage(), async args => await args(), - key, cancellationToken); + Publish(new TMessage(), async args => await args(), key); - public Task Publish(TMessage message, - CancellationToken cancellationToken = default) + public void Publish(TMessage message) where TMessage : notnull => - Publish(message, async args => await args(), - null, cancellationToken); + Publish(message, async args => await args(), null); - public Task Publish(TMessage message, - object key, - CancellationToken cancellationToken = default) - where TMessage : notnull => - Publish(message, async args => await args(), - key, cancellationToken); + public void Publish(TMessage message, object key) + where TMessage : notnull => + Publish(message, async args => await args(), key); - public async Task Publish(object message, + public void Publish(object message, Func, Task> marshal, - object? key = null, - CancellationToken cancellationToken = default) + object? key = null) { Type notificationType = message.GetType(); @@ -49,53 +41,41 @@ public class Publisher(ISubscriptionManager subscriptionManager, { Type? handlerType = handler.GetType(); MethodInfo? handleMethod = handlerType.GetMethod("Handle", - [notificationType, typeof(CancellationToken)]); + [notificationType]); if (handleMethod is not null) { - await marshal(() => (Task)handleMethod.Invoke(handler, new object[] - { message, cancellationToken })!); + marshal(() => (Task)handleMethod.Invoke(handler, new object[] + { message })!); } } } } - public Task Publish(object message, - CancellationToken cancellationToken = default) => Publish(message, - async args => await args(), - null, cancellationToken); + public void Publish(object message) => Publish(message, + async args => await args(), null); - public Task Publish(CancellationToken cancellationToken = default) + public void Publish() where TMessage : new() => - Publish(new TMessage(), async args => await args(), - null, cancellationToken); + Publish(new TMessage(), async args => await args(), null); - public Task PublishUI(object key, - CancellationToken cancellationToken = default) - where TMessage : new() => - Publish(new TMessage(), args => dispatcher.Invoke(async () => await args()), - key, cancellationToken); + public void PublishUI(object key) + where TMessage : new() => + Publish(new TMessage(), args => dispatcher.Invoke(async () => await args()), key); - public Task PublishUI(TMessage message, - CancellationToken cancellationToken = default) + public void PublishUI(TMessage message) where TMessage : notnull => - Publish(message, args => dispatcher.Invoke(async () => await args()), - null, cancellationToken); + Publish(message, args => dispatcher.Invoke(async () => await args()), null); - public Task PublishUI(TMessage message, - object key, - CancellationToken cancellationToken = default) + public void PublishUI(TMessage message, + object key) where TMessage : notnull => - Publish(message, args => dispatcher.Invoke(async () => await args()), - key, cancellationToken); + Publish(message, args => dispatcher.Invoke(async () => await args()), key); - public Task PublishUI(CancellationToken cancellationToken = default) + public void PublishUI() where TMessage : new() => - Publish(new TMessage(), args => dispatcher.Invoke(async () => await args()), - null, cancellationToken); + Publish(new TMessage(), args => dispatcher.Invoke(async () => await args()), null); - public Task PublishUI(object message, - CancellationToken cancellationToken = default) => Publish(message, args => - dispatcher.Invoke(async () => await args()), - null, cancellationToken); + public void PublishUI(object message) => Publish(message, args => + dispatcher.Invoke(async () => await args()), null); } \ No newline at end of file diff --git a/Toolkit.UI.Avalonia/NavigateAction.cs b/Toolkit.UI.Avalonia/NavigateAction.cs index 0e4c894..92cc6aa 100644 --- a/Toolkit.UI.Avalonia/NavigateAction.cs +++ b/Toolkit.UI.Avalonia/NavigateAction.cs @@ -74,8 +74,8 @@ public class NavigateAction : ParameterBindings.Select(binding => new KeyValuePair(binding.Key, binding.Value)).ToArray() : Enumerable.Empty>()]; - observableViewModel.Publisher.Publish(new NavigateEventArgs(Route, Context == this ? control : Context, Scope ?? null, - control.DataContext, Navigated, parameters)).ConfigureAwait(false); + observableViewModel.Publisher.Publish(new NavigateEventArgs(Route, Context == this ? control : Context, Scope ?? null, + control.DataContext, Navigated, parameters)); } } diff --git a/Toolkit.UI.Avalonia/NavigateBackAction.cs b/Toolkit.UI.Avalonia/NavigateBackAction.cs index 13a92af..db925ed 100644 --- a/Toolkit.UI.Avalonia/NavigateBackAction.cs +++ b/Toolkit.UI.Avalonia/NavigateBackAction.cs @@ -35,7 +35,7 @@ public class NavigateBackAction : if (control.DataContext is IObservableViewModel observableViewModel) { observableViewModel.Publisher.Publish(new NavigateBackEventArgs(Context - ?? null, Scope ?? null)).ConfigureAwait(false); + ?? null, Scope ?? null)); } }