aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2015-02-19 12:50:05 -0500
committerLuke <luke.pulverenti@gmail.com>2015-02-19 12:50:05 -0500
commit8c09665c40776060a09655fb4ea04ec65bdffb73 (patch)
treeb1432a7315a7a7689be21fa2e3cc122350c778b2 /MediaBrowser.Server.Implementations/Sync
parent3cce8731614e6846096bbe54fca8336e7f5d98d9 (diff)
parentf2c3dade77878b48a9a333d745e5d92a0f913233 (diff)
Merge pull request #1016 from MediaBrowser/dev
3.0.5518.5
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/MediaSync.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs24
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs42
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,