mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-04 17:26:19 +00:00
enforce user access to offline items
This commit is contained in:
@@ -147,7 +147,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
var currentUser = user;
|
||||
|
||||
channels = channels
|
||||
.Where(i => i.IsParentalAllowed(currentUser))
|
||||
.Where(i => i.IsVisible(currentUser))
|
||||
.OrderBy(i =>
|
||||
{
|
||||
double number = 0;
|
||||
@@ -679,7 +679,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
{
|
||||
// Avoid implicitly captured closure
|
||||
var currentUser = user;
|
||||
programs = programs.Where(i => i.IsParentalAllowed(currentUser));
|
||||
programs = programs.Where(i => i.IsVisible(currentUser));
|
||||
}
|
||||
|
||||
var programList = programs.ToList();
|
||||
@@ -714,7 +714,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var currentUser = user;
|
||||
programs = programs.Where(i => i.IsParentalAllowed(currentUser));
|
||||
programs = programs.Where(i => i.IsVisible(currentUser));
|
||||
|
||||
if (query.IsAiring.HasValue)
|
||||
{
|
||||
|
||||
@@ -314,6 +314,10 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
try
|
||||
{
|
||||
_fileSystem.DeleteDirectory(path, true);
|
||||
}
|
||||
catch (DirectoryNotFoundException)
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -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)
|
||||
@@ -723,6 +766,10 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
try
|
||||
{
|
||||
_fileSystem.DeleteDirectory(path, true);
|
||||
}
|
||||
catch (DirectoryNotFoundException)
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -407,7 +407,6 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
if (!string.IsNullOrWhiteSpace(query.TargetId))
|
||||
{
|
||||
whereClauses.Add("TargetId=@TargetId");
|
||||
cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(query.UserId))
|
||||
{
|
||||
@@ -422,7 +421,7 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
var startIndex = query.StartIndex ?? 0;
|
||||
if (startIndex > 0)
|
||||
{
|
||||
whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobs ORDER BY DateLastModified DESC LIMIT {0})",
|
||||
whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobs ORDER BY (Select Max(DateLastModified) from SyncJobs where TargetId=@TargetId) DESC, DateLastModified DESC LIMIT {0})",
|
||||
startIndex.ToString(_usCulture)));
|
||||
}
|
||||
|
||||
@@ -431,7 +430,8 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||
cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
|
||||
}
|
||||
|
||||
cmd.CommandText += " ORDER BY DateLastModified DESC";
|
||||
cmd.CommandText += " ORDER BY (Select Max(DateLastModified) from SyncJobs where TargetId=@TargetId) DESC, DateLastModified DESC";
|
||||
cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
|
||||
|
||||
if (query.Limit.HasValue)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user