diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj index cd4ae53..4c05dba 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/Eve-O-Preview/Eve-O-Preview.csproj @@ -114,18 +114,21 @@ + + + + - - - + + - + diff --git a/Eve-O-Preview/Mediator/Handlers/Services/StartServiceHandler.cs b/Eve-O-Preview/Mediator/Handlers/Services/StartStopServiceHandler.cs similarity index 55% rename from Eve-O-Preview/Mediator/Handlers/Services/StartServiceHandler.cs rename to Eve-O-Preview/Mediator/Handlers/Services/StartStopServiceHandler.cs index 7c7f493..2b34cdb 100644 --- a/Eve-O-Preview/Mediator/Handlers/Services/StartServiceHandler.cs +++ b/Eve-O-Preview/Mediator/Handlers/Services/StartStopServiceHandler.cs @@ -6,11 +6,11 @@ using MediatR; namespace EveOPreview.Mediator.Handlers.Services { - sealed class StartServiceHandler : IRequestHandler + sealed class StartStopServiceHandler : IRequestHandler, IRequestHandler { private readonly IThumbnailManager _manager; - public StartServiceHandler(IThumbnailManager manager) + public StartStopServiceHandler(IThumbnailManager manager) { this._manager = manager; } @@ -21,5 +21,12 @@ namespace EveOPreview.Mediator.Handlers.Services return Task.CompletedTask; } + + public Task Handle(StopService message, CancellationToken cancellationToken) + { + this._manager.Stop(); + + return Task.CompletedTask; + } } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Handlers/Services/StopServiceHandler.cs b/Eve-O-Preview/Mediator/Handlers/Services/StopServiceHandler.cs deleted file mode 100644 index be248cf..0000000 --- a/Eve-O-Preview/Mediator/Handlers/Services/StopServiceHandler.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Threading; -using System.Threading.Tasks; -using EveOPreview.Mediator.Messages; -using EveOPreview.Services; -using MediatR; - -namespace EveOPreview.Mediator.Handlers.Services -{ - sealed class StopServiceHandler : IRequestHandler - { - private readonly IThumbnailManager _manager; - - public StopServiceHandler(IThumbnailManager manager) - { - this._manager = manager; - } - - public Task Handle(StopService message, CancellationToken cancellationToken) - { - this._manager.Stop(); - - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailSizeUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailActiveSizeUpdatedHandler.cs similarity index 56% rename from Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailSizeUpdatedHandler.cs rename to Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailActiveSizeUpdatedHandler.cs index ac284eb..d5a6e0f 100644 --- a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailSizeUpdatedHandler.cs +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailActiveSizeUpdatedHandler.cs @@ -6,20 +6,20 @@ using MediatR; namespace EveOPreview.Mediator.Handlers.Thumbnails { - sealed class ThumbnailSizeUpdatedHandler : INotificationHandler + sealed class ThumbnailActiveSizeUpdatedHandler : INotificationHandler { private readonly IMainFormPresenter _presenter; - public ThumbnailSizeUpdatedHandler(MainFormPresenter presenter) + public ThumbnailActiveSizeUpdatedHandler(MainFormPresenter presenter) { this._presenter = presenter; } - public Task Handle(ThumbnailSizeUpdated notification, CancellationToken cancellationToken) + public Task Handle(ThumbnailActiveSizeUpdated notification, CancellationToken cancellationToken) { this._presenter.UpdateThumbnailSize(notification.Value); return Task.CompletedTask; } } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailConfiguredSizeUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailConfiguredSizeUpdatedHandler.cs new file mode 100644 index 0000000..700c678 --- /dev/null +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailConfiguredSizeUpdatedHandler.cs @@ -0,0 +1,25 @@ +using System.Threading; +using System.Threading.Tasks; +using EveOPreview.Mediator.Messages; +using EveOPreview.Services; +using MediatR; + +namespace EveOPreview.Mediator.Handlers.Thumbnails +{ + sealed class ThumbnailConfiguredSizeUpdatedHandler : INotificationHandler + { + private readonly IThumbnailManager _manager; + + public ThumbnailConfiguredSizeUpdatedHandler(IThumbnailManager manager) + { + this._manager = manager; + } + + public Task Handle(ThumbnailConfiguredSizeUpdated notification, CancellationToken cancellationToken) + { + this._manager.UpdateThumbnailsSize(); + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailFrameSettingsUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailFrameSettingsUpdatedHandler.cs new file mode 100644 index 0000000..44cc2d4 --- /dev/null +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailFrameSettingsUpdatedHandler.cs @@ -0,0 +1,25 @@ +using System.Threading; +using System.Threading.Tasks; +using EveOPreview.Mediator.Messages; +using EveOPreview.Services; +using MediatR; + +namespace EveOPreview.Mediator.Handlers.Thumbnails +{ + sealed class ThumbnailFrameSettingsUpdatedHandler : INotificationHandler + { + private readonly IThumbnailManager _manager; + + public ThumbnailFrameSettingsUpdatedHandler(IThumbnailManager manager) + { + this._manager = manager; + } + + public Task Handle(ThumbnailFrameSettingsUpdated notification, CancellationToken cancellationToken) + { + this._manager.UpdateThumbnailFrames(); + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs index 512db96..88dd8b6 100644 --- a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs @@ -32,4 +32,4 @@ namespace EveOPreview.Mediator.Handlers.Thumbnails return Task.CompletedTask; } } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs b/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs index 4baaa25..f604d39 100644 --- a/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs +++ b/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs @@ -11,4 +11,4 @@ namespace EveOPreview.Mediator.Messages public TValue Value { get; } } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs b/Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs index 53e643e..21a453f 100644 --- a/Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs +++ b/Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs @@ -5,4 +5,4 @@ namespace EveOPreview.Mediator.Messages sealed class SaveConfiguration : IRequest { } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Services/StopService.cs b/Eve-O-Preview/Mediator/Messages/Services/StopService.cs index 0c77f1b..c123c0b 100644 --- a/Eve-O-Preview/Mediator/Messages/Services/StopService.cs +++ b/Eve-O-Preview/Mediator/Messages/Services/StopService.cs @@ -5,4 +5,4 @@ namespace EveOPreview.Mediator.Messages sealed class StopService : IRequest { } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailActiveSizeUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailActiveSizeUpdated.cs new file mode 100644 index 0000000..b0f67a2 --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailActiveSizeUpdated.cs @@ -0,0 +1,12 @@ +using System.Drawing; + +namespace EveOPreview.Mediator.Messages +{ + sealed class ThumbnailActiveSizeUpdated : NotificationBase + { + public ThumbnailActiveSizeUpdated(Size size) + : base(size) + { + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailConfiguredSizeUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailConfiguredSizeUpdated.cs new file mode 100644 index 0000000..5982a44 --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailConfiguredSizeUpdated.cs @@ -0,0 +1,8 @@ +using MediatR; + +namespace EveOPreview.Mediator.Messages +{ + sealed class ThumbnailConfiguredSizeUpdated : INotification + { + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailFrameSettingsUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailFrameSettingsUpdated.cs new file mode 100644 index 0000000..396693b --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailFrameSettingsUpdated.cs @@ -0,0 +1,8 @@ +using MediatR; + +namespace EveOPreview.Mediator.Messages +{ + sealed class ThumbnailFrameSettingsUpdated : INotification + { + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs index ac5918f..a47e244 100644 --- a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs @@ -18,4 +18,4 @@ namespace EveOPreview.Mediator.Messages public Point Location { get; } } -} +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailSizeUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailSizeUpdated.cs deleted file mode 100644 index 7ae7b6b..0000000 --- a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailSizeUpdated.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Drawing; - -namespace EveOPreview.Mediator.Messages -{ - sealed class ThumbnailSizeUpdated : NotificationBase - { - public ThumbnailSizeUpdated(Size size) - : base(size) - { - } - } -} diff --git a/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs b/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs index fcba6e1..e5b5867 100644 --- a/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs +++ b/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Drawing; using EveOPreview.Configuration; using EveOPreview.Mediator.Messages; -using EveOPreview.Services; using EveOPreview.View; using MediatR; @@ -20,24 +19,22 @@ namespace EveOPreview.Presenters private readonly IMediator _mediator; private readonly IThumbnailConfiguration _configuration; private readonly IConfigurationStorage _configurationStorage; - private readonly IThumbnailManager _thumbnailManager; - private readonly IDictionary _descriptionsCache; + private bool _suppressSizeNotifications; private bool _exitApplication; #endregion - public MainFormPresenter(IApplicationController controller, IMainFormView view, IMediator mediator, IThumbnailConfiguration configuration, IConfigurationStorage configurationStorage, - IThumbnailManager thumbnailManager) + public MainFormPresenter(IApplicationController controller, IMainFormView view, IMediator mediator, IThumbnailConfiguration configuration, IConfigurationStorage configurationStorage) : base(controller, view) { this._mediator = mediator; this._configuration = configuration; this._configurationStorage = configurationStorage; - this._thumbnailManager = thumbnailManager; this._descriptionsCache = new Dictionary(); + this._suppressSizeNotifications = false; this._exitApplication = false; this.View.FormActivated = this.Activate; @@ -79,7 +76,6 @@ namespace EveOPreview.Presenters { this._mediator.Send(new StopService()).Wait(); - this._thumbnailManager.Stop(); this._configurationStorage.Save(); request.Allow = true; return; @@ -89,10 +85,14 @@ namespace EveOPreview.Presenters this.View.Minimize(); } - private void UpdateThumbnailsSize() + private async void UpdateThumbnailsSize() { - this._thumbnailManager.SetThumbnailsSize(this.View.ThumbnailSize); this.SaveApplicationSettings(); + + if (!this._suppressSizeNotifications) + { + await this._mediator.Publish(new ThumbnailConfiguredSizeUpdated()); + } } private void LoadApplicationSettings() @@ -122,7 +122,7 @@ namespace EveOPreview.Presenters this.View.ActiveClientHighlightColor = this._configuration.ActiveClientHighlightColor; } - private void SaveApplicationSettings() + private async void SaveApplicationSettings() { this._configuration.MinimizeToTray = this.View.MinimizeToTray; @@ -141,7 +141,12 @@ namespace EveOPreview.Presenters this._configuration.ThumbnailZoomAnchor = ViewZoomAnchorConverter.Convert(this.View.ThumbnailZoomAnchor); this._configuration.ShowThumbnailOverlays = this.View.ShowThumbnailOverlays; - this._configuration.ShowThumbnailFrames = this.View.ShowThumbnailFrames; + if (this._configuration.ShowThumbnailFrames != this.View.ShowThumbnailFrames) + { + await this._mediator.Publish(new ThumbnailFrameSettingsUpdated()); + this._configuration.ShowThumbnailFrames = this.View.ShowThumbnailFrames; + } + this._configuration.EnableActiveClientHighlight = this.View.EnableActiveClientHighlight; this._configuration.ActiveClientHighlightColor = this.View.ActiveClientHighlightColor; @@ -149,7 +154,7 @@ namespace EveOPreview.Presenters this.View.RefreshZoomSettings(); - this._thumbnailManager.SetupThumbnailFrames(); + await this._mediator.Send(new SaveConfiguration()); } @@ -200,17 +205,20 @@ namespace EveOPreview.Presenters private void UpdateThumbnailState(String title) { + // TODO This setting doesn't work atm //this._thumbnailManager.SetThumbnailState(thumbnailId, this._thumbnailDescriptionViews[thumbnailId].IsDisabled); } public void UpdateThumbnailSize(Size size) { + this._suppressSizeNotifications = true; this.View.ThumbnailSize = size; + this._suppressSizeNotifications = false; } private void OpenDocumentationLink() { - // TODO Move out + // TODO Move out to a separate service / presenter / message handler ProcessStartInfo processStartInfo = new ProcessStartInfo(new Uri(MainFormPresenter.ForumUrl).AbsoluteUri); Process.Start(processStartInfo); } diff --git a/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs b/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs index b44cd3d..f346e0c 100644 --- a/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs +++ b/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs @@ -78,7 +78,19 @@ namespace EveOPreview.Services thumbnail.IsEnabled = !hideAlways; } + public void UpdateThumbnailsSize() + { + this.InternalSetThumbnailsSize(this._configuration.ThumbnailSize); + } + public async void SetThumbnailsSize(Size size) + { + this.InternalSetThumbnailsSize(size); + + await this._mediator.Publish(new ThumbnailActiveSizeUpdated(size)); + } + + private void InternalSetThumbnailsSize(Size size) { this.DisableViewEvents(); @@ -88,8 +100,6 @@ namespace EveOPreview.Services entry.Value.Refresh(false); } - await this._mediator.Publish(new ThumbnailSizeUpdated(size)); - this.EnableViewEvents(); } @@ -104,7 +114,7 @@ namespace EveOPreview.Services foreach (KeyValuePair entry in this._thumbnailViews) { IThumbnailView view = entry.Value; - + if (hideAllThumbnails || !view.IsEnabled) { if (view.IsActive) @@ -154,7 +164,7 @@ namespace EveOPreview.Services this.EnableViewEvents(); } - public void SetupThumbnailFrames() + public void UpdateThumbnailFrames() { this.DisableViewEvents(); diff --git a/Eve-O-Preview/Services/Interface/IThumbnailManager.cs b/Eve-O-Preview/Services/Interface/IThumbnailManager.cs index d5868b4..694bcd6 100644 --- a/Eve-O-Preview/Services/Interface/IThumbnailManager.cs +++ b/Eve-O-Preview/Services/Interface/IThumbnailManager.cs @@ -10,6 +10,7 @@ namespace EveOPreview.Services void SetThumbnailState(IntPtr thumbnailId, bool hideAlways); void SetThumbnailsSize(Size size); - void SetupThumbnailFrames(); + void UpdateThumbnailsSize(); + void UpdateThumbnailFrames(); } } \ No newline at end of file