diff --git a/MediaBrowser.Api/Dlna/DlnaServerService.cs b/MediaBrowser.Api/Dlna/DlnaServerService.cs index b2c7e5532a..da3e3bad4c 100644 --- a/MediaBrowser.Api/Dlna/DlnaServerService.cs +++ b/MediaBrowser.Api/Dlna/DlnaServerService.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Api.Dlna { diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs index d2da2ee846..287b87f776 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs @@ -198,17 +198,13 @@ namespace MediaBrowser.Api.ScheduledTasks throw new ResourceNotFoundException("Task not found"); } - var hasKey = task.ScheduledTask as IHasKey; - if (hasKey != null) + if (string.Equals(task.ScheduledTask.Key, "SystemUpdateTask", StringComparison.OrdinalIgnoreCase)) { - if (string.Equals(hasKey.Key, "SystemUpdateTask", StringComparison.OrdinalIgnoreCase)) + // This is a hack for now just to get the update application function to work when auto-update is disabled + if (!_config.Configuration.EnableAutoUpdate) { - // This is a hack for now just to get the update application function to work when auto-update is disabled - if (!_config.Configuration.EnableAutoUpdate) - { - _config.Configuration.EnableAutoUpdate = true; - _config.SaveConfiguration(); - } + _config.Configuration.EnableAutoUpdate = true; + _config.SaveConfiguration(); } } @@ -252,7 +248,7 @@ namespace MediaBrowser.Api.ScheduledTasks var triggerInfos = request; - task.Triggers = triggerInfos.Select(ScheduledTaskHelpers.GetTrigger); + task.Triggers = triggerInfos.ToArray(); } } } diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index e68fee829d..b1e6a04533 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -26,11 +26,16 @@ using System.IO; using System.Linq; using System.Net; using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Implementations.Cryptography; using MediaBrowser.Common.IO; +using MediaBrowser.Model.Cryptography; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Common.Implementations { @@ -67,7 +72,7 @@ namespace MediaBrowser.Common.Implementations /// Gets or sets the plugins. /// /// The plugins. - public IEnumerable Plugins { get; protected set; } + public IPlugin[] Plugins { get; protected set; } /// /// Gets or sets the log manager. @@ -174,6 +179,8 @@ namespace MediaBrowser.Common.Implementations /// true if this instance is running as service; otherwise, false. public abstract bool IsRunningAsService { get; } + protected ICryptographyProvider CryptographyProvider = new CryptographyProvider(); + private DeviceId _deviceId; public string SystemId { @@ -202,7 +209,10 @@ namespace MediaBrowser.Common.Implementations ILogManager logManager, IFileSystem fileSystem) { - XmlSerializer = new XmlSerializer (fileSystem, logManager.GetLogger("XmlSerializer")); + // hack alert, until common can target .net core + BaseExtensions.CryptographyProvider = CryptographyProvider; + + XmlSerializer = new XmlSerializer (fileSystem, logManager.GetLogger("XmlSerializer")); FailedAssemblies = new List(); ApplicationPaths = applicationPaths; @@ -430,7 +440,28 @@ namespace MediaBrowser.Common.Implementations RegisterModules(); ConfigurationManager.AddParts(GetExports()); - Plugins = GetExports(); + Plugins = GetExports().Select(LoadPlugin).Where(i => i != null).ToArray(); + } + + private IPlugin LoadPlugin(IPlugin plugin) + { + var assemblyPlugin = plugin as IPluginAssembly; + + if (assemblyPlugin != null) + { + var assembly = plugin.GetType().Assembly; + var assemblyName = assembly.GetName(); + + var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]; + var assemblyId = new Guid(attribute.Value); + + var assemblyFileName = assemblyName.Name + ".dll"; + var assemblyFilePath = Path.Combine(ApplicationPaths.PluginsPath, assemblyFileName); + + assemblyPlugin.SetAttributes(assemblyFilePath, assemblyFileName, assemblyName.Version, assemblyId); + } + + return plugin; } /// @@ -747,7 +778,7 @@ namespace MediaBrowser.Common.Implementations { var list = Plugins.ToList(); list.Remove(plugin); - Plugins = list; + Plugins = list.ToArray(); } /// diff --git a/MediaBrowser.Common.Implementations/Cryptography/CryptographyProvider.cs b/MediaBrowser.Common.Implementations/Cryptography/CryptographyProvider.cs new file mode 100644 index 0000000000..81cbaa3aae --- /dev/null +++ b/MediaBrowser.Common.Implementations/Cryptography/CryptographyProvider.cs @@ -0,0 +1,18 @@ +using System; +using System.Security.Cryptography; +using System.Text; +using MediaBrowser.Model.Cryptography; + +namespace MediaBrowser.Common.Implementations.Cryptography +{ + public class CryptographyProvider : ICryptographyProvider + { + public Guid GetMD5(string str) + { + using (var provider = MD5.Create()) + { + return new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(str))); + } + } + } +} diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index 063529cfc8..bad8c5ce5d 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -18,6 +18,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Common.Implementations.HttpClientManager { diff --git a/MediaBrowser.Common.Implementations/IO/MemoryStreamProvider.cs b/MediaBrowser.Common.Implementations/IO/MemoryStreamProvider.cs index c429474816..cc3bf07884 100644 --- a/MediaBrowser.Common.Implementations/IO/MemoryStreamProvider.cs +++ b/MediaBrowser.Common.Implementations/IO/MemoryStreamProvider.cs @@ -1,5 +1,6 @@ using System.IO; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; using Microsoft.IO; namespace MediaBrowser.Common.Implementations.IO diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index ebe9ac5c4b..44e4f88bdd 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -91,6 +91,7 @@ + @@ -101,11 +102,16 @@ + + + + + diff --git a/MediaBrowser.Common/ScheduledTasks/DailyTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/DailyTrigger.cs similarity index 100% rename from MediaBrowser.Common/ScheduledTasks/DailyTrigger.cs rename to MediaBrowser.Common.Implementations/ScheduledTasks/DailyTrigger.cs diff --git a/MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/IntervalTrigger.cs similarity index 100% rename from MediaBrowser.Common/ScheduledTasks/IntervalTrigger.cs rename to MediaBrowser.Common.Implementations/ScheduledTasks/IntervalTrigger.cs diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs index ced85780f8..f3ed95c812 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs @@ -232,13 +232,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// /// The _triggers /// - private List _triggers; + private Tuple[] _triggers; /// /// Gets the triggers that define when the task will run /// /// The triggers. - /// value - public IEnumerable Triggers + private Tuple[] InternalTriggers { get { @@ -257,11 +256,33 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks DisposeTriggers(); } - _triggers = value.ToList(); + _triggers = value.ToArray(); ReloadTriggerEvents(false); + } + } - SaveTriggers(_triggers); + /// + /// Gets the triggers that define when the task will run + /// + /// The triggers. + /// value + public TaskTriggerInfo[] Triggers + { + get + { + return InternalTriggers.Select(i => i.Item1).ToArray(); + } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + + SaveTriggers(value); + + InternalTriggers = value.Select(i => new Tuple(i, GetTrigger(i))).ToArray(); } } @@ -304,8 +325,10 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// if set to true [is application startup]. private void ReloadTriggerEvents(bool isApplicationStartup) { - foreach (var trigger in Triggers) + foreach (var triggerInfo in InternalTriggers) { + var trigger = triggerInfo.Item2; + trigger.Stop(); trigger.Triggered -= trigger_Triggered; @@ -507,23 +530,29 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// Loads the triggers. /// /// IEnumerable{BaseTaskTrigger}. - private List LoadTriggers() + private Tuple[] LoadTriggers() + { + var settings = LoadTriggerSettings(); + + return settings.Select(i => new Tuple(i, GetTrigger(i))).ToArray(); + } + + private TaskTriggerInfo[] LoadTriggerSettings() { try { return JsonSerializer.DeserializeFromFile>(GetConfigurationFilePath()) - .Select(ScheduledTaskHelpers.GetTrigger) - .ToList(); + .ToArray(); } catch (FileNotFoundException) { // File doesn't exist. No biggie. Return defaults. - return ScheduledTask.GetDefaultTriggers().ToList(); + return ScheduledTask.GetDefaultTriggers().ToArray(); } catch (DirectoryNotFoundException) { // File doesn't exist. No biggie. Return defaults. - return ScheduledTask.GetDefaultTriggers().ToList(); + return ScheduledTask.GetDefaultTriggers().ToArray(); } } @@ -531,13 +560,13 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// Saves the triggers. /// /// The triggers. - private void SaveTriggers(IEnumerable triggers) + private void SaveTriggers(TaskTriggerInfo[] triggers) { var path = GetConfigurationFilePath(); _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); - JsonSerializer.SerializeToFile(triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), path); + JsonSerializer.SerializeToFile(triggers, path); } /// @@ -561,11 +590,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks Id = Id }; - var hasKey = ScheduledTask as IHasKey; - if (hasKey != null) - { - result.Key = hasKey.Key; - } + result.Key = ScheduledTask.Key; if (ex != null) { @@ -655,13 +680,98 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks } } + /// + /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger + /// + /// The info. + /// BaseTaskTrigger. + /// + /// Invalid trigger type: + info.Type + public static ITaskTrigger GetTrigger(TaskTriggerInfo info) + { + var options = new TaskExecutionOptions + { + MaxRuntimeMs = info.MaxRuntimeMs + }; + + if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.TimeOfDayTicks.HasValue) + { + throw new ArgumentNullException(); + } + + return new DailyTrigger + { + TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(WeeklyTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.TimeOfDayTicks.HasValue) + { + throw new ArgumentNullException(); + } + + if (!info.DayOfWeek.HasValue) + { + throw new ArgumentNullException(); + } + + return new WeeklyTrigger + { + TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), + DayOfWeek = info.DayOfWeek.Value, + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(IntervalTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.IntervalTicks.HasValue) + { + throw new ArgumentNullException(); + } + + return new IntervalTrigger + { + Interval = TimeSpan.FromTicks(info.IntervalTicks.Value), + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.SystemEvent.HasValue) + { + throw new ArgumentNullException(); + } + + return new SystemEventTrigger + { + SystemEvent = info.SystemEvent.Value, + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + return new StartupTrigger(); + } + + throw new ArgumentException("Unrecognized trigger type: " + info.Type); + } + /// /// Disposes each trigger /// private void DisposeTriggers() { - foreach (var trigger in Triggers) + foreach (var triggerInfo in InternalTriggers) { + var trigger = triggerInfo.Item2; trigger.Triggered -= trigger_Triggered; trigger.Stop(); } diff --git a/MediaBrowser.Common/ScheduledTasks/StartupTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/StartupTrigger.cs similarity index 100% rename from MediaBrowser.Common/ScheduledTasks/StartupTrigger.cs rename to MediaBrowser.Common.Implementations/ScheduledTasks/StartupTrigger.cs diff --git a/MediaBrowser.Common/ScheduledTasks/SystemEventTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/SystemEventTrigger.cs similarity index 100% rename from MediaBrowser.Common/ScheduledTasks/SystemEventTrigger.cs rename to MediaBrowser.Common.Implementations/ScheduledTasks/SystemEventTrigger.cs diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs index 0a2b9222a0..3d07047812 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks { @@ -40,13 +41,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks /// Creates the triggers that define when the task will run /// /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - // Until we can vary these default triggers per server and MBT, we need something that makes sense for both - return new ITaskTrigger[] { + return new[] { // Every so often - new IntervalTrigger { Interval = TimeSpan.FromHours(24)} + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} }; } @@ -95,7 +95,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks /// The progress. private void DeleteCacheFilesFromDirectory(CancellationToken cancellationToken, string directory, DateTime minDateModified, IProgress progress) { - var filesToDelete = _fileSystem.GetFiles(directory, true) + var filesToDelete = _fileSystem.GetFiles(directory, true) .Where(f => _fileSystem.GetLastWriteTimeUtc(f) < minDateModified) .ToList(); @@ -168,6 +168,11 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks get { return "Cache file cleanup"; } } + public string Key + { + get { return "DeleteCacheFiles"; } + } + /// /// Gets the description. /// @@ -202,5 +207,10 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks { get { return true; } } + + public bool IsLogged + { + get { return true; } + } } } diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs index b18ea03b1e..f7cbe8dcba 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks { @@ -36,13 +37,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks /// Creates the triggers that define when the task will run /// /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - // Until we can vary these default triggers per server and MBT, we need something that makes sense for both - return new ITaskTrigger[] { + return new[] { // Every so often - new IntervalTrigger { Interval = TimeSpan.FromHours(24)} + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} }; } @@ -82,6 +82,11 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks return Task.FromResult(true); } + public string Key + { + get { return "CleanLogFiles"; } + } + /// /// Gets the name of the task /// @@ -125,5 +130,10 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks { get { return true; } } + + public bool IsLogged + { + get { return true; } + } } } diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs index 78f60632fa..3c33df832e 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks { @@ -39,9 +40,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks /// Gets the default triggers. /// /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - var trigger = new DailyTrigger { TimeOfDay = TimeSpan.FromHours(0) }; //12am + var trigger = new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerDaily, TimeOfDayTicks = TimeSpan.FromHours(0).Ticks }; //12am return new[] { trigger }; } @@ -74,6 +75,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks get { return "Start new log file"; } } + public string Key { get; } + /// /// Gets the description. /// @@ -101,5 +104,10 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks { get { return true; } } + + public bool IsLogged + { + get { return true; } + } } } diff --git a/MediaBrowser.Common/ScheduledTasks/WeeklyTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs similarity index 100% rename from MediaBrowser.Common/ScheduledTasks/WeeklyTrigger.cs rename to MediaBrowser.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs diff --git a/MediaBrowser.Common/Extensions/BaseExtensions.cs b/MediaBrowser.Common/Extensions/BaseExtensions.cs index 22dfa378fc..09f6e8706b 100644 --- a/MediaBrowser.Common/Extensions/BaseExtensions.cs +++ b/MediaBrowser.Common/Extensions/BaseExtensions.cs @@ -1,9 +1,7 @@ using System; using System.Globalization; -using System.Linq; -using System.Security.Cryptography; -using System.Text; using System.Text.RegularExpressions; +using MediaBrowser.Model.Cryptography; namespace MediaBrowser.Common.Extensions { @@ -12,6 +10,7 @@ namespace MediaBrowser.Common.Extensions /// public static class BaseExtensions { + public static ICryptographyProvider CryptographyProvider { get; set; } /// /// Strips the HTML. @@ -26,15 +25,6 @@ namespace MediaBrowser.Common.Extensions return Regex.Replace(htmlString, pattern, string.Empty).Trim(); } - public static string RemoveDiacritics(this string text) - { - return String.Concat( - text.Normalize(NormalizationForm.FormD) - .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != - UnicodeCategory.NonSpacingMark) - ).Normalize(NormalizationForm.FormC); - } - /// /// Gets the M d5. /// @@ -42,10 +32,7 @@ namespace MediaBrowser.Common.Extensions /// Guid. public static Guid GetMD5(this string str) { - using (var provider = MD5.Create()) - { - return new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(str))); - } + return CryptographyProvider.GetMD5(str); } /// diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index c843e828b2..8353eccdde 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -142,7 +142,7 @@ namespace MediaBrowser.Common /// Gets the plugins. /// /// The plugins. - IEnumerable Plugins { get; } + IPlugin[] Plugins { get; } /// /// Removes the plugin. diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 9ee91684f9..94ebf8dc94 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -57,9 +57,7 @@ - - @@ -69,22 +67,13 @@ - - - - - - - - - diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index b75accf9b0..89ebeb6db1 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -3,8 +3,6 @@ using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; using System; using System.IO; -using System.Reflection; -using System.Runtime.InteropServices; namespace MediaBrowser.Common.Plugins { @@ -12,7 +10,7 @@ namespace MediaBrowser.Common.Plugins /// Provides a common base class for all plugins /// /// The type of the T configuration type. - public abstract class BasePlugin : IPlugin + public abstract class BasePlugin : IPlugin, IPluginAssembly where TConfigurationType : BasePluginConfiguration { /// @@ -57,69 +55,33 @@ namespace MediaBrowser.Common.Plugins get { return typeof(TConfigurationType); } } - /// - /// The _assembly name - /// - private AssemblyName _assemblyName; - /// - /// Gets the name of the assembly. - /// - /// The name of the assembly. - protected AssemblyName AssemblyName + public void SetAttributes(string assemblyFilePath, string assemblyFileName, Version assemblyVersion, Guid assemblyId) { - get - { - return _assemblyName ?? (_assemblyName = GetType().Assembly.GetName()); - } - } + AssemblyFilePath = assemblyFilePath; + AssemblyFileName = assemblyFileName; + Version = assemblyVersion; + Id = assemblyId; - /// - /// The _unique id - /// - private Guid? _uniqueId; + IsFirstRun = !File.Exists(ConfigurationFilePath); + } /// /// Gets the unique id. /// /// The unique id. - public Guid Id - { - get - { - - if (!_uniqueId.HasValue) - { - var attribute = (GuidAttribute)GetType().Assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]; - _uniqueId = new Guid(attribute.Value); - } - - return _uniqueId.Value; - } - } + public Guid Id { get; private set; } /// /// Gets the plugin version /// /// The version. - public Version Version - { - get - { - return AssemblyName.Version; - } - } + public Version Version { get; private set; } /// /// Gets the name the assembly file /// /// The name of the assembly file. - public string AssemblyFileName - { - get - { - return AssemblyName.Name + ".dll"; - } - } + protected string AssemblyFileName { get; private set; } /// /// Gets the last date modified of the configuration @@ -136,29 +98,11 @@ namespace MediaBrowser.Common.Plugins } } - /// - /// Gets the last date modified of the plugin - /// - /// The assembly date last modified. - public DateTime AssemblyDateLastModified - { - get - { - return File.GetLastWriteTimeUtc(AssemblyFilePath); - } - } - /// /// Gets the path to the assembly file /// /// The assembly file path. - public string AssemblyFilePath - { - get - { - return Path.Combine(ApplicationPaths.PluginsPath, AssemblyFileName); - } - } + public string AssemblyFilePath { get; private set; } /// /// The _configuration sync lock @@ -272,8 +216,6 @@ namespace MediaBrowser.Common.Plugins { ApplicationPaths = applicationPaths; XmlSerializer = xmlSerializer; - - IsFirstRun = !File.Exists(ConfigurationFilePath); } /// @@ -349,4 +291,9 @@ namespace MediaBrowser.Common.Plugins get { return Configuration; } } } + + public interface IPluginAssembly + { + void SetAttributes(string assemblyFilePath, string assemblyFileName, Version assemblyVersion, Guid assemblyId); + } } diff --git a/MediaBrowser.Common/Plugins/IPlugin.cs b/MediaBrowser.Common/Plugins/IPlugin.cs index 5a1252d1cd..3feeebb6b2 100644 --- a/MediaBrowser.Common/Plugins/IPlugin.cs +++ b/MediaBrowser.Common/Plugins/IPlugin.cs @@ -38,12 +38,6 @@ namespace MediaBrowser.Common.Plugins /// The version. Version Version { get; } - /// - /// Gets the name the assembly file - /// - /// The name of the assembly file. - string AssemblyFileName { get; } - /// /// Gets a value indicating whether this instance is first run. /// @@ -56,12 +50,6 @@ namespace MediaBrowser.Common.Plugins /// The configuration date last modified. DateTime ConfigurationDateLastModified { get; } - /// - /// Gets the last date modified of the plugin - /// - /// The assembly date last modified. - DateTime AssemblyDateLastModified { get; } - /// /// Gets the path to the assembly file /// diff --git a/MediaBrowser.Common/ScheduledTasks/IHasKey.cs b/MediaBrowser.Common/ScheduledTasks/IHasKey.cs deleted file mode 100644 index 5736cb6162..0000000000 --- a/MediaBrowser.Common/ScheduledTasks/IHasKey.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MediaBrowser.Common.ScheduledTasks -{ - public interface IHasKey - { - string Key { get; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs b/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs index 0b9a5e276a..a3a28684dd 100644 --- a/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs +++ b/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs @@ -1,7 +1,6 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.Tasks; using System; -using System.Collections.Generic; namespace MediaBrowser.Common.ScheduledTasks { @@ -62,7 +61,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// The triggers. /// value - IEnumerable Triggers { get; set; } + TaskTriggerInfo[] Triggers { get; set; } /// /// Gets the unique id. diff --git a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs index f1809c4516..e557a6b2c3 100644 --- a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs +++ b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Common.ScheduledTasks { diff --git a/MediaBrowser.Common/ScheduledTasks/ITaskTrigger.cs b/MediaBrowser.Common/ScheduledTasks/ITaskTrigger.cs index ef1ea9d387..d6ca63ad7e 100644 --- a/MediaBrowser.Common/ScheduledTasks/ITaskTrigger.cs +++ b/MediaBrowser.Common/ScheduledTasks/ITaskTrigger.cs @@ -18,8 +18,6 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// Stars waiting for the trigger action /// - /// The last result. - /// if set to true [is application startup]. void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup); /// diff --git a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs index 4ad33341ad..fe45f16213 100644 --- a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs +++ b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs @@ -25,17 +25,9 @@ namespace MediaBrowser.Common.ScheduledTasks isHidden = configurableTask.IsHidden; } - string key = null; - - var hasKey = task.ScheduledTask as IHasKey; - - if (hasKey != null) - { - key = hasKey.Key; - } + string key = task.ScheduledTask.Key; var triggers = task.Triggers - .Select(GetTriggerInfo) .OrderBy(i => i.Type) .ThenBy(i => i.DayOfWeek ?? DayOfWeek.Sunday) .ThenBy(i => i.TimeOfDayTicks ?? 0) @@ -57,138 +49,5 @@ namespace MediaBrowser.Common.ScheduledTasks Key = key }; } - - /// - /// Gets the trigger info. - /// - /// The trigger. - /// TaskTriggerInfo. - public static TaskTriggerInfo GetTriggerInfo(ITaskTrigger trigger) - { - var info = new TaskTriggerInfo - { - Type = trigger.GetType().Name - }; - - var dailyTrigger = trigger as DailyTrigger; - - if (dailyTrigger != null) - { - info.TimeOfDayTicks = dailyTrigger.TimeOfDay.Ticks; - } - - var weeklyTaskTrigger = trigger as WeeklyTrigger; - - if (weeklyTaskTrigger != null) - { - info.TimeOfDayTicks = weeklyTaskTrigger.TimeOfDay.Ticks; - info.DayOfWeek = weeklyTaskTrigger.DayOfWeek; - } - - var intervalTaskTrigger = trigger as IntervalTrigger; - - if (intervalTaskTrigger != null) - { - info.IntervalTicks = intervalTaskTrigger.Interval.Ticks; - } - - var systemEventTrigger = trigger as SystemEventTrigger; - - if (systemEventTrigger != null) - { - info.SystemEvent = systemEventTrigger.SystemEvent; - } - - if (trigger.TaskOptions != null) - { - info.MaxRuntimeMs = trigger.TaskOptions.MaxRuntimeMs; - } - - return info; - } - - /// - /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger - /// - /// The info. - /// BaseTaskTrigger. - /// - /// Invalid trigger type: + info.Type - public static ITaskTrigger GetTrigger(TaskTriggerInfo info) - { - var options = new TaskExecutionOptions - { - MaxRuntimeMs = info.MaxRuntimeMs - }; - - if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase)) - { - if (!info.TimeOfDayTicks.HasValue) - { - throw new ArgumentNullException(); - } - - return new DailyTrigger - { - TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), - TaskOptions = options - }; - } - - if (info.Type.Equals(typeof(WeeklyTrigger).Name, StringComparison.OrdinalIgnoreCase)) - { - if (!info.TimeOfDayTicks.HasValue) - { - throw new ArgumentNullException(); - } - - if (!info.DayOfWeek.HasValue) - { - throw new ArgumentNullException(); - } - - return new WeeklyTrigger - { - TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), - DayOfWeek = info.DayOfWeek.Value, - TaskOptions = options - }; - } - - if (info.Type.Equals(typeof(IntervalTrigger).Name, StringComparison.OrdinalIgnoreCase)) - { - if (!info.IntervalTicks.HasValue) - { - throw new ArgumentNullException(); - } - - return new IntervalTrigger - { - Interval = TimeSpan.FromTicks(info.IntervalTicks.Value), - TaskOptions = options - }; - } - - if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase)) - { - if (!info.SystemEvent.HasValue) - { - throw new ArgumentNullException(); - } - - return new SystemEventTrigger - { - SystemEvent = info.SystemEvent.Value, - TaskOptions = options - }; - } - - if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase)) - { - return new StartupTrigger(); - } - - throw new ArgumentException("Unrecognized trigger type: " + info.Type); - } } } diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs index a31f04fc4f..07cf43c5bb 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs @@ -10,6 +10,7 @@ using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Extensions; namespace MediaBrowser.Controller.Entities.Audio { diff --git a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs index bd991d9f47..a111166aca 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Extensions; namespace MediaBrowser.Controller.Entities.Audio { diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index e1a7741c94..9aad91a28c 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -24,6 +24,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Controller.Extensions; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Providers; diff --git a/MediaBrowser.Controller/Entities/GameGenre.cs b/MediaBrowser.Controller/Entities/GameGenre.cs index 6448828fb3..2987a9a077 100644 --- a/MediaBrowser.Controller/Entities/GameGenre.cs +++ b/MediaBrowser.Controller/Entities/GameGenre.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Extensions; namespace MediaBrowser.Controller.Entities { diff --git a/MediaBrowser.Controller/Entities/Genre.cs b/MediaBrowser.Controller/Entities/Genre.cs index 1736ba8c76..cde9c6ce41 100644 --- a/MediaBrowser.Controller/Entities/Genre.cs +++ b/MediaBrowser.Controller/Entities/Genre.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Extensions; namespace MediaBrowser.Controller.Entities { diff --git a/MediaBrowser.Controller/Entities/Person.cs b/MediaBrowser.Controller/Entities/Person.cs index f21bc0a71e..d7acdb65ec 100644 --- a/MediaBrowser.Controller/Entities/Person.cs +++ b/MediaBrowser.Controller/Entities/Person.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Extensions; using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Entities diff --git a/MediaBrowser.Controller/Entities/Studio.cs b/MediaBrowser.Controller/Entities/Studio.cs index 04b09b7442..773250ad9e 100644 --- a/MediaBrowser.Controller/Entities/Studio.cs +++ b/MediaBrowser.Controller/Entities/Studio.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Extensions; namespace MediaBrowser.Controller.Entities { diff --git a/MediaBrowser.Controller/Extensions/BaseExtensions.cs b/MediaBrowser.Controller/Extensions/BaseExtensions.cs new file mode 100644 index 0000000000..84a9b1524e --- /dev/null +++ b/MediaBrowser.Controller/Extensions/BaseExtensions.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Linq; +using System.Text; +using MediaBrowser.Model.Cryptography; + +namespace MediaBrowser.Controller.Extensions +{ + /// + /// Class BaseExtensions + /// + public static class BaseExtensions + { + public static ICryptographyProvider CryptographyProvider { get; set; } + + public static string RemoveDiacritics(this string text) + { + return String.Concat( + text.Normalize(NormalizationForm.FormD) + .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != + UnicodeCategory.NonSpacingMark) + ).Normalize(NormalizationForm.FormC); + } + } +} diff --git a/MediaBrowser.Controller/Library/NameExtensions.cs b/MediaBrowser.Controller/Library/NameExtensions.cs index 19d0fc772f..5f52a93c94 100644 --- a/MediaBrowser.Controller/Library/NameExtensions.cs +++ b/MediaBrowser.Controller/Library/NameExtensions.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using MediaBrowser.Controller.Extensions; using MediaBrowser.Model.Extensions; namespace MediaBrowser.Controller.Library diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index c14e25030c..46277a7839 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -165,6 +165,7 @@ + diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 9f51dcf667..cf162ac773 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -12,6 +12,7 @@ using CommonIO; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 6dda49a554..45bffa2df5 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -20,6 +20,7 @@ using System.Threading.Tasks; using CommonIO; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; +using MediaBrowser.Model.IO; using UniversalDetector; namespace MediaBrowser.MediaEncoding.Subtitles diff --git a/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs b/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs new file mode 100644 index 0000000000..5899f03d57 --- /dev/null +++ b/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs @@ -0,0 +1,9 @@ +using System; + +namespace MediaBrowser.Model.Cryptography +{ + public interface ICryptographyProvider + { + Guid GetMD5(string str); + } +} diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index 6d3e2ce4c3..b56d7df15c 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -118,7 +118,7 @@ namespace MediaBrowser.Model.Entities private string AddLanguageIfNeeded(string title) { - if (!string.IsNullOrEmpty(Language) && title.IndexOf(Language, StringComparison.OrdinalIgnoreCase) == -1) + if (!string.IsNullOrEmpty(Language) && !string.Equals(Language, "und", StringComparison.OrdinalIgnoreCase) && title.IndexOf(Language, StringComparison.OrdinalIgnoreCase) == -1) { title = StringHelper.FirstToUpper(Language) + " " + title; } diff --git a/MediaBrowser.Common/IO/IMemoryStreamProvider.cs b/MediaBrowser.Model/IO/IMemoryStreamProvider.cs similarity index 86% rename from MediaBrowser.Common/IO/IMemoryStreamProvider.cs rename to MediaBrowser.Model/IO/IMemoryStreamProvider.cs index 1c0e98018e..82a758d9a1 100644 --- a/MediaBrowser.Common/IO/IMemoryStreamProvider.cs +++ b/MediaBrowser.Model/IO/IMemoryStreamProvider.cs @@ -1,6 +1,6 @@ using System.IO; -namespace MediaBrowser.Common.IO +namespace MediaBrowser.Model.IO { public interface IMemoryStreamProvider { diff --git a/MediaBrowser.Common/IO/StreamDefaults.cs b/MediaBrowser.Model/IO/StreamDefaults.cs similarity index 92% rename from MediaBrowser.Common/IO/StreamDefaults.cs rename to MediaBrowser.Model/IO/StreamDefaults.cs index 8b16d89b3b..1e99ff4b55 100644 --- a/MediaBrowser.Common/IO/StreamDefaults.cs +++ b/MediaBrowser.Model/IO/StreamDefaults.cs @@ -1,5 +1,5 @@  -namespace MediaBrowser.Common.IO +namespace MediaBrowser.Model.IO { /// /// Class StreamDefaults diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 6c9197c164..e5aac6c061 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -98,6 +98,7 @@ + @@ -133,6 +134,8 @@ + + @@ -384,6 +387,9 @@ + + + diff --git a/MediaBrowser.Common/ScheduledTasks/IConfigurableScheduledTask.cs b/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs similarity index 78% rename from MediaBrowser.Common/ScheduledTasks/IConfigurableScheduledTask.cs rename to MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs index 6989dea06b..ed981a905b 100644 --- a/MediaBrowser.Common/ScheduledTasks/IConfigurableScheduledTask.cs +++ b/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs @@ -1,4 +1,4 @@ -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Model.Tasks { public interface IConfigurableScheduledTask { @@ -12,10 +12,7 @@ /// /// true if this instance is enabled; otherwise, false. bool IsEnabled { get; } - } - public interface IScheduledTaskActivityLog - { - bool IsActivityLogged { get; } + bool IsLogged { get; } } } \ No newline at end of file diff --git a/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs b/MediaBrowser.Model/Tasks/IScheduledTask.cs similarity index 90% rename from MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs rename to MediaBrowser.Model/Tasks/IScheduledTask.cs index 351e96c7d5..81ba239ad8 100644 --- a/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs +++ b/MediaBrowser.Model/Tasks/IScheduledTask.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Model.Tasks { /// /// Interface IScheduledTaskWorker @@ -16,6 +16,8 @@ namespace MediaBrowser.Common.ScheduledTasks /// The name. string Name { get; } + string Key { get; } + /// /// Gets the description. /// @@ -40,6 +42,6 @@ namespace MediaBrowser.Common.ScheduledTasks /// Gets the default triggers. /// /// IEnumerable{BaseTaskTrigger}. - IEnumerable GetDefaultTriggers(); + IEnumerable GetDefaultTriggers(); } } diff --git a/MediaBrowser.Common/ScheduledTasks/TaskExecutionOptions.cs b/MediaBrowser.Model/Tasks/TaskExecutionOptions.cs similarity index 82% rename from MediaBrowser.Common/ScheduledTasks/TaskExecutionOptions.cs rename to MediaBrowser.Model/Tasks/TaskExecutionOptions.cs index 41b33b1c26..faba35b222 100644 --- a/MediaBrowser.Common/ScheduledTasks/TaskExecutionOptions.cs +++ b/MediaBrowser.Model/Tasks/TaskExecutionOptions.cs @@ -1,5 +1,5 @@  -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Model.Tasks { /// /// A class that encomposases all common task run properties. diff --git a/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs b/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs index aacd56e655..69578c41d0 100644 --- a/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs +++ b/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs @@ -42,5 +42,11 @@ namespace MediaBrowser.Model.Tasks /// /// The maximum runtime ms. public int? MaxRuntimeMs { get; set; } + + public const string TriggerDaily = "DailyTrigger"; + public const string TriggerWeekly = "WeeklyTrigger"; + public const string TriggerInterval = "IntervalTrigger"; + public const string TriggerSystemEvent = "SystemEventTrigger"; + public const string TriggerStartup = "StartupTrigger"; } } diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs index 767c034ee6..3b7e24e3a5 100644 --- a/MediaBrowser.Providers/Manager/ImageSaver.cs +++ b/MediaBrowser.Providers/Manager/ImageSaver.cs @@ -17,6 +17,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Providers.Manager { diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index dfeceed7d4..43598e29d8 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -21,6 +21,7 @@ using System.Threading; using System.Threading.Tasks; using CommonIO; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; using MediaBrowser.Model.Serialization; namespace MediaBrowser.Providers.Manager diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs index 9ae8413d19..b69e371364 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs @@ -139,7 +139,7 @@ namespace MediaBrowser.Providers.MediaInfo request.IndexNumberEnd = episode.IndexNumberEnd; request.SeriesName = episode.SeriesName; } - + try { var searchResults = await _subtitleManager.SearchSubtitles(request, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs index dd88026895..f05bf3ab81 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs @@ -16,6 +16,7 @@ using System.Threading; using System.Threading.Tasks; using System.IO; using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Providers.MediaInfo { @@ -184,12 +185,18 @@ namespace MediaBrowser.Providers.MediaInfo return false; } - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger{ Interval = TimeSpan.FromHours(8)} - }; + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} + }; + } + + public string Key + { + get { return "DownloadSubtitles"; } } } } diff --git a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs b/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs index 5ac3da3db6..4202870bd6 100644 --- a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs @@ -5,10 +5,11 @@ using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.Channels { - class RefreshChannelsScheduledTask : IScheduledTask, IConfigurableScheduledTask + class RefreshChannelsScheduledTask : IScheduledTask { private readonly IChannelManager _channelManager; private readonly IUserManager _userManager; @@ -48,14 +49,23 @@ namespace MediaBrowser.Server.Implementations.Channels .ConfigureAwait(false); } - public IEnumerable GetDefaultTriggers() + /// + /// Creates the triggers that define when the task will run + /// + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger{ Interval = TimeSpan.FromHours(24)} + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} }; } + public string Key + { + get { return "RefreshInternetChannels"; } + } + public bool IsHidden { get { return false; } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs b/MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs index a36583a412..6e4451d96a 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs @@ -401,8 +401,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { var task = e.Argument; - var activityTask = task.ScheduledTask as IScheduledTaskActivityLog; - if (activityTask != null && !activityTask.IsActivityLogged) + var activityTask = task.ScheduledTask as IConfigurableScheduledTask; + if (activityTask != null && !activityTask.IsLogged) { return; } @@ -419,8 +419,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints var result = e.Result; var task = e.Task; - var activityTask = task.ScheduledTask as IScheduledTaskActivityLog; - if (activityTask != null && !activityTask.IsActivityLogged) + var activityTask = task.ScheduledTask as IConfigurableScheduledTask; + if (activityTask != null && !activityTask.IsLogged) { return; } diff --git a/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs b/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs index de98b83ef2..2cc8d0ea54 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs @@ -10,10 +10,11 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.FileOrganization { - public class OrganizerScheduledTask : IScheduledTask, IConfigurableScheduledTask, IScheduledTaskActivityLog, IHasKey + public class OrganizerScheduledTask : IScheduledTask, IConfigurableScheduledTask { private readonly ILibraryMonitor _libraryMonitor; private readonly ILibraryManager _libraryManager; @@ -63,12 +64,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization } } - public IEnumerable GetDefaultTriggers() + /// + /// Creates the triggers that define when the task will run + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger{ Interval = TimeSpan.FromMinutes(5)} - }; + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromMinutes(5).Ticks} + }; } public bool IsHidden @@ -81,7 +87,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization get { return GetAutoOrganizeOptions().TvOptions.IsEnabled; } } - public bool IsActivityLogged + public bool IsLogged { get { return false; } } diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index b3d3ec13cc..21522a9dab 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -23,6 +23,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Common.Security; using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.HttpServer { diff --git a/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs index 8a7c14eb66..b2cbf2387e 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs @@ -3,6 +3,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Net; +using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using ServiceStack.Logging; diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index b090c97c6e..5509eb6271 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs index b5c8d01075..59e0b2a9b2 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using Funq; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using ServiceStack; using ServiceStack.Host; diff --git a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs index 40cca7baba..3dff16e24a 100644 --- a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs +++ b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Controller.Extensions; namespace MediaBrowser.Server.Implementations.Library { diff --git a/MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs b/MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs index 3fb1d96614..ad7f839e8c 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs @@ -6,10 +6,11 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.LiveTv { - public class RefreshChannelsScheduledTask : IScheduledTask, IConfigurableScheduledTask, IHasKey + public class RefreshChannelsScheduledTask : IScheduledTask, IConfigurableScheduledTask { private readonly ILiveTvManager _liveTvManager; private readonly IConfigurationManager _config; @@ -42,11 +43,16 @@ namespace MediaBrowser.Server.Implementations.LiveTv return manager.RefreshChannels(progress, cancellationToken); } - public IEnumerable GetDefaultTriggers() + /// + /// Creates the triggers that define when the task will run + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger{ Interval = TimeSpan.FromHours(12)} + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(12).Ticks} }; } @@ -65,6 +71,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv get { return true; } } + public bool IsLogged + { + get { return true; } + } + public string Key { get { return "RefreshGuide"; } diff --git a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs index c1394ee1c3..0916f19f79 100644 --- a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs @@ -18,6 +18,7 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Net; +using MediaBrowser.Model.Tasks; using MediaBrowser.Server.Implementations.ScheduledTasks; namespace MediaBrowser.Server.Implementations.Persistence @@ -337,12 +338,22 @@ namespace MediaBrowser.Server.Implementations.Persistence } } - public IEnumerable GetDefaultTriggers() + /// + /// Creates the triggers that define when the task will run + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger{ Interval = TimeSpan.FromHours(24)} + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} }; } + + public string Key + { + get { return "CleanDatabase"; } + } } } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Persistence/DataExtensions.cs b/MediaBrowser.Server.Implementations/Persistence/DataExtensions.cs index 028465354c..86ecbd24d9 100644 --- a/MediaBrowser.Server.Implementations/Persistence/DataExtensions.cs +++ b/MediaBrowser.Server.Implementations/Persistence/DataExtensions.cs @@ -5,6 +5,7 @@ using System; using System.Data; using System.IO; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.Persistence { diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs index 1726a77a6b..3d20cad36c 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs @@ -11,6 +11,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.Persistence { diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index f33b18389a..c76cbf8aea 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -23,8 +23,10 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Collections; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Extensions; using MediaBrowser.Controller.Playlists; using MediaBrowser.Model.Dto; +using MediaBrowser.Model.IO; using MediaBrowser.Model.LiveTv; using MediaBrowser.Server.Implementations.Devices; using MediaBrowser.Server.Implementations.Playlists; diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs index 31fa78806c..c3cf4acc44 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs @@ -10,6 +10,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.Persistence { diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs index 607a043a64..9ff1172f34 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs @@ -13,6 +13,7 @@ using System.Threading; using System.Threading.Tasks; using CommonIO; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.ScheduledTasks { @@ -62,20 +63,22 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// /// Creates the triggers that define when the task will run /// - /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] + return new[] { + + new TaskTriggerInfo { - new DailyTrigger - { - TimeOfDay = TimeSpan.FromHours(1), - TaskOptions = new TaskExecutionOptions - { - MaxRuntimeMs = Convert.ToInt32(TimeSpan.FromHours(4).TotalMilliseconds) - } - } - }; + Type = TaskTriggerInfo.TriggerDaily, + TimeOfDayTicks = TimeSpan.FromHours(1).Ticks, + MaxRuntimeMs = Convert.ToInt32(TimeSpan.FromHours(4).TotalMilliseconds) + } + }; + } + + public string Key + { + get { return "RefreshChapterImages"; } } /// diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs index 05c3db63c8..0315410cdd 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.ScheduledTasks { @@ -33,16 +34,21 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// /// Creates the triggers that define when the task will run /// - /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { // Randomize the default start hour because this operation can really hammer internet metadata providers var startHour = new Random(_appHost.SystemId.GetHashCode()).Next(0, 8); - return new ITaskTrigger[] - { - new DailyTrigger { TimeOfDay = TimeSpan.FromHours(startHour) }, - }; + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerDaily, TimeOfDayTicks = TimeSpan.FromHours(startHour).Ticks} + }; + } + + public string Key + { + get { return "RefreshPeople"; } } /// diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs index ff0960259c..a2d587087f 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs @@ -9,6 +9,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.ScheduledTasks { @@ -37,18 +38,23 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// Creates the triggers that define when the task will run /// /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] { + return new[] { // At startup - new StartupTrigger(), + new TaskTriggerInfo {Type = TaskTriggerInfo.TriggerStartup}, // Every so often - new IntervalTrigger { Interval = TimeSpan.FromHours(24)} + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} }; } + public string Key + { + get { return "PluginUpdates"; } + } + /// /// Update installed plugins /// diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs index 64ae249cd4..e8e557e76b 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs @@ -7,13 +7,14 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.ScheduledTasks { /// /// Class RefreshMediaLibraryTask /// - public class RefreshMediaLibraryTask : IScheduledTask, IHasKey + public class RefreshMediaLibraryTask : IScheduledTask { /// /// The _library manager @@ -32,18 +33,16 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks } /// - /// Gets the default triggers. + /// Creates the triggers that define when the task will run /// /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - var list = new ITaskTrigger[] { - - new IntervalTrigger{ Interval = TimeSpan.FromHours(12)} - - }.ToList(); - - return list; + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(12).Ticks} + }; } /// diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs index 0ba9d4f324..34a75c0c79 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs @@ -6,13 +6,14 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.ScheduledTasks { /// /// Plugin Update Task /// - public class SystemUpdateTask : IScheduledTask, IHasKey + public class SystemUpdateTask : IScheduledTask { /// /// The _app host @@ -47,16 +48,15 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// Creates the triggers that define when the task will run /// /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() + public IEnumerable GetDefaultTriggers() { - // Until we can vary these default triggers per server and MBT, we need something that makes sense for both - return new ITaskTrigger[] { + return new[] { // At startup - new StartupTrigger(), + new TaskTriggerInfo {Type = TaskTriggerInfo.TriggerStartup}, // Every so often - new IntervalTrigger { Interval = TimeSpan.FromHours(24)} + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} }; } diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index 893592fa38..a9b6ad6a5f 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs @@ -14,6 +14,7 @@ using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.ServerManager { diff --git a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index 60b04cf82f..a1c23edf1d 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -10,6 +10,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; using UniversalDetector; namespace MediaBrowser.Server.Implementations.ServerManager diff --git a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs index 28813c715d..def156dfb6 100644 --- a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs @@ -9,10 +9,11 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.Sync { - class ServerSyncScheduledTask : IScheduledTask, IConfigurableScheduledTask, IHasKey + class ServerSyncScheduledTask : IScheduledTask, IConfigurableScheduledTask { private readonly ISyncManager _syncManager; private readonly ILogger _logger; @@ -58,14 +59,17 @@ namespace MediaBrowser.Server.Implementations.Sync get { return ((SyncManager)_syncManager).ServerSyncProviders; } } - public IEnumerable GetDefaultTriggers() + /// + /// Creates the triggers that define when the task will run + /// + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger { Interval = TimeSpan.FromHours(3) } - }; + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(3).Ticks} + }; } - public bool IsHidden { get { return !IsEnabled; } @@ -76,6 +80,11 @@ namespace MediaBrowser.Server.Implementations.Sync get { return ServerSyncProviders.Any(); } } + public bool IsLogged + { + get { return true; } + } + public string Key { get { return "ServerSync"; } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs index 3f9eb76918..8601e36109 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs @@ -10,10 +10,11 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.Tasks; namespace MediaBrowser.Server.Implementations.Sync { - public class SyncConvertScheduledTask : IScheduledTask, IConfigurableScheduledTask, IHasKey + public class SyncConvertScheduledTask : IScheduledTask { private readonly ILibraryManager _libraryManager; private readonly ISyncRepository _syncRepo; @@ -66,22 +67,17 @@ namespace MediaBrowser.Server.Implementations.Sync .Sync(progress, cancellationToken); } - public IEnumerable GetDefaultTriggers() + /// + /// Creates the triggers that define when the task will run + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() { - return new ITaskTrigger[] - { - new IntervalTrigger { Interval = TimeSpan.FromHours(3) } - }; - } - - public bool IsHidden - { - get { return false; } - } - - public bool IsEnabled - { - get { return true; } + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(3).Ticks} + }; } public string Key diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index ff5f1a64e0..c1eeec26b3 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -25,6 +25,7 @@ using System.Threading; using System.Threading.Tasks; using CommonIO; using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index a40e3e258c..eaf129e637 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -30,6 +30,7 @@ using System.Threading; using System.Threading.Tasks; using CommonIO; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs b/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs index 32a6003719..5edc56722d 100644 --- a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs +++ b/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs @@ -13,6 +13,7 @@ using System.Threading.Tasks; using CommonIO; using Interfaces.IO; using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 6a54bbf4f7..ce414a12f4 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -13,7 +13,6 @@ Copyright © Emby 2013 -