diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs index a77efe855b..4f84652c60 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs @@ -79,6 +79,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks QueueScheduledTask(options); } + public void CancelIfRunningAndQueue() + where T : IScheduledTask + { + CancelIfRunningAndQueue(new TaskExecutionOptions()); + } + /// /// Cancels if running /// @@ -103,6 +109,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks QueueScheduledTask(scheduledTask, options); } + public void QueueScheduledTask() + where T : IScheduledTask + { + QueueScheduledTask(new TaskExecutionOptions()); + } + /// /// Queues the scheduled task. /// diff --git a/MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs b/MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs index e7fd121788..b49551ea99 100644 --- a/MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs +++ b/MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs @@ -59,6 +59,11 @@ namespace MediaBrowser.Common.Implementations.Serialization } } + private Stream OpenFile(string path) + { + return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); + } + /// /// Deserializes from file. /// @@ -78,7 +83,7 @@ namespace MediaBrowser.Common.Implementations.Serialization throw new ArgumentNullException("file"); } - using (Stream stream = File.OpenRead(file)) + using (Stream stream = OpenFile(file)) { return DeserializeFromStream(stream, type); } @@ -99,7 +104,7 @@ namespace MediaBrowser.Common.Implementations.Serialization throw new ArgumentNullException("file"); } - using (Stream stream = File.OpenRead(file)) + using (Stream stream = OpenFile(file)) { return DeserializeFromStream(stream); } diff --git a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs index 9b3f18274e..8d271859e6 100644 --- a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs +++ b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs @@ -18,7 +18,14 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// /// Task options. - void CancelIfRunningAndQueue(TaskExecutionOptions options = null) + void CancelIfRunningAndQueue(TaskExecutionOptions options) + where T : IScheduledTask; + + /// + /// Cancels if running and queue. + /// + /// + void CancelIfRunningAndQueue() where T : IScheduledTask; /// @@ -33,7 +40,14 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// /// Task options. - void QueueScheduledTask(TaskExecutionOptions options = null) + void QueueScheduledTask(TaskExecutionOptions options) + where T : IScheduledTask; + + /// + /// Queues the scheduled task. + /// + /// + void QueueScheduledTask() where T : IScheduledTask; /// diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 4e2d66894a..dd68ef9da2 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -308,12 +308,13 @@ + - + diff --git a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs new file mode 100644 index 0000000000..170860dc27 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs @@ -0,0 +1,81 @@ +using MediaBrowser.Common.IO; +using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Sync; +using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Server.Implementations.Sync +{ + class ServerSyncScheduledTask : IScheduledTask, IConfigurableScheduledTask, IHasKey + { + private readonly ISyncManager _syncManager; + private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; + private readonly IServerApplicationHost _appHost; + + public ServerSyncScheduledTask(ISyncManager syncManager, ILogger logger, IFileSystem fileSystem, IServerApplicationHost appHost) + { + _syncManager = syncManager; + _logger = logger; + _fileSystem = fileSystem; + _appHost = appHost; + } + + public string Name + { + get { return "Cloud & Folder Sync"; } + } + + public string Description + { + get { return "Sync media to the cloud"; } + } + + public string Category + { + get + { + return "Sync"; + } + } + + public Task Execute(CancellationToken cancellationToken, IProgress progress) + { + return new MultiProviderSync(_syncManager, _appHost, _logger, _fileSystem) + .Sync(ServerSyncProviders, progress, cancellationToken); + } + + public IEnumerable ServerSyncProviders + { + get { return ((SyncManager)_syncManager).ServerSyncProviders; } + } + + public IEnumerable GetDefaultTriggers() + { + return new ITaskTrigger[] + { + new IntervalTrigger { Interval = TimeSpan.FromHours(6) } + }; + } + + public bool IsHidden + { + get { return !IsEnabled; } + } + + public bool IsEnabled + { + get { return ServerSyncProviders.Any(); } + } + + public string Key + { + get { return "ServerSync"; } + } + } +} diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs similarity index 86% rename from MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs rename to MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs index ccc9508e8a..70aabf345b 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs @@ -13,7 +13,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Sync { - public class SyncScheduledTask : IScheduledTask, IConfigurableScheduledTask, IHasKey + public class SyncConvertScheduledTask : IScheduledTask, IConfigurableScheduledTask, IHasKey { private readonly ILibraryManager _libraryManager; private readonly ISyncRepository _syncRepo; @@ -26,7 +26,7 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IConfigurationManager _config; private readonly IFileSystem _fileSystem; - public SyncScheduledTask(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem) + public SyncConvertScheduledTask(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem) { _libraryManager = libraryManager; _syncRepo = syncRepo; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 71dad53bf6..5644d561a2 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -79,6 +79,11 @@ namespace MediaBrowser.Server.Implementations.Sync _providers = providers.ToArray(); } + public IEnumerable ServerSyncProviders + { + get { return _providers.OfType(); } + } + public async Task CreateJob(SyncJobRequest request) { var processor = GetSyncJobProcessor(); @@ -438,8 +443,9 @@ namespace MediaBrowser.Server.Implementations.Sync return target.Id; } - var providerId = GetSyncProviderId(provider); - return (providerId + "-" + target.Id).GetMD5().ToString("N"); + return target.Id; + //var providerId = GetSyncProviderId(provider); + //return (providerId + "-" + target.Id).GetMD5().ToString("N"); } private string GetSyncProviderId(ISyncProvider provider)