diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-02-03 16:06:56 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-02-03 16:06:56 -0500 |
| commit | 655c9ea7a173add232c737d1a648ad697c19f297 (patch) | |
| tree | f3bd54c05a3f8dcad241f7c38d99307460f8d587 /MediaBrowser.Server.Implementations/Sync/SyncManager.cs | |
| parent | 256990ac7ba8cd9efa7f37896c7e1f20d325cda8 (diff) | |
enforce user access to offline items
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncManager.cs | 47 |
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); |
