コード例 #1
0
        /// <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
            });
        }
コード例 #2
0
        /// <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;

            return(new TaskInfo
            {
                Name = task.Name,
                CurrentProgressPercentage = task.CurrentProgress,
                State = task.State,
                Id = task.Id,
                LastExecutionResult = task.LastExecutionResult,

                Triggers = task.Triggers,

                Description = task.Description,
                Category = task.Category,
                IsHidden = isHidden,
                Key = key
            });
        }
コード例 #3
0
 /// <summary>
 /// Called when [task executing].
 /// </summary>
 /// <param name="task">The task.</param>
 internal void OnTaskExecuting(IScheduledTaskWorker task)
 {
     TaskExecuting?.Invoke(this, new GenericEventArgs <IScheduledTaskWorker>
     {
         Argument = task
     });
 }
コード例 #4
0
        /// <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 = null;

            var hasKey = task.ScheduledTask as IHasKey;

            if (hasKey != null)
            {
                key = hasKey.Key;
            }
            return new TaskInfo
            {
                Name = task.Name,
                CurrentProgressPercentage = task.CurrentProgress,
                State = task.State,
                Id = task.Id,
                LastExecutionResult = task.LastExecutionResult,
                Triggers = task.Triggers.Select(GetTriggerInfo).ToList(),
                Description = task.Description,
                Category = task.Category,
                IsHidden = isHidden,
                Key = key
            };
        }
コード例 #5
0
 /// <summary>
 /// Called when [task executing].
 /// </summary>
 /// <param name="task">The task.</param>
 internal void OnTaskExecuting(IScheduledTaskWorker task)
 {
     EventHelper.FireEventIfNotNull(TaskExecuting, this, new GenericEventArgs <IScheduledTaskWorker>
     {
         Argument = task
     }, Logger);
 }
コード例 #6
0
        /// <summary>
        /// Queues the scheduled task.
        /// </summary>
        /// <param name="task">The task.</param>
        /// <param name="options">The task options.</param>
        private void QueueScheduledTask(IScheduledTaskWorker task, TaskExecutionOptions options)
        {
            var type = task.ScheduledTask.GetType();

            lock (_taskQueue)
            {
                // If it's idle just execute immediately
                if (task.State == TaskState.Idle)
                {
                    Execute(task, options);
                    return;
                }

                if (!_taskQueue.ContainsKey(type))
                {
                    Logger.Info("Queueing task {0}", type.Name);
                    _taskQueue.Add(type, options);
                }
                else
                {
                    _taskQueue[type] = options;
                    Logger.Info("Task already queued: {0}", type.Name);
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TaskManager" /> class.
        /// </summary>
        /// <param name="applicationPaths">The application paths.</param>
        /// <param name="jsonSerializer">The json serializer.</param>
        /// <param name="logger">The logger.</param>
        /// <exception cref="System.ArgumentException">kernel</exception>
        public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger)
        {
            ApplicationPaths = applicationPaths;
            JsonSerializer   = jsonSerializer;
            Logger           = logger;

            ScheduledTasks = new IScheduledTaskWorker[] { };
        }
コード例 #8
0
        /// <summary>
        /// Called when [task completed].
        /// </summary>
        /// <param name="task">The task.</param>
        /// <param name="result">The result.</param>
        internal void OnTaskCompleted(IScheduledTaskWorker task, TaskResult result)
        {
            EventHelper.FireEventIfNotNull(TaskCompleted, task, new TaskCompletionEventArgs
            {
                Result = result,
                Task   = task
            }, Logger);

            ExecuteQueuedTasks();
        }
コード例 #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TaskManager" /> class.
        /// </summary>
        /// <param name="applicationPaths">The application paths.</param>
        /// <param name="jsonSerializer">The json serializer.</param>
        /// <param name="logger">The logger.</param>
        /// <exception cref="System.ArgumentException">kernel</exception>
        public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IFileSystem fileSystem, ISystemEvents systemEvents)
        {
            ApplicationPaths = applicationPaths;
            JsonSerializer   = jsonSerializer;
            Logger           = logger;
            _fileSystem      = fileSystem;
            _systemEvents    = systemEvents;

            ScheduledTasks = new IScheduledTaskWorker[] { };
        }
コード例 #10
0
        /// <summary>
        /// Called when [task completed].
        /// </summary>
        /// <param name="task">The task.</param>
        /// <param name="result">The result.</param>
        internal void OnTaskCompleted(IScheduledTaskWorker task, TaskResult result)
        {
            TaskCompleted?.Invoke(task, new TaskCompletionEventArgs
            {
                Result = result,
                Task   = task
            });

            ExecuteQueuedTasks();
        }
コード例 #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TaskManager" /> class.
        /// </summary>
        /// <param name="applicationPaths">The application paths.</param>
        /// <param name="jsonSerializer">The json serializer.</param>
        /// <param name="logger">The logger.</param>
        /// <exception cref="System.ArgumentException">kernel</exception>
        public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IFileSystem fileSystem)
        {
            ApplicationPaths = applicationPaths;
            JsonSerializer   = jsonSerializer;
            Logger           = logger;
            _fileSystem      = fileSystem;

            ScheduledTasks = new IScheduledTaskWorker[] { };

            BindToSystemEvent();
        }
コード例 #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TaskManager" /> class.
        /// </summary>
        /// <param name="applicationPaths">The application paths.</param>
        /// <param name="jsonSerializer">The json serializer.</param>
        /// <param name="loggerFactory">The logger factory.</param>
        /// <exception cref="System.ArgumentException">kernel</exception>
        public TaskManager(
            IApplicationPaths applicationPaths,
            IJsonSerializer jsonSerializer,
            ILoggerFactory loggerFactory,
            IFileSystem fileSystem)
        {
            ApplicationPaths = applicationPaths;
            JsonSerializer   = jsonSerializer;
            Logger           = loggerFactory.CreateLogger(nameof(TaskManager));
            _fileSystem      = fileSystem;

            ScheduledTasks = new IScheduledTaskWorker[] { };
        }
コード例 #13
0
 /// <summary>
 /// Gets the task info.
 /// </summary>
 /// <param name="task">The task.</param>
 /// <returns>TaskInfo.</returns>
 public static TaskInfo GetTaskInfo(IScheduledTaskWorker task)
 {
     return(new TaskInfo
     {
         Name = task.Name,
         CurrentProgressPercentage = task.CurrentProgress,
         State = task.State,
         Id = task.Id,
         LastExecutionResult = task.LastExecutionResult,
         Triggers = task.Triggers.Select(GetTriggerInfo).ToList(),
         Description = task.Description,
         Category = task.Category
     });
 }
コード例 #14
0
 /// <summary>
 /// Gets the task info.
 /// </summary>
 /// <param name="task">The task.</param>
 /// <returns>TaskInfo.</returns>
 public static TaskInfo GetTaskInfo(IScheduledTaskWorker task)
 {
     return new TaskInfo
     {
         Name = task.Name,
         CurrentProgressPercentage = task.CurrentProgress,
         State = task.State,
         Id = task.Id,
         LastExecutionResult = task.LastExecutionResult,
         Triggers = task.Triggers.Select(GetTriggerInfo).ToList(),
         Description = task.Description,
         Category = task.Category
     };
 }
コード例 #15
0
ファイル: TaskManager.cs プロジェクト: thornbill/jellyfin
        private void QueueScheduledTask(IScheduledTaskWorker task, TaskOptions options)
        {
            var type = task.ScheduledTask.GetType();

            _logger.LogInformation("Queuing task {0}", type.Name);

            lock (_taskQueue)
            {
                if (task.State == TaskState.Idle)
                {
                    Execute(task, options);
                    return;
                }

                _taskQueue.Enqueue(new Tuple <Type, TaskOptions>(type, options));
            }
        }
コード例 #16
0
        /// <summary>
        /// Queues the scheduled task.
        /// </summary>
        /// <param name="task">The task.</param>
        /// <param name="options">The task options.</param>
        private void QueueScheduledTask(IScheduledTaskWorker task, TaskExecutionOptions options)
        {
            var type = task.ScheduledTask.GetType();

            Logger.Info("Queueing task {0}", type.Name);

            lock (_taskQueue)
            {
                if (task.State == TaskState.Idle && !SuspendTriggers)
                {
                    Execute(task, options);
                    return;
                }

                _taskQueue.Enqueue(new Tuple <Type, TaskExecutionOptions>(type, options));
            }
        }
コード例 #17
0
ファイル: TaskManager.cs プロジェクト: yardameus/MediaBrowser
        /// <summary>
        /// Queues the scheduled task.
        /// </summary>
        /// <param name="task">The task.</param>
        private void QueueScheduledTask(IScheduledTaskWorker task)
        {
            var type = task.ScheduledTask.GetType();

            lock (_taskQueue)
            {
                // If it's idle just execute immediately
                if (task.State == TaskState.Idle)
                {
                    ((ScheduledTaskWorker)task).Execute();
                    return;
                }

                if (!_taskQueue.Contains(type))
                {
                    Logger.Info("Queueing task {0}", type.Name);
                    _taskQueue.Add(type);
                }
                else
                {
                    Logger.Info("Task already queued: {0}", type.Name);
                }
            }
        }
コード例 #18
0
ファイル: TaskManager.cs プロジェクト: thornbill/jellyfin
 public Task Execute(IScheduledTaskWorker task, TaskOptions options)
 {
     return(((ScheduledTaskWorker)task).Execute(options));
 }
コード例 #19
0
ファイル: TaskManager.cs プロジェクト: thornbill/jellyfin
 public void Cancel(IScheduledTaskWorker task)
 {
     ((ScheduledTaskWorker)task).Cancel();
 }
コード例 #20
0
 public Task Execute(IScheduledTaskWorker task)
 {
     return(((ScheduledTaskWorker)task).Execute());
 }
コード例 #21
0
 public TaskCompletionEventArgs(IScheduledTaskWorker task, TaskResult result)
 {
     Task   = task;
     Result = result;
 }