using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Progress; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; namespace Emby.Server.Implementations.Channels { /// <summary> /// The "Refresh Channels" scheduled task. /// </summary> public class RefreshChannelsScheduledTask : IScheduledTask, IConfigurableScheduledTask { private readonly IChannelManager _channelManager; private readonly ILogger<RefreshChannelsScheduledTask> _logger; private readonly ILibraryManager _libraryManager; private readonly ILocalizationManager _localization; /// <summary> /// Initializes a new instance of the <see cref="RefreshChannelsScheduledTask"/> class. /// </summary> /// <param name="channelManager">The channel manager.</param> /// <param name="logger">The logger.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="localization">The localization manager.</param> public RefreshChannelsScheduledTask( IChannelManager channelManager, ILogger<RefreshChannelsScheduledTask> logger, ILibraryManager libraryManager, ILocalizationManager localization) { _channelManager = channelManager; _logger = logger; _libraryManager = libraryManager; _localization = localization; } /// <inheritdoc /> public string Name => _localization.GetLocalizedString("TasksRefreshChannels"); /// <inheritdoc /> public string Description => _localization.GetLocalizedString("TasksRefreshChannelsDescription"); /// <inheritdoc /> public string Category => _localization.GetLocalizedString("TasksChannelsCategory"); /// <inheritdoc /> public bool IsHidden => ((ChannelManager)_channelManager).Channels.Length == 0; /// <inheritdoc /> public bool IsEnabled => true; /// <inheritdoc /> public bool IsLogged => true; /// <inheritdoc /> public string Key => "RefreshInternetChannels"; /// <inheritdoc /> public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress) { var manager = (ChannelManager)_channelManager; await manager.RefreshChannels(new SimpleProgress<double>(), cancellationToken).ConfigureAwait(false); await new ChannelPostScanTask(_channelManager, _logger, _libraryManager).Run(progress, cancellationToken) .ConfigureAwait(false); } /// <inheritdoc /> public IEnumerable<TaskTriggerInfo> GetDefaultTriggers() { return new[] { // Every so often new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks } }; } } }