diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-01-26 15:40:15 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-26 15:40:15 -0500 |
| commit | 1cd5e208713a057680b915c9136e0d4493611ed3 (patch) | |
| tree | 59e258ecd246dfb253c06cade5f0092af9874774 /Emby.Server.Implementations/Sync | |
| parent | 0d0e4ad695f3657d7ca3eef1ed54fe8608a490a1 (diff) | |
| parent | 9ebf9162ab68fbf61a1dd5e7801eb9abe985762c (diff) | |
Merge pull request #2425 from MediaBrowser/beta
Beta
Diffstat (limited to 'Emby.Server.Implementations/Sync')
4 files changed, 45 insertions, 17 deletions
diff --git a/Emby.Server.Implementations/Sync/SyncHelper.cs b/Emby.Server.Implementations/Sync/SyncHelper.cs index da475f0038..7fe703796f 100644 --- a/Emby.Server.Implementations/Sync/SyncHelper.cs +++ b/Emby.Server.Implementations/Sync/SyncHelper.cs @@ -4,7 +4,7 @@ namespace Emby.Server.Implementations.Sync { public class SyncHelper { - public static int? AdjustBitrate(int? profileBitrate, string quality) + public static long? AdjustBitrate(long? profileBitrate, string quality) { if (profileBitrate.HasValue) { diff --git a/Emby.Server.Implementations/Sync/SyncJobProcessor.cs b/Emby.Server.Implementations/Sync/SyncJobProcessor.cs index b1adc64df6..17cdef5fcd 100644 --- a/Emby.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/Emby.Server.Implementations/Sync/SyncJobProcessor.cs @@ -59,15 +59,8 @@ namespace Emby.Server.Implementations.Sync _mediaSourceManager = mediaSourceManager; } - public async Task EnsureJobItems(SyncJob job) + public async Task EnsureJobItems(SyncJob job, User user) { - var user = _userManager.GetUserById(job.UserId); - - if (user == null) - { - throw new InvalidOperationException("Cannot proceed with sync because user no longer exists."); - } - var items = (await GetItemsForSync(job.Category, job.ParentId, job.RequestedItemIds, user, job.UnwatchedOnly).ConfigureAwait(false)) .ToList(); @@ -385,7 +378,16 @@ namespace Emby.Server.Implementations.Sync if (job.SyncNewContent) { - await EnsureJobItems(job).ConfigureAwait(false); + var user = _userManager.GetUserById(job.UserId); + + if (user == null) + { + await _syncManager.CancelJob(job.Id).ConfigureAwait(false); + } + else + { + await EnsureJobItems(job, user).ConfigureAwait(false); + } } } } diff --git a/Emby.Server.Implementations/Sync/SyncManager.cs b/Emby.Server.Implementations/Sync/SyncManager.cs index 310b35afe3..418d42c9a6 100644 --- a/Emby.Server.Implementations/Sync/SyncManager.cs +++ b/Emby.Server.Implementations/Sync/SyncManager.cs @@ -181,7 +181,7 @@ namespace Emby.Server.Implementations.Sync await _repo.Create(job).ConfigureAwait(false); - await processor.EnsureJobItems(job).ConfigureAwait(false); + await processor.EnsureJobItems(job, user).ConfigureAwait(false); // If it already has a converting status then is must have been aborted during conversion var jobItemsResult = GetJobItems(new SyncJobItemQuery @@ -560,6 +560,12 @@ namespace Emby.Server.Implementations.Sync { var jobItem = _repo.GetJobItem(id); + if (jobItem == null) + { + _logger.Debug("ReportSyncJobItemTransferred: SyncJobItem {0} doesn't exist anymore", id); + return; + } + jobItem.Status = SyncJobItemStatus.Synced; jobItem.Progress = 100; diff --git a/Emby.Server.Implementations/Sync/TargetDataProvider.cs b/Emby.Server.Implementations/Sync/TargetDataProvider.cs index fbd82aa7af..cac8f0cd8b 100644 --- a/Emby.Server.Implementations/Sync/TargetDataProvider.cs +++ b/Emby.Server.Implementations/Sync/TargetDataProvider.cs @@ -19,6 +19,7 @@ namespace Emby.Server.Implementations.Sync private readonly IServerSyncProvider _provider; private readonly SemaphoreSlim _dataLock = new SemaphoreSlim(1, 1); + private readonly SemaphoreSlim _remoteDataLock = new SemaphoreSlim(1, 1); private List<LocalItem> _items; private readonly ILogger _logger; @@ -63,15 +64,24 @@ namespace Emby.Server.Implementations.Sync { _logger.Debug("Getting {0} from {1}", string.Join(MediaSync.PathSeparatorString, GetRemotePath().ToArray()), _provider.Name); - var fileResult = await _provider.GetFiles(GetRemotePath().ToArray(), _target, cancellationToken).ConfigureAwait(false); + await _remoteDataLock.WaitAsync(cancellationToken).ConfigureAwait(false); - if (fileResult.Items.Length > 0) + try { - using (var stream = await _provider.GetFile(fileResult.Items[0].FullName, _target, new Progress<double>(), cancellationToken)) + var fileResult = await _provider.GetFiles(GetRemotePath().ToArray(), _target, cancellationToken).ConfigureAwait(false); + + if (fileResult.Items.Length > 0) { - return _json.DeserializeFromStream<List<LocalItem>>(stream); + using (var stream = await _provider.GetFile(fileResult.Items[0].FullName, _target, new Progress<double>(), cancellationToken)) + { + return _json.DeserializeFromStream<List<LocalItem>>(stream); + } } } + finally + { + _remoteDataLock.Release(); + } return new List<LocalItem>(); } @@ -93,9 +103,19 @@ namespace Emby.Server.Implementations.Sync // Save to sync provider stream.Position = 0; var remotePath = GetRemotePath(); - _logger.Debug("Saving data.json to {0}. Remote path: {1}", _provider.Name, string.Join("/", remotePath)); - await _provider.SendFile(stream, remotePath, _target, new Progress<double>(), cancellationToken).ConfigureAwait(false); + await _remoteDataLock.WaitAsync(cancellationToken).ConfigureAwait(false); + + try + { + _logger.Debug("Saving data.json to {0}. Remote path: {1}", _provider.Name, string.Join("/", remotePath)); + + await _provider.SendFile(stream, remotePath, _target, new Progress<double>(), cancellationToken).ConfigureAwait(false); + } + finally + { + _remoteDataLock.Release(); + } } } |
