< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.ScheduledTasks.Tasks.DeleteTranscodeFileTask
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs
Line coverage
66%
Covered lines: 20
Uncovered lines: 10
Coverable lines: 30
Total lines: 124
Line coverage: 66.6%
Branch coverage
50%
Covered branches: 1
Total branches: 2
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%
get_Name()100%11100%
get_Description()100%210%
get_Category()100%210%
get_Key()100%11100%
get_IsHidden()100%210%
get_IsEnabled()100%11100%
get_IsLogged()100%210%
ExecuteAsync(...)100%11100%
DeleteTempFilesFromDirectory(...)50%2257.14%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Threading;
 5using System.Threading.Tasks;
 6using MediaBrowser.Common.Configuration;
 7using MediaBrowser.Controller.IO;
 8using MediaBrowser.Model.Globalization;
 9using MediaBrowser.Model.IO;
 10using MediaBrowser.Model.Tasks;
 11using Microsoft.Extensions.Logging;
 12
 13namespace Emby.Server.Implementations.ScheduledTasks.Tasks;
 14
 15/// <summary>
 16/// Deletes all transcoding temp files.
 17/// </summary>
 18public class DeleteTranscodeFileTask : IScheduledTask, IConfigurableScheduledTask
 19{
 20    private readonly ILogger<DeleteTranscodeFileTask> _logger;
 21    private readonly IConfigurationManager _configurationManager;
 22    private readonly IFileSystem _fileSystem;
 23    private readonly ILocalizationManager _localization;
 24
 25    /// <summary>
 26    /// Initializes a new instance of the <see cref="DeleteTranscodeFileTask"/> class.
 27    /// </summary>
 28    /// <param name="logger">Instance of the <see cref="ILogger{DeleteTranscodeFileTask}"/> interface.</param>
 29    /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
 30    /// <param name="configurationManager">Instance of the <see cref="IConfigurationManager"/> interface.</param>
 31    /// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
 32    public DeleteTranscodeFileTask(
 33        ILogger<DeleteTranscodeFileTask> logger,
 34        IFileSystem fileSystem,
 35        IConfigurationManager configurationManager,
 36        ILocalizationManager localization)
 37    {
 2138        _logger = logger;
 2139        _fileSystem = fileSystem;
 2140        _configurationManager = configurationManager;
 2141        _localization = localization;
 2142    }
 43
 44    /// <inheritdoc />
 5245    public string Name => _localization.GetLocalizedString("TaskCleanTranscode");
 46
 47    /// <inheritdoc />
 048    public string Description => _localization.GetLocalizedString("TaskCleanTranscodeDescription");
 49
 50    /// <inheritdoc />
 051    public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
 52
 53    /// <inheritdoc />
 254    public string Key => "DeleteTranscodeFiles";
 55
 56    /// <inheritdoc />
 057    public bool IsHidden => false;
 58
 59    /// <inheritdoc />
 260    public bool IsEnabled => true;
 61
 62    /// <inheritdoc />
 063    public bool IsLogged => true;
 64
 65    /// <inheritdoc />
 66    public IEnumerable<TaskTriggerInfo> GetDefaultTriggers()
 67    {
 68        yield return new TaskTriggerInfo
 69        {
 70            Type = TaskTriggerInfoType.StartupTrigger
 71        };
 72
 73        yield return new TaskTriggerInfo
 74        {
 75            Type = TaskTriggerInfoType.IntervalTrigger,
 76            IntervalTicks = TimeSpan.FromHours(24).Ticks
 77        };
 78    }
 79
 80    /// <inheritdoc />
 81    public Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken)
 82    {
 283        var minDateModified = DateTime.UtcNow.AddDays(-1);
 284        progress.Report(50);
 85
 286        DeleteTempFilesFromDirectory(_configurationManager.GetTranscodePath(), minDateModified, progress, cancellationTo
 87
 288        return Task.CompletedTask;
 89    }
 90
 91    /// <summary>
 92    /// Deletes the transcoded temp files from directory with a last write time less than a given date.
 93    /// </summary>
 94    /// <param name="directory">The directory.</param>
 95    /// <param name="minDateModified">The min date modified.</param>
 96    /// <param name="progress">The progress.</param>
 97    /// <param name="cancellationToken">The task cancellation token.</param>
 98    private void DeleteTempFilesFromDirectory(string directory, DateTime minDateModified, IProgress<double> progress, Ca
 99    {
 2100        var filesToDelete = _fileSystem.GetFiles(directory, true)
 2101            .Where(f => _fileSystem.GetLastWriteTimeUtc(f) < minDateModified)
 2102            .ToList();
 103
 2104        var index = 0;
 105
 4106        foreach (var file in filesToDelete)
 107        {
 0108            double percent = index;
 0109            percent /= filesToDelete.Count;
 110
 0111            progress.Report(100 * percent);
 112
 0113            cancellationToken.ThrowIfCancellationRequested();
 114
 0115            FileSystemHelper.DeleteFile(_fileSystem, file.FullName, _logger);
 116
 0117            index++;
 118        }
 119
 2120        FileSystemHelper.DeleteEmptyFolders(_fileSystem, directory, _logger);
 121
 2122        progress.Report(100);
 2123    }
 124}