diff options
| author | Luke <luke.pulverenti@gmail.com> | 2015-02-19 12:50:05 -0500 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2015-02-19 12:50:05 -0500 |
| commit | 8c09665c40776060a09655fb4ea04ec65bdffb73 (patch) | |
| tree | b1432a7315a7a7689be21fa2e3cc122350c778b2 /MediaBrowser.Server.Implementations/Sync | |
| parent | 3cce8731614e6846096bbe54fca8336e7f5d98d9 (diff) | |
| parent | f2c3dade77878b48a9a333d745e5d92a0f913233 (diff) | |
Merge pull request #1016 from MediaBrowser/dev
3.0.5518.5
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync')
3 files changed, 57 insertions, 11 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs index efdfbb086..099e45a6e 100644 --- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs +++ b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs @@ -82,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.Sync IProgress<double> progress, CancellationToken cancellationToken) { - var jobItems = _syncManager.GetReadySyncItems(target.Id); + var jobItems = await _syncManager.GetReadySyncItems(target.Id).ConfigureAwait(false); var numComplete = 0; double startingPercent = 0; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index a254d862c..72dc1bdb6 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -336,11 +336,12 @@ namespace MediaBrowser.Server.Implementations.Sync return new[] { item }; } - public async Task EnsureSyncJobItems(CancellationToken cancellationToken) + private async Task EnsureSyncJobItems(string targetId, CancellationToken cancellationToken) { var jobResult = _syncRepo.GetJobs(new SyncJobQuery { - SyncNewContent = true + SyncNewContent = true, + TargetId = targetId }); foreach (var job in jobResult.Items) @@ -356,7 +357,7 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task Sync(IProgress<double> progress, CancellationToken cancellationToken) { - await EnsureSyncJobItems(cancellationToken).ConfigureAwait(false); + await EnsureSyncJobItems(null, cancellationToken).ConfigureAwait(false); // If it already has a converting status then is must have been aborted during conversion var result = _syncRepo.GetJobItems(new SyncJobItemQuery @@ -375,6 +376,21 @@ namespace MediaBrowser.Server.Implementations.Sync // Clean files in sync temp folder that are not linked to any sync jobs } + public async Task SyncJobItems(string targetId, bool enableConversion, IProgress<double> progress, + CancellationToken cancellationToken) + { + await EnsureSyncJobItems(targetId, cancellationToken).ConfigureAwait(false); + + // If it already has a converting status then is must have been aborted during conversion + var result = _syncRepo.GetJobItems(new SyncJobItemQuery + { + Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting }, + TargetId = targetId + }); + + await SyncJobItems(result.Items, true, progress, cancellationToken).ConfigureAwait(false); + } + public async Task SyncJobItems(SyncJobItem[] items, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken) { if (items.Length > 0) @@ -483,7 +499,7 @@ namespace MediaBrowser.Server.Implementations.Sync // No sense creating external subs if we're already burning one into the video var externalSubs = streamInfo.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode ? new List<SubtitleStreamInfo>() : - streamInfo.GetExternalSubtitles("dummy", false); + streamInfo.GetExternalSubtitles(false); // Mark as requiring conversion if transcoding the video, or if any subtitles need to be extracted var requiresVideoTranscoding = streamInfo.PlayMethod == PlayMethod.Transcode && job.Quality != SyncQuality.Original; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 00b28ad8a..a2fd92bf5 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -47,6 +47,7 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IFileSystem _fileSystem; private readonly Func<ISubtitleEncoder> _subtitleEncoder; private readonly IConfigurationManager _config; + private IUserDataManager _userDataManager; private ISyncProvider[] _providers = { }; @@ -56,7 +57,7 @@ namespace MediaBrowser.Server.Implementations.Sync public event EventHandler<GenericEventArgs<SyncJobItem>> SyncJobItemUpdated; public event EventHandler<GenericEventArgs<SyncJobItem>> SyncJobItemCreated; - public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func<IDtoService> dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func<IMediaEncoder> mediaEncoder, IFileSystem fileSystem, Func<ISubtitleEncoder> subtitleEncoder, IConfigurationManager config) + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func<IDtoService> dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func<IMediaEncoder> mediaEncoder, IFileSystem fileSystem, Func<ISubtitleEncoder> subtitleEncoder, IConfigurationManager config, IUserDataManager userDataManager) { _libraryManager = libraryManager; _repo = repo; @@ -70,6 +71,7 @@ namespace MediaBrowser.Server.Implementations.Sync _fileSystem = fileSystem; _subtitleEncoder = subtitleEncoder; _config = config; + _userDataManager = userDataManager; } public void AddParts(IEnumerable<ISyncProvider> providers) @@ -133,10 +135,17 @@ namespace MediaBrowser.Server.Implementations.Sync ParentId = request.ParentId }; - // It's just a static list - if (!items.Any(i => i.IsFolder || i is IItemByName)) + if (!request.Category.HasValue && request.ItemIds != null) { - job.SyncNewContent = false; + var requestedItems = request.ItemIds + .Select(_libraryManager.GetItemById) + .Where(i => i != null); + + // It's just a static list + if (!requestedItems.Any(i => i.IsFolder || i is IItemByName)) + { + job.SyncNewContent = false; + } } await _repo.Create(job).ConfigureAwait(false); @@ -666,11 +675,32 @@ namespace MediaBrowser.Server.Implementations.Sync public Task ReportOfflineAction(UserAction action) { - return Task.FromResult(true); + switch (action.Type) + { + case UserActionType.PlayedItem: + return ReportOfflinePlayedItem(action); + default: + throw new ArgumentException("Unexpected action type"); + } } - public List<SyncedItem> GetReadySyncItems(string targetId) + private Task ReportOfflinePlayedItem(UserAction action) { + var item = _libraryManager.GetItemById(action.ItemId); + var userData = _userDataManager.GetUserData(new Guid(action.UserId), item.GetUserDataKey()); + + userData.LastPlayedDate = action.Date; + _userDataManager.UpdatePlayState(item, userData, action.PositionTicks); + + return _userDataManager.SaveUserData(new Guid(action.UserId), item, userData, UserDataSaveReason.Import, CancellationToken.None); + } + + public async Task<List<SyncedItem>> GetReadySyncItems(string targetId) + { + var processor = GetSyncJobProcessor(); + + await processor.SyncJobItems(targetId, false, new Progress<double>(), CancellationToken.None).ConfigureAwait(false); + var jobItemResult = GetJobItems(new SyncJobItemQuery { TargetId = targetId, |
