- Moving scheduled tasks to use IEventHandler.

--HG--
branch : dev
This commit is contained in:
Suha Can
2010-05-12 15:04:39 -07:00
parent 3339cc94a8
commit 9689f2af41
7 changed files with 27 additions and 20 deletions

View File

@@ -1,6 +1,5 @@
using System;
using Autofac;
using Autofac.Builder;
using Moq;
using NUnit.Framework;
using Orchard.Tasks;

View File

@@ -1,16 +1,18 @@
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.Logging;
using Orchard.Tasks.Scheduling;
namespace Orchard.Core.Scheduling.Services {
[UsedImplicitly]
public class PublishingTaskHandler : IScheduledTaskHandler {
public PublishingTaskHandler(IOrchardServices services) {
Services = services;
private readonly IContentManager _contentManager;
public PublishingTaskHandler(IContentManager contentManager) {
_contentManager = contentManager;
Logger = NullLogger.Instance;
}
public IOrchardServices Services { get; set; }
public ILogger Logger { get; set; }
public void Process(ScheduledTaskContext context) {
@@ -20,7 +22,7 @@ namespace Orchard.Core.Scheduling.Services {
context.Task.ContentItem.Version,
context.Task.ScheduledUtc);
Services.ContentManager.Publish(context.Task.ContentItem);
_contentManager.Publish(context.Task.ContentItem);
}
else if (context.Task.TaskType == "Unpublish") {
Logger.Information("Unpublishing item #{0} version {1} scheduled at {2} utc",
@@ -28,7 +30,7 @@ namespace Orchard.Core.Scheduling.Services {
context.Task.ContentItem.Version,
context.Task.ScheduledUtc);
Services.ContentManager.Unpublish(context.Task.ContentItem);
_contentManager.Unpublish(context.Task.ContentItem);
}
}
}

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.Core.Scheduling.Models;
using Orchard.Data;
using Orchard.Logging;
@@ -11,24 +12,24 @@ using Orchard.Tasks.Scheduling;
namespace Orchard.Core.Scheduling.Services {
[UsedImplicitly]
public class ScheduledTaskExecutor : IBackgroundTask {
public class ScheduledTaskExecutor : IBackgroundTask, IDependency {
private readonly IClock _clock;
private readonly IRepository<ScheduledTaskRecord> _repository;
private readonly IEnumerable<IScheduledTaskHandler> _handlers;
private readonly IContentManager _contentManager;
public ScheduledTaskExecutor(
IOrchardServices services,
IClock clock,
IRepository<ScheduledTaskRecord> repository,
IEnumerable<IScheduledTaskHandler> handlers) {
IEnumerable<IScheduledTaskHandler> handlers,
IContentManager contentManager) {
_clock = clock;
_repository = repository;
_handlers = handlers;
Services = services;
_contentManager = contentManager;
Logger = NullLogger.Instance;
}
public IOrchardServices Services { get; set; }
public ILogger Logger { get; set; }
public void Sweep() {
@@ -52,7 +53,7 @@ namespace Orchard.Core.Scheduling.Services {
_repository.Delete(taskRecord);
var context = new ScheduledTaskContext {
Task = new Task(Services.ContentManager, taskRecord)
Task = new Task(_contentManager, taskRecord)
};
// dispatch to standard or custom handlers

View File

@@ -12,17 +12,17 @@ using Orchard.Utility.Extensions;
namespace Orchard.Core.Scheduling.Services {
[UsedImplicitly]
public class ScheduledTaskManager : IScheduledTaskManager {
private readonly IContentManager _contentManager;
private readonly IRepository<ScheduledTaskRecord> _repository;
public ScheduledTaskManager(
IOrchardServices services,
IContentManager contentManager,
IRepository<ScheduledTaskRecord> repository) {
_repository = repository;
Services = services;
_contentManager = contentManager;
Logger = NullLogger.Instance;
}
public IOrchardServices Services { get; set; }
public ILogger Logger { get; set; }
public void CreateTask(string action, DateTime scheduledUtc, ContentItem contentItem) {
@@ -39,7 +39,7 @@ namespace Orchard.Core.Scheduling.Services {
public IEnumerable<IScheduledTask> GetTasks(ContentItem contentItem) {
return _repository
.Fetch(x => x.ContentItemVersionRecord.ContentItemRecord == contentItem.Record)
.Select(x => new Task(Services.ContentManager, x))
.Select(x => new Task(_contentManager, x))
.Cast<IScheduledTask>()
.ToReadOnlyCollection();
}
@@ -50,7 +50,7 @@ namespace Orchard.Core.Scheduling.Services {
.Fetch(x => x.ContentItemVersionRecord.ContentItemRecord == contentItem.Record);
foreach (var task in tasks) {
if (predicate(new Task(Services.ContentManager, task))) {
if (predicate(new Task(_contentManager, task))) {
_repository.Delete(task);
}
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using Orchard.Events;
namespace Orchard.ContentManagement.Handlers {
public interface IContentHandler : IEvents {

View File

@@ -20,7 +20,9 @@ namespace Orchard.Tasks {
public ILogger Logger { get; set; }
public void Sweep() {
_tasks.Invoke(task => task.Sweep(), Logger);
foreach (var task in _tasks) {
task.Sweep();
}
}
}
}

View File

@@ -1,5 +1,7 @@
namespace Orchard.Tasks {
public interface IBackgroundTask : IEvents {
using Orchard.Events;
namespace Orchard.Tasks {
public interface IBackgroundTask : IEventHandler {
void Sweep();
}
}