aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-03 16:06:56 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-03 16:06:56 -0500
commit655c9ea7a173add232c737d1a648ad697c19f297 (patch)
treef3bd54c05a3f8dcad241f7c38d99307460f8d587 /MediaBrowser.Server.Implementations/Sync/SyncManager.cs
parent256990ac7ba8cd9efa7f37896c7e1f20d325cda8 (diff)
enforce user access to offline items
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs47
1 files changed, 47 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 6a4bc9cc4..749730f82 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -315,6 +315,10 @@ namespace MediaBrowser.Server.Implementations.Sync
{
_fileSystem.DeleteDirectory(path, true);
}
+ catch (DirectoryNotFoundException)
+ {
+
+ }
catch (Exception ex)
{
_logger.ErrorException("Error deleting directory {0}", ex, path);
@@ -664,9 +668,48 @@ namespace MediaBrowser.Server.Implementations.Sync
response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
+ var itemsOnDevice = request.LocalItemIds
+ .Except(response.ItemIdsToRemove)
+ .ToList();
+
+ SetUserAccess(request, response, itemsOnDevice);
+
return response;
}
+ private void SetUserAccess(SyncDataRequest request, SyncDataResponse response, List<string> itemIds)
+ {
+ var users = request.OfflineUserIds
+ .Select(_userManager.GetUserById)
+ .Where(i => i != null)
+ .ToList();
+
+ foreach (var itemId in itemIds)
+ {
+ var item = _libraryManager.GetItemById(itemId);
+
+ if (item != null)
+ {
+ var usersWithAccess = new List<User>();
+
+ foreach (var user in users)
+ {
+ if (IsUserVisible(item, user))
+ {
+ usersWithAccess.Add(user);
+ }
+ }
+
+ response.ItemUserAccess[itemId] = users.Select(i => i.Id.ToString("N")).ToList();
+ }
+ }
+ }
+
+ private bool IsUserVisible(BaseItem item, User user)
+ {
+ return item.IsVisibleStandalone(user);
+ }
+
private bool IsLibraryItemAvailable(BaseItem item)
{
if (item == null)
@@ -724,6 +767,10 @@ namespace MediaBrowser.Server.Implementations.Sync
{
_fileSystem.DeleteDirectory(path, true);
}
+ catch (DirectoryNotFoundException)
+ {
+
+ }
catch (Exception ex)
{
_logger.ErrorException("Error deleting directory {0}", ex, path);