aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/MediaSync.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs9
-rw-r--r--MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs80
3 files changed, 55 insertions, 36 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs
index cff72ae58..fd2f8ae8d 100644
--- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs
+++ b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs
@@ -66,7 +66,7 @@ namespace MediaBrowser.Server.Implementations.Sync
// Do the data sync twice so the server knows what was removed from the device
await SyncData(provider, dataProvider, serverId, target, cancellationToken).ConfigureAwait(false);
-
+
progress.Report(100);
}
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index c715c3f50..e7f217781 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -640,7 +640,6 @@ namespace MediaBrowser.Server.Implementations.Sync
dtoOptions.Fields.Remove(ItemFields.MediaStreams);
dtoOptions.Fields.Remove(ItemFields.IndexOptions);
dtoOptions.Fields.Remove(ItemFields.MediaSourceCount);
- dtoOptions.Fields.Remove(ItemFields.OriginalPrimaryImageAspectRatio);
dtoOptions.Fields.Remove(ItemFields.Path);
dtoOptions.Fields.Remove(ItemFields.SeriesGenres);
dtoOptions.Fields.Remove(ItemFields.Settings);
@@ -740,10 +739,10 @@ namespace MediaBrowser.Server.Implementations.Sync
var requiresSaving = false;
var removeFromDevice = false;
- var libraryItem = _libraryManager.GetItemById(jobItem.ItemId);
-
if (request.LocalItemIds.Contains(jobItem.ItemId, StringComparer.OrdinalIgnoreCase))
{
+ var libraryItem = _libraryManager.GetItemById(jobItem.ItemId);
+
var job = _repo.GetJob(jobItem.JobId);
var user = _userManager.GetUserById(job.UserId);
@@ -846,10 +845,10 @@ namespace MediaBrowser.Server.Implementations.Sync
var requiresSaving = false;
var removeFromDevice = false;
- var libraryItem = _libraryManager.GetItemById(jobItem.ItemId);
-
if (request.SyncJobItemIds.Contains(jobItem.Id, StringComparer.OrdinalIgnoreCase))
{
+ var libraryItem = _libraryManager.GetItemById(jobItem.ItemId);
+
var job = _repo.GetJob(jobItem.JobId);
var user = _userManager.GetUserById(job.UserId);
diff --git a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs b/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs
index 41d56d959..b7d9dd152 100644
--- a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs
+++ b/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs
@@ -60,46 +60,61 @@ namespace MediaBrowser.Server.Implementations.Sync
return _fileSystem.GetValidFilename(filename);
}
- private async Task EnsureData(CancellationToken cancellationToken)
+ private async Task<List<LocalItem>> RetrieveItems(CancellationToken cancellationToken)
{
- if (_items == null)
- {
- _logger.Debug("Getting {0} from {1}", string.Join(MediaSync.PathSeparatorString, GetRemotePath().ToArray()), _provider.Name);
+ _logger.Debug("Getting {0} from {1}", string.Join(MediaSync.PathSeparatorString, GetRemotePath().ToArray()), _provider.Name);
- var fileResult = await _provider.GetFiles(new FileQuery
- {
- FullPath = GetRemotePath().ToArray()
+ var fileResult = await _provider.GetFiles(new FileQuery
+ {
+ FullPath = GetRemotePath().ToArray()
- }, _target, cancellationToken).ConfigureAwait(false);
+ }, _target, cancellationToken).ConfigureAwait(false);
- if (fileResult.Items.Length > 0)
- {
- using (var stream = await _provider.GetFile(fileResult.Items[0].Id, _target, new Progress<double>(), cancellationToken))
- {
- _items = _json.DeserializeFromStream<List<LocalItem>>(stream);
- }
- }
- else
+ if (fileResult.Items.Length > 0)
+ {
+ using (var stream = await _provider.GetFile(fileResult.Items[0].Id, _target, new Progress<double>(), cancellationToken))
{
- _items = new List<LocalItem>();
+ return _json.DeserializeFromStream<List<LocalItem>>(stream);
}
}
+
+ return new List<LocalItem>();
+ }
+
+ private async Task EnsureData(CancellationToken cancellationToken)
+ {
+ if (_items == null)
+ {
+ _items = await RetrieveItems(cancellationToken).ConfigureAwait(false);
+ }
}
- private async Task SaveData(CancellationToken cancellationToken)
+ private async Task SaveData(List<LocalItem> items, CancellationToken cancellationToken)
{
using (var stream = new MemoryStream())
{
- _json.SerializeToStream(_items, stream);
+ _json.SerializeToStream(items, stream);
// Save to sync provider
stream.Position = 0;
- await _provider.SendFile(stream, GetRemotePath(), _target, new Progress<double>(), cancellationToken).ConfigureAwait(false);
+ 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);
}
}
- private async Task<T> GetData<T>(Func<List<LocalItem>, T> dataFactory)
+ private async Task<T> GetData<T>(bool enableCache, Func<List<LocalItem>, T> dataFactory)
{
+ if (!enableCache)
+ {
+ var items = await RetrieveItems(CancellationToken.None).ConfigureAwait(false);
+ var newCache = items.ToList();
+ var result = dataFactory(items);
+ await UpdateCache(newCache).ConfigureAwait(false);
+ return result;
+ }
+
await _dataLock.WaitAsync().ConfigureAwait(false);
try
@@ -116,15 +131,20 @@ namespace MediaBrowser.Server.Implementations.Sync
private async Task UpdateData(Func<List<LocalItem>, List<LocalItem>> action)
{
+ var items = await RetrieveItems(CancellationToken.None).ConfigureAwait(false);
+ items = action(items);
+ await SaveData(items.ToList(), CancellationToken.None).ConfigureAwait(false);
+
+ await UpdateCache(null).ConfigureAwait(false);
+ }
+
+ private async Task UpdateCache(List<LocalItem> list)
+ {
await _dataLock.WaitAsync().ConfigureAwait(false);
try
{
- await EnsureData(CancellationToken.None).ConfigureAwait(false);
-
- _items = action(_items);
-
- await SaveData(CancellationToken.None).ConfigureAwait(false);
+ _items = list;
}
finally
{
@@ -134,7 +154,7 @@ namespace MediaBrowser.Server.Implementations.Sync
public Task<List<LocalItem>> GetLocalItems(SyncTarget target, string serverId)
{
- return GetData(items => items.Where(i => string.Equals(i.ServerId, serverId, StringComparison.OrdinalIgnoreCase)).ToList());
+ return GetData(false, items => items.Where(i => string.Equals(i.ServerId, serverId, StringComparison.OrdinalIgnoreCase)).ToList());
}
public Task AddOrUpdate(SyncTarget target, LocalItem item)
@@ -157,17 +177,17 @@ namespace MediaBrowser.Server.Implementations.Sync
public Task<LocalItem> Get(SyncTarget target, string id)
{
- return GetData(items => items.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.OrdinalIgnoreCase)));
+ return GetData(true, items => items.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.OrdinalIgnoreCase)));
}
public Task<List<LocalItem>> GetItems(SyncTarget target, string serverId, string itemId)
{
- return GetData(items => items.Where(i => string.Equals(i.ServerId, serverId, StringComparison.OrdinalIgnoreCase) && string.Equals(i.ItemId, itemId, StringComparison.OrdinalIgnoreCase)).ToList());
+ return GetData(true, items => items.Where(i => string.Equals(i.ServerId, serverId, StringComparison.OrdinalIgnoreCase) && string.Equals(i.ItemId, itemId, StringComparison.OrdinalIgnoreCase)).ToList());
}
public Task<List<LocalItem>> GetItemsBySyncJobItemId(SyncTarget target, string serverId, string syncJobItemId)
{
- return GetData(items => items.Where(i => string.Equals(i.ServerId, serverId, StringComparison.OrdinalIgnoreCase) && string.Equals(i.SyncJobItemId, syncJobItemId, StringComparison.OrdinalIgnoreCase)).ToList());
+ return GetData(false, items => items.Where(i => string.Equals(i.ServerId, serverId, StringComparison.OrdinalIgnoreCase) && string.Equals(i.SyncJobItemId, syncJobItemId, StringComparison.OrdinalIgnoreCase)).ToList());
}
}
}