diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-07-26 13:30:15 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-07-26 13:30:15 -0400 |
| commit | 37c27a26e90b7eff62cec9e2b6a6c003e79fcbe4 (patch) | |
| tree | d8c628a1f1ffeb33ba021158822eeffa74928f4e /MediaBrowser.Server.Implementations/Sync/SyncManager.cs | |
| parent | d56fa09ccc5e1a5f9440645330ce337273fa3bd7 (diff) | |
added sync job database
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncManager.cs | 150 |
1 files changed, 131 insertions, 19 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 50f1030f3..a8d723ce3 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -1,9 +1,14 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Sync; +using MoreLinq; using System; using System.Collections.Generic; using System.Linq; @@ -13,56 +18,131 @@ namespace MediaBrowser.Server.Implementations.Sync { public class SyncManager : ISyncManager { - private ISyncProvider[] _providers = new ISyncProvider[] { }; + private readonly ILibraryManager _libraryManager; + private readonly ISyncRepository _repo; + private readonly IImageProcessor _imageProcessor; + private readonly ILogger _logger; + + private ISyncProvider[] _providers = { }; + + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger) + { + _libraryManager = libraryManager; + _repo = repo; + _imageProcessor = imageProcessor; + _logger = logger; + } public void AddParts(IEnumerable<ISyncProvider> providers) { _providers = providers.ToArray(); } - public Task<List<SyncJob>> CreateJob(SyncJobRequest request) + public async Task<SyncJobCreationResult> CreateJob(SyncJobRequest request) { - throw new NotImplementedException(); + var items = GetItemsForSync(request.ItemIds).ToList(); + + if (items.Count == 1) + { + request.Name = GetDefaultName(items[0]); + } + + if (string.IsNullOrWhiteSpace(request.Name)) + { + throw new ArgumentException("Please supply a name for the sync job."); + } + + var target = GetSyncTargets(request.UserId) + .First(i => string.Equals(request.TargetId, i.Id)); + + var jobId = Guid.NewGuid().ToString("N"); + + var job = new SyncJob + { + Id = jobId, + Name = request.Name, + TargetId = target.Id, + UserId = request.UserId, + UnwatchedOnly = request.UnwatchedOnly, + Limit = request.Limit, + LimitType = request.LimitType, + RequestedItemIds = request.ItemIds, + DateCreated = DateTime.UtcNow, + DateLastModified = DateTime.UtcNow + }; + + await _repo.Create(job).ConfigureAwait(false); + + return new SyncJobCreationResult + { + Job = GetJob(jobId) + }; } public QueryResult<SyncJob> GetJobs(SyncJobQuery query) { - throw new NotImplementedException(); - } + var result = _repo.GetJobs(query); - public QueryResult<SyncSchedule> GetSchedules(SyncScheduleQuery query) - { - throw new NotImplementedException(); - } + result.Items.ForEach(FillMetadata); - public Task CancelJob(string id) - { - throw new NotImplementedException(); + return result; } - public Task CancelSchedule(string id) + private void FillMetadata(SyncJob job) { - throw new NotImplementedException(); + var item = GetItemsForSync(job.RequestedItemIds) + .FirstOrDefault(); + + if (item != null) + { + var hasSeries = item as IHasSeries; + if (hasSeries != null) + { + job.ParentName = hasSeries.SeriesName; + } + + var hasAlbumArtist = item as IHasAlbumArtist; + if (hasAlbumArtist != null) + { + job.ParentName = hasAlbumArtist.AlbumArtists.FirstOrDefault(); + } + + var primaryImage = item.GetImageInfo(ImageType.Primary, 0); + + if (primaryImage != null) + { + try + { + job.PrimaryImageTag = _imageProcessor.GetImageCacheTag(item, ImageType.Primary); + job.PrimaryImageItemId = item.Id.ToString("N"); + + } + catch (Exception ex) + { + _logger.ErrorException("Error getting image info", ex); + } + } + } } - public SyncJob GetJob(string id) + public Task CancelJob(string id) { throw new NotImplementedException(); } - public SyncSchedule GetSchedule(string id) + public SyncJob GetJob(string id) { - throw new NotImplementedException(); + return _repo.GetJob(id); } public IEnumerable<SyncTarget> GetSyncTargets(string userId) { return _providers - .SelectMany(GetSyncTargets) + .SelectMany(i => GetSyncTargets(i, userId)) .OrderBy(i => i.Name); } - private IEnumerable<SyncTarget> GetSyncTargets(ISyncProvider provider) + private IEnumerable<SyncTarget> GetSyncTargets(ISyncProvider provider, string userId) { var providerId = GetSyncProviderId(provider); @@ -120,5 +200,37 @@ namespace MediaBrowser.Server.Implementations.Sync return false; } + + private IEnumerable<BaseItem> GetItemsForSync(IEnumerable<string> itemIds) + { + return itemIds.SelectMany(GetItemsForSync).DistinctBy(i => i.Id); + } + + private IEnumerable<BaseItem> GetItemsForSync(string id) + { + var item = _libraryManager.GetItemById(id); + + if (item == null) + { + throw new ArgumentException("Item with Id " + id + " not found."); + } + + if (!SupportsSync(item)) + { + throw new ArgumentException("Item with Id " + id + " does not support sync."); + } + + return GetItemsForSync(item); + } + + private IEnumerable<BaseItem> GetItemsForSync(BaseItem item) + { + return new[] { item }; + } + + private string GetDefaultName(BaseItem item) + { + return item.Name; + } } } |
