Fix merge conflicts with SyncPlay

This commit is contained in:
Patrick Barron 2020-05-26 20:52:05 -04:00
parent 01ce56016a
commit 7c823464bc
5 changed files with 36 additions and 71 deletions

View File

@ -3,13 +3,14 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using Microsoft.Extensions.Logging; using Jellyfin.Data.Entities;
using MediaBrowser.Controller.Entities; using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session; using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.SyncPlay; using MediaBrowser.Controller.SyncPlay;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.SyncPlay; using MediaBrowser.Model.SyncPlay;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.SyncPlay namespace Emby.Server.Implementations.SyncPlay
{ {
@ -102,14 +103,6 @@ namespace Emby.Server.Implementations.SyncPlay
_disposed = true; _disposed = true;
} }
private void CheckDisposed()
{
if (_disposed)
{
throw new ObjectDisposedException(GetType().Name);
}
}
private void OnSessionManagerSessionEnded(object sender, SessionEventArgs e) private void OnSessionManagerSessionEnded(object sender, SessionEventArgs e)
{ {
var session = e.SessionInfo; var session = e.SessionInfo;
@ -143,37 +136,26 @@ namespace Emby.Server.Implementations.SyncPlay
// Check ParentalRating access // Check ParentalRating access
var hasParentalRatingAccess = true; var hasParentalRatingAccess = true;
if (user.Policy.MaxParentalRating.HasValue) if (user.MaxParentalAgeRating.HasValue)
{ {
hasParentalRatingAccess = item.InheritedParentalRatingValue <= user.Policy.MaxParentalRating; hasParentalRatingAccess = item.InheritedParentalRatingValue <= user.MaxParentalAgeRating.Value;
} }
if (!user.Policy.EnableAllFolders && hasParentalRatingAccess) if (!user.HasPermission(PermissionKind.EnableAllFolders) && hasParentalRatingAccess)
{ {
var collections = _libraryManager.GetCollectionFolders(item).Select( var collections = _libraryManager.GetCollectionFolders(item).Select(
folder => folder.Id.ToString("N", CultureInfo.InvariantCulture) folder => folder.Id.ToString("N", CultureInfo.InvariantCulture));
);
var intersect = collections.Intersect(user.Policy.EnabledFolders); return collections.Intersect(user.GetPreference(PreferenceKind.EnabledFolders)).Any();
return intersect.Any();
} }
else
{
return hasParentalRatingAccess; return hasParentalRatingAccess;
} }
}
private Guid? GetSessionGroup(SessionInfo session) private Guid? GetSessionGroup(SessionInfo session)
{ {
ISyncPlayController group; _sessionToGroupMap.TryGetValue(session.Id, out var group);
_sessionToGroupMap.TryGetValue(session.Id, out group); return group?.GetGroupId();
if (group != null)
{
return group.GetGroupId();
}
else
{
return null;
}
} }
/// <inheritdoc /> /// <inheritdoc />
@ -181,7 +163,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
var user = _userManager.GetUserById(session.UserId); var user = _userManager.GetUserById(session.UserId);
if (user.Policy.SyncPlayAccess != SyncPlayAccess.CreateAndJoinGroups) if (user.SyncPlayAccess != SyncPlayAccess.CreateAndJoinGroups)
{ {
_logger.LogWarning("NewGroup: {0} does not have permission to create groups.", session.Id); _logger.LogWarning("NewGroup: {0} does not have permission to create groups.", session.Id);
@ -189,7 +171,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
Type = GroupUpdateType.CreateGroupDenied Type = GroupUpdateType.CreateGroupDenied
}; };
_sessionManager.SendSyncPlayGroupUpdate(session.Id.ToString(), error, CancellationToken.None); _sessionManager.SendSyncPlayGroupUpdate(session.Id, error, CancellationToken.None);
return; return;
} }
@ -212,7 +194,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
var user = _userManager.GetUserById(session.UserId); var user = _userManager.GetUserById(session.UserId);
if (user.Policy.SyncPlayAccess == SyncPlayAccess.None) if (user.SyncPlayAccess == SyncPlayAccess.None)
{ {
_logger.LogWarning("JoinGroup: {0} does not have access to SyncPlay.", session.Id); _logger.LogWarning("JoinGroup: {0} does not have access to SyncPlay.", session.Id);
@ -220,7 +202,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
Type = GroupUpdateType.JoinGroupDenied Type = GroupUpdateType.JoinGroupDenied
}; };
_sessionManager.SendSyncPlayGroupUpdate(session.Id.ToString(), error, CancellationToken.None); _sessionManager.SendSyncPlayGroupUpdate(session.Id, error, CancellationToken.None);
return; return;
} }
@ -237,7 +219,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
Type = GroupUpdateType.GroupDoesNotExist Type = GroupUpdateType.GroupDoesNotExist
}; };
_sessionManager.SendSyncPlayGroupUpdate(session.Id.ToString(), error, CancellationToken.None); _sessionManager.SendSyncPlayGroupUpdate(session.Id, error, CancellationToken.None);
return; return;
} }
@ -250,7 +232,7 @@ namespace Emby.Server.Implementations.SyncPlay
GroupId = group.GetGroupId().ToString(), GroupId = group.GetGroupId().ToString(),
Type = GroupUpdateType.LibraryAccessDenied Type = GroupUpdateType.LibraryAccessDenied
}; };
_sessionManager.SendSyncPlayGroupUpdate(session.Id.ToString(), error, CancellationToken.None); _sessionManager.SendSyncPlayGroupUpdate(session.Id, error, CancellationToken.None);
return; return;
} }
@ -285,7 +267,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
Type = GroupUpdateType.NotInGroup Type = GroupUpdateType.NotInGroup
}; };
_sessionManager.SendSyncPlayGroupUpdate(session.Id.ToString(), error, CancellationToken.None); _sessionManager.SendSyncPlayGroupUpdate(session.Id, error, CancellationToken.None);
return; return;
} }
@ -304,7 +286,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
var user = _userManager.GetUserById(session.UserId); var user = _userManager.GetUserById(session.UserId);
if (user.Policy.SyncPlayAccess == SyncPlayAccess.None) if (user.SyncPlayAccess == SyncPlayAccess.None)
{ {
return new List<GroupInfoView>(); return new List<GroupInfoView>();
} }
@ -334,7 +316,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
var user = _userManager.GetUserById(session.UserId); var user = _userManager.GetUserById(session.UserId);
if (user.Policy.SyncPlayAccess == SyncPlayAccess.None) if (user.SyncPlayAccess == SyncPlayAccess.None)
{ {
_logger.LogWarning("HandleRequest: {0} does not have access to SyncPlay.", session.Id); _logger.LogWarning("HandleRequest: {0} does not have access to SyncPlay.", session.Id);
@ -342,7 +324,7 @@ namespace Emby.Server.Implementations.SyncPlay
{ {
Type = GroupUpdateType.JoinGroupDenied Type = GroupUpdateType.JoinGroupDenied
}; };
_sessionManager.SendSyncPlayGroupUpdate(session.Id.ToString(), error, CancellationToken.None); _sessionManager.SendSyncPlayGroupUpdate(session.Id, error, CancellationToken.None);
return; return;
} }

View File

@ -61,6 +61,7 @@ namespace Jellyfin.Data.Entities
EnableAutoLogin = false; EnableAutoLogin = false;
PlayDefaultAudioTrack = true; PlayDefaultAudioTrack = true;
SubtitleMode = SubtitlePlaybackMode.Default; SubtitleMode = SubtitlePlaybackMode.Default;
SyncPlayAccess = SyncPlayAccess.CreateAndJoinGroups;
AddDefaultPermissions(); AddDefaultPermissions();
AddDefaultPreferences(); AddDefaultPreferences();
@ -319,6 +320,9 @@ namespace Jellyfin.Data.Entities
/// </summary> /// </summary>
public virtual ImageInfo ProfileImage { get; set; } public virtual ImageInfo ProfileImage { get; set; }
[Required]
public SyncPlayAccess SyncPlayAccess { get; set; }
/// <summary> /// <summary>
/// Gets or sets the row version. /// Gets or sets the row version.
/// </summary> /// </summary>

View File

@ -1,4 +1,4 @@
namespace MediaBrowser.Model.Configuration namespace Jellyfin.Data.Enums
{ {
/// <summary> /// <summary>
/// Enum SyncPlayAccess. /// Enum SyncPlayAccess.
@ -8,16 +8,16 @@ namespace MediaBrowser.Model.Configuration
/// <summary> /// <summary>
/// User can create groups and join them. /// User can create groups and join them.
/// </summary> /// </summary>
CreateAndJoinGroups, CreateAndJoinGroups = 0,
/// <summary> /// <summary>
/// User can only join already existing groups. /// User can only join already existing groups.
/// </summary> /// </summary>
JoinGroups, JoinGroups = 1,
/// <summary> /// <summary>
/// SyncPlay is disabled for the user. /// SyncPlay is disabled for the user.
/// </summary> /// </summary>
None None = 2
} }
} }

View File

@ -352,34 +352,12 @@ namespace Jellyfin.Server.Implementations.Users
EnabledChannels = user.GetPreference(PreferenceKind.EnabledChannels), EnabledChannels = user.GetPreference(PreferenceKind.EnabledChannels),
EnabledDevices = user.GetPreference(PreferenceKind.EnabledDevices), EnabledDevices = user.GetPreference(PreferenceKind.EnabledDevices),
EnabledFolders = user.GetPreference(PreferenceKind.EnabledFolders), EnabledFolders = user.GetPreference(PreferenceKind.EnabledFolders),
EnableContentDeletionFromFolders = user.GetPreference(PreferenceKind.EnableContentDeletionFromFolders) EnableContentDeletionFromFolders = user.GetPreference(PreferenceKind.EnableContentDeletionFromFolders),
SyncPlayAccess = user.SyncPlayAccess
} }
}; };
} }
/// <inheritdoc/>
public PublicUserDto GetPublicUserDto(User user, string remoteEndPoint = null)
{
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
bool hasConfiguredPassword = GetAuthenticationProvider(user).HasPassword(user);
bool hasConfiguredEasyPassword = !string.IsNullOrEmpty(GetAuthenticationProvider(user).GetEasyPasswordHash(user));
bool hasPassword = user.EnableLocalPassword &&
!string.IsNullOrEmpty(remoteEndPoint) &&
_networkManager.IsInLocalNetwork(remoteEndPoint) ? hasConfiguredEasyPassword : hasConfiguredPassword;
return new PublicUserDto
{
Name = user.Username,
HasPassword = hasPassword,
HasConfiguredPassword = hasConfiguredPassword
};
}
/// <inheritdoc/> /// <inheritdoc/>
public async Task<User> AuthenticateUser( public async Task<User> AuthenticateUser(
string username, string username,
@ -635,6 +613,7 @@ namespace Jellyfin.Server.Implementations.Users
user.PasswordResetProviderId = policy.PasswordResetProviderId; user.PasswordResetProviderId = policy.PasswordResetProviderId;
user.InvalidLoginAttemptCount = policy.InvalidLoginAttemptCount; user.InvalidLoginAttemptCount = policy.InvalidLoginAttemptCount;
user.LoginAttemptsBeforeLockout = maxLoginAttempts; user.LoginAttemptsBeforeLockout = maxLoginAttempts;
user.SyncPlayAccess = policy.SyncPlayAccess;
user.SetPermission(PermissionKind.IsAdministrator, policy.IsAdministrator); user.SetPermission(PermissionKind.IsAdministrator, policy.IsAdministrator);
user.SetPermission(PermissionKind.IsHidden, policy.IsHidden); user.SetPermission(PermissionKind.IsHidden, policy.IsHidden);
user.SetPermission(PermissionKind.IsDisabled, policy.IsDisabled); user.SetPermission(PermissionKind.IsDisabled, policy.IsDisabled);

View File

@ -1,10 +1,10 @@
#pragma warning disable CS1591 #pragma warning disable CS1591
using System; using System;
using System.Text.Json.Serialization;
using System.Xml.Serialization; using System.Xml.Serialization;
using Jellyfin.Data.Entities;
using Jellyfin.Data.Enums; using Jellyfin.Data.Enums;
using MediaBrowser.Model.Configuration;
using AccessSchedule = Jellyfin.Data.Entities.AccessSchedule;
namespace MediaBrowser.Model.Users namespace MediaBrowser.Model.Users
{ {