Files
Orchard/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs

52 lines
1.7 KiB
C#
Raw Normal View History

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;
2013-11-06 13:54:13 -08:00
private readonly IAliasUpdateCursor _cursor;
public ILogger Logger { get; set; }
2013-11-06 13:54:13 -08:00
public AliasHolderUpdater(IAliasHolder aliasHolder, IAliasStorage storage, IAliasUpdateCursor cursor) {
_aliasHolder = aliasHolder;
_storage = storage;
2013-11-06 13:54:13 -08:00
_cursor = cursor;
Logger = NullLogger.Instance;
}
void IOrchardShellEvents.Activated() {
Refresh();
}
void IOrchardShellEvents.Terminating() {
}
private void Refresh() {
try {
2013-11-06 13:54:13 -08:00
// 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;
2014-01-23 14:50:50 -08:00
_aliasHolder.SetAliases(aliases.Select(alias => new AliasInfo { Path = alias.Item1, Area = alias.Item2, RouteValues = alias.Item3 }));
2013-11-06 13:54:13 -08:00
}
}
catch (Exception ex) {
Logger.Error(ex, "Exception during Alias refresh");
}
}
public void Sweep() {
Refresh();
}
}
}