mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-12-02 11:44:41 +08:00
- Moving scheduled tasks to use IEventHandler.
--HG-- branch : dev
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using Autofac;
|
||||
using Autofac.Builder;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Tasks;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Events;
|
||||
|
||||
namespace Orchard.ContentManagement.Handlers {
|
||||
public interface IContentHandler : IEvents {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
namespace Orchard.Tasks {
|
||||
public interface IBackgroundTask : IEvents {
|
||||
using Orchard.Events;
|
||||
|
||||
namespace Orchard.Tasks {
|
||||
public interface IBackgroundTask : IEventHandler {
|
||||
void Sweep();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user