< 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: 86
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%2280%

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>
 11public sealed class DailyTrigger : ITaskTrigger, IDisposable
 12{
 13    private readonly TimeSpan _timeOfDay;
 14    private Timer? _timer;
 15    private bool _disposed;
 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    {
 4224        _timeOfDay = timeOfDay;
 25        TaskOptions = taskOptions;
 4226    }
 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    {
 4237        DisposeTimer();
 38
 4239        var now = DateTime.Now;
 40
 4241        var triggerDate = now.TimeOfDay > _timeOfDay ? now.Date.AddDays(1) : now.Date;
 4242        triggerDate = triggerDate.Add(_timeOfDay);
 43
 4244        var dueTime = triggerDate - now;
 45
 4246        logger.LogInformation("Daily trigger for {Task} set to fire at {TriggerDate:yyyy-MM-dd HH:mm:ss.fff zzz}, which 
 47
 4248        _timer = new Timer(_ => OnTriggered(), null, dueTime, TimeSpan.FromMilliseconds(-1));
 4249    }
 50
 51    /// <inheritdoc />
 52    public void Stop()
 53    {
 8454        DisposeTimer();
 8455    }
 56
 57    /// <summary>
 58    /// Disposes the timer.
 59    /// </summary>
 60    private void DisposeTimer()
 61    {
 16862        _timer?.Dispose();
 16863        _timer = null;
 16864    }
 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    {
 4277        if (_disposed)
 78        {
 079            return;
 80        }
 81
 4282        DisposeTimer();
 83
 4284        _disposed = true;
 4285    }
 86}