aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Tasks
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model/Tasks')
-rw-r--r--MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs18
-rw-r--r--MediaBrowser.Model/Tasks/IScheduledTask.cs47
-rw-r--r--MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs76
-rw-r--r--MediaBrowser.Model/Tasks/ITaskManager.cs80
-rw-r--r--MediaBrowser.Model/Tasks/ITaskTrigger.cs35
-rw-r--r--MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs52
-rw-r--r--MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs11
-rw-r--r--MediaBrowser.Model/Tasks/TaskExecutionOptions.cs11
-rw-r--r--MediaBrowser.Model/Tasks/TaskTriggerInfo.cs6
9 files changed, 336 insertions, 0 deletions
diff --git a/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs b/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs
new file mode 100644
index 0000000000..ed981a905b
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs
@@ -0,0 +1,18 @@
+namespace MediaBrowser.Model.Tasks
+{
+ public interface IConfigurableScheduledTask
+ {
+ /// <summary>
+ /// Gets a value indicating whether this instance is hidden.
+ /// </summary>
+ /// <value><c>true</c> if this instance is hidden; otherwise, <c>false</c>.</value>
+ bool IsHidden { get; }
+ /// <summary>
+ /// Gets a value indicating whether this instance is enabled.
+ /// </summary>
+ /// <value><c>true</c> if this instance is enabled; otherwise, <c>false</c>.</value>
+ bool IsEnabled { get; }
+
+ bool IsLogged { get; }
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Model/Tasks/IScheduledTask.cs b/MediaBrowser.Model/Tasks/IScheduledTask.cs
new file mode 100644
index 0000000000..81ba239ad8
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/IScheduledTask.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Model.Tasks
+{
+ /// <summary>
+ /// Interface IScheduledTaskWorker
+ /// </summary>
+ public interface IScheduledTask
+ {
+ /// <summary>
+ /// Gets the name of the task
+ /// </summary>
+ /// <value>The name.</value>
+ string Name { get; }
+
+ string Key { get; }
+
+ /// <summary>
+ /// Gets the description.
+ /// </summary>
+ /// <value>The description.</value>
+ string Description { get; }
+
+ /// <summary>
+ /// Gets the category.
+ /// </summary>
+ /// <value>The category.</value>
+ string Category { get; }
+
+ /// <summary>
+ /// Executes the task
+ /// </summary>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <param name="progress">The progress.</param>
+ /// <returns>Task.</returns>
+ Task Execute(CancellationToken cancellationToken, IProgress<double> progress);
+
+ /// <summary>
+ /// Gets the default triggers.
+ /// </summary>
+ /// <returns>IEnumerable{BaseTaskTrigger}.</returns>
+ IEnumerable<TaskTriggerInfo> GetDefaultTriggers();
+ }
+}
diff --git a/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs b/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs
new file mode 100644
index 0000000000..415207f8f0
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs
@@ -0,0 +1,76 @@
+using System;
+using MediaBrowser.Model.Events;
+
+namespace MediaBrowser.Model.Tasks
+{
+ /// <summary>
+ /// Interface IScheduledTaskWorker
+ /// </summary>
+ public interface IScheduledTaskWorker : IDisposable
+ {
+ /// <summary>
+ /// Occurs when [task progress].
+ /// </summary>
+ event EventHandler<GenericEventArgs<double>> TaskProgress;
+
+ /// <summary>
+ /// Gets or sets the scheduled task.
+ /// </summary>
+ /// <value>The scheduled task.</value>
+ IScheduledTask ScheduledTask { get; }
+
+ /// <summary>
+ /// Gets the last execution result.
+ /// </summary>
+ /// <value>The last execution result.</value>
+ TaskResult LastExecutionResult { get; }
+
+ /// <summary>
+ /// Gets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ string Name { get; }
+
+ /// <summary>
+ /// Gets the description.
+ /// </summary>
+ /// <value>The description.</value>
+ string Description { get; }
+
+ /// <summary>
+ /// Gets the category.
+ /// </summary>
+ /// <value>The category.</value>
+ string Category { get; }
+
+ /// <summary>
+ /// Gets the state.
+ /// </summary>
+ /// <value>The state.</value>
+ TaskState State { get; }
+
+ /// <summary>
+ /// Gets the current progress.
+ /// </summary>
+ /// <value>The current progress.</value>
+ double? CurrentProgress { get; }
+
+ /// <summary>
+ /// Gets the triggers that define when the task will run
+ /// </summary>
+ /// <value>The triggers.</value>
+ /// <exception cref="ArgumentNullException">value</exception>
+ TaskTriggerInfo[] Triggers { get; set; }
+
+ /// <summary>
+ /// Gets the unique id.
+ /// </summary>
+ /// <value>The unique id.</value>
+ string Id { get; }
+
+ /// <summary>
+ /// Reloads the trigger events.
+ /// </summary>
+ void ReloadTriggerEvents();
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Model/Tasks/ITaskManager.cs b/MediaBrowser.Model/Tasks/ITaskManager.cs
new file mode 100644
index 0000000000..b6f847febb
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/ITaskManager.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using MediaBrowser.Model.Events;
+
+namespace MediaBrowser.Model.Tasks
+{
+ public interface ITaskManager : IDisposable
+ {
+ /// <summary>
+ /// Gets the list of Scheduled Tasks
+ /// </summary>
+ /// <value>The scheduled tasks.</value>
+ IScheduledTaskWorker[] ScheduledTasks { get; }
+
+ /// <summary>
+ /// Cancels if running and queue.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="options">Task options.</param>
+ void CancelIfRunningAndQueue<T>(TaskExecutionOptions options)
+ where T : IScheduledTask;
+
+ /// <summary>
+ /// Cancels if running and queue.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void CancelIfRunningAndQueue<T>()
+ where T : IScheduledTask;
+
+ /// <summary>
+ /// Cancels if running.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void CancelIfRunning<T>()
+ where T : IScheduledTask;
+
+ /// <summary>
+ /// Queues the scheduled task.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="options">Task options.</param>
+ void QueueScheduledTask<T>(TaskExecutionOptions options)
+ where T : IScheduledTask;
+
+ /// <summary>
+ /// Queues the scheduled task.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ void QueueScheduledTask<T>()
+ where T : IScheduledTask;
+
+ void QueueIfNotRunning<T>()
+ where T : IScheduledTask;
+
+ /// <summary>
+ /// Queues the scheduled task.
+ /// </summary>
+ /// <param name="task">The task.</param>
+ /// <param name="options">The task run options.</param>
+ void QueueScheduledTask(IScheduledTask task, TaskExecutionOptions options = null);
+
+ /// <summary>
+ /// Adds the tasks.
+ /// </summary>
+ /// <param name="tasks">The tasks.</param>
+ void AddTasks(IEnumerable<IScheduledTask> tasks);
+
+ void Cancel(IScheduledTaskWorker task);
+ Task Execute(IScheduledTaskWorker task, TaskExecutionOptions options = null);
+
+ void Execute<T>()
+ where T : IScheduledTask;
+
+ event EventHandler<GenericEventArgs<IScheduledTaskWorker>> TaskExecuting;
+ event EventHandler<TaskCompletionEventArgs> TaskCompleted;
+
+ bool SuspendTriggers { get; set; }
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Model/Tasks/ITaskTrigger.cs b/MediaBrowser.Model/Tasks/ITaskTrigger.cs
new file mode 100644
index 0000000000..3beca569cc
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/ITaskTrigger.cs
@@ -0,0 +1,35 @@
+using System;
+using MediaBrowser.Model.Events;
+using MediaBrowser.Model.Logging;
+
+namespace MediaBrowser.Model.Tasks
+{
+ /// <summary>
+ /// Interface ITaskTrigger
+ /// </summary>
+ public interface ITaskTrigger
+ {
+ /// <summary>
+ /// Fires when the trigger condition is satisfied and the task should run
+ /// </summary>
+ event EventHandler<GenericEventArgs<TaskExecutionOptions>> Triggered;
+
+ /// <summary>
+ /// Stars waiting for the trigger action
+ /// </summary>
+ void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup);
+
+ /// <summary>
+ /// Stops waiting for the trigger action
+ /// </summary>
+ void Stop();
+
+ /// <summary>
+ /// Gets or sets the execution properties of this task.
+ /// </summary>
+ /// <value>
+ /// The execution properties of this task.
+ /// </value>
+ TaskExecutionOptions TaskOptions { get; set; }
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs b/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs
new file mode 100644
index 0000000000..66f5294e7c
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Linq;
+
+namespace MediaBrowser.Model.Tasks
+{
+ /// <summary>
+ /// Class ScheduledTaskHelpers
+ /// </summary>
+ public static class ScheduledTaskHelpers
+ {
+ /// <summary>
+ /// Gets the task info.
+ /// </summary>
+ /// <param name="task">The task.</param>
+ /// <returns>TaskInfo.</returns>
+ public static TaskInfo GetTaskInfo(IScheduledTaskWorker task)
+ {
+ var isHidden = false;
+
+ var configurableTask = task.ScheduledTask as IConfigurableScheduledTask;
+
+ if (configurableTask != null)
+ {
+ isHidden = configurableTask.IsHidden;
+ }
+
+ string key = task.ScheduledTask.Key;
+
+ var triggers = task.Triggers
+ .OrderBy(i => i.Type)
+ .ThenBy(i => i.DayOfWeek ?? DayOfWeek.Sunday)
+ .ThenBy(i => i.TimeOfDayTicks ?? 0)
+ .ToList();
+
+ return new TaskInfo
+ {
+ Name = task.Name,
+ CurrentProgressPercentage = task.CurrentProgress,
+ State = task.State,
+ Id = task.Id,
+ LastExecutionResult = task.LastExecutionResult,
+
+ Triggers = triggers,
+
+ Description = task.Description,
+ Category = task.Category,
+ IsHidden = isHidden,
+ Key = key
+ };
+ }
+ }
+}
diff --git a/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs b/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs
new file mode 100644
index 0000000000..be9eaa613d
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace MediaBrowser.Model.Tasks
+{
+ public class TaskCompletionEventArgs : EventArgs
+ {
+ public IScheduledTaskWorker Task { get; set; }
+
+ public TaskResult Result { get; set; }
+ }
+}
diff --git a/MediaBrowser.Model/Tasks/TaskExecutionOptions.cs b/MediaBrowser.Model/Tasks/TaskExecutionOptions.cs
new file mode 100644
index 0000000000..faba35b222
--- /dev/null
+++ b/MediaBrowser.Model/Tasks/TaskExecutionOptions.cs
@@ -0,0 +1,11 @@
+
+namespace MediaBrowser.Model.Tasks
+{
+ /// <summary>
+ /// A class that encomposases all common task run properties.
+ /// </summary>
+ public class TaskExecutionOptions
+ {
+ public int? MaxRuntimeMs { get; set; }
+ }
+}
diff --git a/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs b/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs
index aacd56e655..69578c41d0 100644
--- a/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs
+++ b/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs
@@ -42,5 +42,11 @@ namespace MediaBrowser.Model.Tasks
/// </summary>
/// <value>The maximum runtime ms.</value>
public int? MaxRuntimeMs { get; set; }
+
+ public const string TriggerDaily = "DailyTrigger";
+ public const string TriggerWeekly = "WeeklyTrigger";
+ public const string TriggerInterval = "IntervalTrigger";
+ public const string TriggerSystemEvent = "SystemEventTrigger";
+ public const string TriggerStartup = "StartupTrigger";
}
}