< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.ScheduledTasks.Triggers.DailyTrigger
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/ScheduledTasks/Triggers/DailyTrigger.cs
Line coverage
86%
Covered lines: 19
Uncovered lines: 3
Coverable lines: 22
Total lines: 87
Line coverage: 86.3%
Branch coverage
50%
Covered branches: 4
Total branches: 8
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Start(...)50%22100%
Stop()100%11100%
DisposeTimer()100%22100%
OnTriggered()0%620%
Dispose()50%2.03280%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/ScheduledTasks/Triggers/DailyTrigger.cs

#LineLine coverage
 1using System;
 2using System.Threading;
 3using MediaBrowser.Model.Tasks;
 4using Microsoft.Extensions.Logging;
 5
 6namespace Emby.Server.Implementations.ScheduledTasks.Triggers
 7{
 8    /// <summary>
 9    /// Represents a task trigger that fires everyday.
 10    /// </summary>
 11    public sealed class DailyTrigger : ITaskTrigger, IDisposable
 12    {
 13        private readonly TimeSpan _timeOfDay;
 14        private Timer? _timer;
 15        private bool _disposed = false;
 16
 17        /// <summary>
 18        /// Initializes a new instance of the <see cref="DailyTrigger"/> class.
 19        /// </summary>
 20        /// <param name="timeofDay">The time of day to trigger the task to run.</param>
 21        /// <param name="taskOptions">The options of this task.</param>
 22        public DailyTrigger(TimeSpan timeofDay, TaskOptions taskOptions)
 23        {
 4424            _timeOfDay = timeofDay;
 25            TaskOptions = taskOptions;
 4426        }
 27
 28        /// <inheritdoc />
 29        public event EventHandler<EventArgs>? Triggered;
 30
 31        /// <inheritdoc />
 32        public TaskOptions TaskOptions { get; }
 33
 34        /// <inheritdoc />
 35        public void Start(TaskResult? lastResult, ILogger logger, string taskName, bool isApplicationStartup)
 36        {
 4437            DisposeTimer();
 38
 4439            var now = DateTime.Now;
 40
 4441            var triggerDate = now.TimeOfDay > _timeOfDay ? now.Date.AddDays(1) : now.Date;
 4442            triggerDate = triggerDate.Add(_timeOfDay);
 43
 4444            var dueTime = triggerDate - now;
 45
 4446            logger.LogInformation("Daily trigger for {Task} set to fire at {TriggerDate:yyyy-MM-dd HH:mm:ss.fff zzz}, wh
 47
 4448            _timer = new Timer(_ => OnTriggered(), null, dueTime, TimeSpan.FromMilliseconds(-1));
 4449        }
 50
 51        /// <inheritdoc />
 52        public void Stop()
 53        {
 8854            DisposeTimer();
 8855        }
 56
 57        /// <summary>
 58        /// Disposes the timer.
 59        /// </summary>
 60        private void DisposeTimer()
 61        {
 17662            _timer?.Dispose();
 17663            _timer = null;
 17664        }
 65
 66        /// <summary>
 67        /// Called when [triggered].
 68        /// </summary>
 69        private void OnTriggered()
 70        {
 071            Triggered?.Invoke(this, EventArgs.Empty);
 072        }
 73
 74        /// <inheritdoc />
 75        public void Dispose()
 76        {
 4477            if (_disposed)
 78            {
 079                return;
 80            }
 81
 4482            DisposeTimer();
 83
 4484            _disposed = true;
 4485        }
 86    }
 87}