2012-08-22 15:32:56 -07:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Orchard.Alias.Implementation.Holder;
|
|
|
|
|
using Orchard.Alias.Implementation.Storage;
|
|
|
|
|
using Orchard.Environment;
|
|
|
|
|
using Orchard.Tasks;
|
|
|
|
|
using Orchard.Logging;
|
|
|
|
|
|
2012-10-24 15:51:35 -07:00
|
|
|
|
namespace Orchard.Alias.Implementation.Updater {
|
|
|
|
|
public class AliasHolderUpdater : IOrchardShellEvents, IBackgroundTask {
|
2012-08-22 15:32:56 -07:00
|
|
|
|
private readonly IAliasHolder _aliasHolder;
|
|
|
|
|
private readonly IAliasStorage _storage;
|
2013-11-06 13:54:13 -08:00
|
|
|
|
private readonly IAliasUpdateCursor _cursor;
|
2012-08-22 15:32:56 -07:00
|
|
|
|
|
|
|
|
|
public ILogger Logger { get; set; }
|
|
|
|
|
|
2013-11-06 13:54:13 -08:00
|
|
|
|
public AliasHolderUpdater(IAliasHolder aliasHolder, IAliasStorage storage, IAliasUpdateCursor cursor) {
|
2012-08-22 15:32:56 -07:00
|
|
|
|
_aliasHolder = aliasHolder;
|
|
|
|
|
_storage = storage;
|
2013-11-06 13:54:13 -08:00
|
|
|
|
_cursor = cursor;
|
2012-08-22 15:32:56 -07:00
|
|
|
|
Logger = NullLogger.Instance;
|
|
|
|
|
}
|
|
|
|
|
|
2012-10-24 15:51:35 -07:00
|
|
|
|
void IOrchardShellEvents.Activated() {
|
2012-08-22 15:32:56 -07:00
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
2012-10-24 15:51:35 -07:00
|
|
|
|
void IOrchardShellEvents.Terminating() {
|
2012-08-22 15:32:56 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2012-08-22 15:32:56 -07:00
|
|
|
|
}
|
2012-10-24 15:51:35 -07:00
|
|
|
|
catch (Exception ex) {
|
|
|
|
|
Logger.Error(ex, "Exception during Alias refresh");
|
2012-08-22 15:32:56 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Sweep() {
|
2014-04-17 22:51:31 -07:00
|
|
|
|
Refresh();
|
2012-08-22 15:32:56 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|