mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-04-05 21:01:35 +08:00
Externalizing AliasUpdater to a feature
This commit is contained in:
parent
0216d42060
commit
360bd8dd4f
@ -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() {
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
|
@ -77,6 +77,7 @@
|
||||
<Content Include="Views\Admin\Index.cshtml" />
|
||||
<Content Include="Web.config" />
|
||||
<Compile Include="Implementation\Updater\AliasUpdateCursor.cs" />
|
||||
<Compile Include="Implementation\Updater\AliasUpdaterBackgroundTask.cs" />
|
||||
<Compile Include="Implementation\Updater\IAliasUpdateCursor.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Content Include="Module.txt" />
|
||||
@ -102,7 +103,7 @@
|
||||
<Compile Include="Implementation\Holder\IAliasHolder.cs" />
|
||||
<Compile Include="Implementation\Map\AliasMap.cs" />
|
||||
<Compile Include="Implementation\Storage\AliasStorage.cs" />
|
||||
<Compile Include="Implementation\Updater\AliasUpdater.cs" />
|
||||
<Compile Include="Implementation\Updater\AliasHolderUpdater.cs" />
|
||||
<Compile Include="Implementation\Utils.cs" />
|
||||
<Compile Include="Migrations.cs" />
|
||||
<Compile Include="Records\ActionRecord.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user