From 360bd8dd4ff846506f716963e4e54b58ae8503dd Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 17 Apr 2014 22:54:19 -0700 Subject: [PATCH] Externalizing AliasUpdater to a feature --- ...{AliasUpdater.cs => AliasHolderUpdater.cs} | 112 ++++++++++-------- .../Updater/AliasUpdaterBackgroundTask.cs | 19 +++ .../Modules/Orchard.Alias/Module.txt | 5 + .../Orchard.Alias/Orchard.Alias.csproj | 3 +- 4 files changed, 87 insertions(+), 52 deletions(-) rename src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/{AliasUpdater.cs => AliasHolderUpdater.cs} (73%) create mode 100644 src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasHolderUpdater.cs similarity index 73% rename from src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs rename to src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasHolderUpdater.cs index d9c41d94b..aec6d63ad 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs +++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasHolderUpdater.cs @@ -1,51 +1,61 @@ -using System; -using System.Linq; -using Orchard.Alias.Implementation.Holder; -using Orchard.Alias.Implementation.Storage; -using Orchard.Environment; -using Orchard.Tasks; -using Orchard.Logging; - -namespace Orchard.Alias.Implementation.Updater { - public class AliasHolderUpdater : IOrchardShellEvents, IBackgroundTask { - private readonly IAliasHolder _aliasHolder; - private readonly IAliasStorage _storage; - private readonly IAliasUpdateCursor _cursor; - - public ILogger Logger { get; set; } - - public AliasHolderUpdater(IAliasHolder aliasHolder, IAliasStorage storage, IAliasUpdateCursor cursor) { - _aliasHolder = aliasHolder; - _storage = storage; - _cursor = cursor; - Logger = NullLogger.Instance; - } - - void IOrchardShellEvents.Activated() { - Refresh(); - } - - void IOrchardShellEvents.Terminating() { - } - - private void Refresh() { - try { - // only retreive aliases which have not been processed yet - var aliases = _storage.List(x => x.Id > _cursor.Cursor).ToArray(); - - // update the last processed id - if (aliases.Any()) { - _cursor.Cursor = aliases.Last().Item5; - _aliasHolder.SetAliases(aliases.Select(alias => new AliasInfo { Path = alias.Item1, Area = alias.Item2, RouteValues = alias.Item3 })); - } - } - catch (Exception ex) { - Logger.Error(ex, "Exception during Alias refresh"); - } - } - - public void Sweep() { - Refresh(); - } - } -} +using System; +using System.Linq; +using Orchard.Alias.Implementation.Holder; +using Orchard.Alias.Implementation.Storage; +using Orchard.Environment; +using Orchard.Tasks; +using Orchard.Logging; +using Orchard.Environment.Extensions; + +namespace Orchard.Alias.Implementation.Updater { + public interface IAliasHolderUpdater : IDependency { + void Refresh(); + } + + public class AliasHolderUpdater : IAliasHolderUpdater { + private readonly IAliasHolder _aliasHolder; + private readonly IAliasStorage _storage; + private readonly IAliasUpdateCursor _cursor; + + public ILogger Logger { get; set; } + + public AliasHolderUpdater(IAliasHolder aliasHolder, IAliasStorage storage, IAliasUpdateCursor cursor) { + _aliasHolder = aliasHolder; + _storage = storage; + _cursor = cursor; + Logger = NullLogger.Instance; + } + + public void Refresh() { + try { + // only retreive aliases which have not been processed yet + var aliases = _storage.List(x => x.Id > _cursor.Cursor).ToArray(); + + // update the last processed id + if (aliases.Any()) { + _cursor.Cursor = aliases.Last().Item5; + _aliasHolder.SetAliases(aliases.Select(alias => new AliasInfo { Path = alias.Item1, Area = alias.Item2, RouteValues = alias.Item3 })); + } + } + catch (Exception ex) { + Logger.Error(ex, "Exception during Alias refresh"); + } + } + } + + public class AliasUpdaterEvent : IOrchardShellEvents { + + private readonly IAliasHolderUpdater _aliasHolderUpdater; + + public AliasUpdaterEvent(IAliasHolderUpdater aliasHolderUpdater) { + _aliasHolderUpdater = aliasHolderUpdater; + } + + void IOrchardShellEvents.Activated() { + _aliasHolderUpdater.Refresh(); + } + + void IOrchardShellEvents.Terminating() { + } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs new file mode 100644 index 000000000..1c3ecab62 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs @@ -0,0 +1,19 @@ +using Orchard.Environment.Extensions; +using Orchard.Tasks; + +namespace Orchard.Alias.Implementation.Updater { + [OrchardFeature("Orchard.Alias.Updater")] + public class AliasUpdaterBackgroundTask : IBackgroundTask { + + private readonly IAliasHolderUpdater _aliasHolderUpdater; + + public AliasUpdaterBackgroundTask(IAliasHolderUpdater aliasHolderUpdater) { + _aliasHolderUpdater = aliasHolderUpdater; + } + + public void Sweep() { + _aliasHolderUpdater.Refresh(); + } + } + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Module.txt b/src/Orchard.Web/Modules/Orchard.Alias/Module.txt index 3164287e0..0e7a0305c 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Alias/Module.txt @@ -13,3 +13,8 @@ Features: Description: Admin user interface for Orchard.Alias. Dependencies: Orchard.Alias Category: Content + Orchard.Alias.Updater: + Name: Alias Updater + Description: Synchronizes aliases when created from different servers. + Dependencies: Orchard.Alias + Category: Content diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj b/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj index e4eaf362a..e4903ceb7 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj +++ b/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj @@ -77,6 +77,7 @@ + @@ -102,7 +103,7 @@ - +