sync updates

pull/702/head
Luke Pulverenti 10 years ago
parent 4ea72584db
commit 1d5f1bc474

@ -39,8 +39,8 @@ namespace MediaBrowser.Api
[ApiMember(Name = "SendingUserId", Description = "Sending User Id", IsRequired = true, DataType = "string", ParameterType = "body", Verb = "POST")] [ApiMember(Name = "SendingUserId", Description = "Sending User Id", IsRequired = true, DataType = "string", ParameterType = "body", Verb = "POST")]
public string SendingUserId { get; set; } public string SendingUserId { get; set; }
[ApiMember(Name = "ExcludeLibraries", Description = "ExcludeLibraries", IsRequired = true, DataType = "string", ParameterType = "body", Verb = "POST")] [ApiMember(Name = "EnabledLibraries", Description = "EnabledLibraries", IsRequired = true, DataType = "string", ParameterType = "body", Verb = "POST")]
public string ExcludedLibraries { get; set; } public string EnabledLibraries { get; set; }
[ApiMember(Name = "EnabledChannels", Description = "EnabledChannels", IsRequired = true, DataType = "string", ParameterType = "body", Verb = "POST")] [ApiMember(Name = "EnabledChannels", Description = "EnabledChannels", IsRequired = true, DataType = "string", ParameterType = "body", Verb = "POST")]
public string EnabledChannels { get; set; } public string EnabledChannels { get; set; }
@ -91,7 +91,7 @@ namespace MediaBrowser.Api
public object Post(CreateConnectInvite request) public object Post(CreateConnectInvite request)
{ {
var excludeLibraries = (request.ExcludedLibraries ?? string.Empty) var enabledLibraries = (request.EnabledLibraries ?? string.Empty)
.Split(',') .Split(',')
.Where(i => !string.IsNullOrWhiteSpace(i)) .Where(i => !string.IsNullOrWhiteSpace(i))
.ToArray(); .ToArray();
@ -105,7 +105,7 @@ namespace MediaBrowser.Api
{ {
ConnectUserName = request.ConnectUsername, ConnectUserName = request.ConnectUsername,
SendingUserId = request.SendingUserId, SendingUserId = request.SendingUserId,
ExcludedLibraries = excludeLibraries, EnabledLibraries = enabledLibraries,
EnabledChannels = enabledChannels, EnabledChannels = enabledChannels,
EnableLiveTv = request.EnableLiveTv EnableLiveTv = request.EnableLiveTv
}); });

@ -1,4 +1,5 @@
using MediaBrowser.Model.Extensions; using MediaBrowser.Controller.Devices;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
@ -66,14 +67,16 @@ namespace MediaBrowser.Api.Playback
protected ILiveTvManager LiveTvManager { get; private set; } protected ILiveTvManager LiveTvManager { get; private set; }
protected IDlnaManager DlnaManager { get; private set; } protected IDlnaManager DlnaManager { get; private set; }
protected IDeviceManager DeviceManager { get; private set; }
protected IChannelManager ChannelManager { get; private set; } protected IChannelManager ChannelManager { get; private set; }
protected ISubtitleEncoder SubtitleEncoder { get; private set; } protected ISubtitleEncoder SubtitleEncoder { get; private set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="BaseStreamingService" /> class. /// Initializes a new instance of the <see cref="BaseStreamingService" /> class.
/// </summary> /// </summary>
protected BaseStreamingService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder) protected BaseStreamingService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager)
{ {
DeviceManager = deviceManager;
SubtitleEncoder = subtitleEncoder; SubtitleEncoder = subtitleEncoder;
ChannelManager = channelManager; ChannelManager = channelManager;
DlnaManager = dlnaManager; DlnaManager = dlnaManager;
@ -2030,9 +2033,26 @@ namespace MediaBrowser.Api.Playback
headers[key] = Request.Headers[key]; headers[key] = Request.Headers[key];
} }
state.DeviceProfile = string.IsNullOrWhiteSpace(state.Request.DeviceProfileId) ? if (!string.IsNullOrWhiteSpace(state.Request.DeviceProfileId))
DlnaManager.GetProfile(headers) : {
DlnaManager.GetProfile(state.Request.DeviceProfileId); state.DeviceProfile = DlnaManager.GetProfile(state.Request.DeviceProfileId);
}
else
{
if (!string.IsNullOrWhiteSpace(state.Request.DeviceId))
{
var caps = DeviceManager.GetCapabilities(state.Request.DeviceId);
if (caps != null)
{
state.DeviceProfile = caps.DeviceProfile;
}
else
{
state.DeviceProfile = DlnaManager.GetProfile(headers);
}
}
}
var profile = state.DeviceProfile; var profile = state.DeviceProfile;

@ -1,20 +1,20 @@
using MediaBrowser.Model.Extensions; using MediaBrowser.Common.IO;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Model.Net;
namespace MediaBrowser.Api.Playback.Hls namespace MediaBrowser.Api.Playback.Hls
{ {
@ -23,8 +23,7 @@ namespace MediaBrowser.Api.Playback.Hls
/// </summary> /// </summary>
public abstract class BaseHlsService : BaseStreamingService public abstract class BaseHlsService : BaseStreamingService
{ {
protected BaseHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder) protected BaseHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
{ {
} }

@ -1,4 +1,5 @@
using MediaBrowser.Model.Extensions; using MediaBrowser.Controller.Devices;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
@ -62,38 +63,31 @@ namespace MediaBrowser.Api.Playback.Hls
public class DynamicHlsService : BaseHlsService public class DynamicHlsService : BaseHlsService
{ {
protected INetworkManager NetworkManager { get; private set; } public DynamicHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager, INetworkManager networkManager) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager)
public DynamicHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, INetworkManager networkManager)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
{ {
NetworkManager = networkManager; NetworkManager = networkManager;
} }
public object Get(GetMasterHlsVideoStream request) protected INetworkManager NetworkManager { get; private set; }
{
var result = GetAsync(request, "GET").Result;
return result; public Task<object> Get(GetMasterHlsVideoStream request)
{
return GetAsync(request, "GET");
} }
public object Head(GetMasterHlsVideoStream request) public Task<object> Head(GetMasterHlsVideoStream request)
{ {
var result = GetAsync(request, "HEAD").Result; return GetAsync(request, "HEAD");
return result;
} }
public object Get(GetMainHlsVideoStream request) public Task<object> Get(GetMainHlsVideoStream request)
{ {
var result = GetPlaylistAsync(request, "main").Result; return GetPlaylistAsync(request, "main");
return result;
} }
public object Get(GetDynamicHlsVideoSegment request) public Task<object> Get(GetDynamicHlsVideoSegment request)
{ {
return GetDynamicSegment(request, request.SegmentId).Result; return GetDynamicSegment(request, request.SegmentId);
} }
private async Task<object> GetDynamicSegment(VideoStreamRequest request, string segmentId) private async Task<object> GetDynamicSegment(VideoStreamRequest request, string segmentId)

@ -2,6 +2,7 @@
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
@ -50,14 +51,13 @@ namespace MediaBrowser.Api.Playback.Hls
public class MpegDashService : BaseHlsService public class MpegDashService : BaseHlsService
{ {
protected INetworkManager NetworkManager { get; private set; } public MpegDashService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager, INetworkManager networkManager) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager)
public MpegDashService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, INetworkManager networkManager)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
{ {
NetworkManager = networkManager; NetworkManager = networkManager;
} }
protected INetworkManager NetworkManager { get; private set; }
public object Get(GetMasterManifest request) public object Get(GetMasterManifest request)
{ {
var result = GetAsync(request, "GET").Result; var result = GetAsync(request, "GET").Result;

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
@ -56,8 +57,7 @@ namespace MediaBrowser.Api.Playback.Hls
/// </summary> /// </summary>
public class VideoHlsService : BaseHlsService public class VideoHlsService : BaseHlsService
{ {
public VideoHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder) public VideoHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
{ {
} }

@ -2,6 +2,7 @@
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -31,7 +32,7 @@ namespace MediaBrowser.Api.Playback.Progressive
/// </summary> /// </summary>
public class AudioService : BaseProgressiveStreamingService public class AudioService : BaseProgressiveStreamingService
{ {
public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IImageProcessor imageProcessor, IHttpClient httpClient) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, imageProcessor, httpClient) public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager, IImageProcessor imageProcessor, IHttpClient httpClient) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager, imageProcessor, httpClient)
{ {
} }

@ -1,8 +1,8 @@
using System.Linq; using MediaBrowser.Common.IO;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -15,6 +15,7 @@ using ServiceStack.Web;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -28,8 +29,7 @@ namespace MediaBrowser.Api.Playback.Progressive
protected readonly IImageProcessor ImageProcessor; protected readonly IImageProcessor ImageProcessor;
protected readonly IHttpClient HttpClient; protected readonly IHttpClient HttpClient;
protected BaseProgressiveStreamingService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IImageProcessor imageProcessor, IHttpClient httpClient) protected BaseProgressiveStreamingService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager, IImageProcessor imageProcessor, IHttpClient httpClient) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
{ {
ImageProcessor = imageProcessor; ImageProcessor = imageProcessor;
HttpClient = httpClient; HttpClient = httpClient;

@ -2,6 +2,7 @@ using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -62,7 +63,7 @@ namespace MediaBrowser.Api.Playback.Progressive
/// </summary> /// </summary>
public class VideoService : BaseProgressiveStreamingService public class VideoService : BaseProgressiveStreamingService
{ {
public VideoService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IImageProcessor imageProcessor, IHttpClient httpClient) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, imageProcessor, httpClient) public VideoService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, IDeviceManager deviceManager, IImageProcessor imageProcessor, IHttpClient httpClient) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder, deviceManager, imageProcessor, httpClient)
{ {
} }

@ -243,12 +243,12 @@ namespace MediaBrowser.Api.Session
[ApiMember(Name = "SupportsSync", Description = "Determines whether sync is supported.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")] [ApiMember(Name = "SupportsSync", Description = "Determines whether sync is supported.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")]
public bool SupportsSync { get; set; } public bool SupportsSync { get; set; }
[ApiMember(Name = "SupportsUniqueIdentifier", Description = "Determines whether the device supports a unique identifier.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")] [ApiMember(Name = "SupportsPersistentIdentifier", Description = "Determines whether the device supports a unique identifier.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")]
public bool SupportsUniqueIdentifier { get; set; } public bool SupportsPersistentIdentifier { get; set; }
public PostCapabilities() public PostCapabilities()
{ {
SupportsUniqueIdentifier = true; SupportsPersistentIdentifier = true;
} }
} }
@ -561,7 +561,7 @@ namespace MediaBrowser.Api.Session
SupportsSync = request.SupportsSync, SupportsSync = request.SupportsSync,
SupportsUniqueIdentifier = request.SupportsUniqueIdentifier SupportsPersistentIdentifier = request.SupportsPersistentIdentifier
}); });
} }

@ -303,10 +303,7 @@ namespace MediaBrowser.Controller.Entities
{ {
if (this is ICollectionFolder) if (this is ICollectionFolder)
{ {
if (user.Policy.BlockedMediaFolders.Contains(Id.ToString("N"), StringComparer.OrdinalIgnoreCase) || if (!user.Policy.EnableAllFolders && !user.Policy.EnabledFolders.Contains(Id.ToString("N"), StringComparer.OrdinalIgnoreCase))
// Backwards compatibility
user.Policy.BlockedMediaFolders.Contains(Name, StringComparer.OrdinalIgnoreCase))
{ {
return false; return false;
} }

@ -7,13 +7,13 @@ namespace MediaBrowser.Model.Connect
public string UserName { get; set; } public string UserName { get; set; }
public string ImageUrl { get; set; } public string ImageUrl { get; set; }
public string Id { get; set; } public string Id { get; set; }
public string[] ExcludedLibraries { get; set; } public string[] EnabledLibraries { get; set; }
public bool EnableLiveTv { get; set; } public bool EnableLiveTv { get; set; }
public string[] EnabledChannels { get; set; } public string[] EnabledChannels { get; set; }
public ConnectAuthorization() public ConnectAuthorization()
{ {
ExcludedLibraries = new string[] { }; EnabledLibraries = new string[] { };
EnabledChannels = new string[] { }; EnabledChannels = new string[] { };
} }
} }

@ -5,13 +5,13 @@ namespace MediaBrowser.Model.Connect
{ {
public string SendingUserId { get; set; } public string SendingUserId { get; set; }
public string ConnectUserName { get; set; } public string ConnectUserName { get; set; }
public string[] ExcludedLibraries { get; set; } public string[] EnabledLibraries { get; set; }
public bool EnableLiveTv { get; set; } public bool EnableLiveTv { get; set; }
public string[] EnabledChannels { get; set; } public string[] EnabledChannels { get; set; }
public ConnectAuthorizationRequest() public ConnectAuthorizationRequest()
{ {
ExcludedLibraries = new string[] { }; EnabledLibraries = new string[] { };
EnabledChannels = new string[] { }; EnabledChannels = new string[] { };
} }
} }

@ -12,7 +12,7 @@ namespace MediaBrowser.Model.Devices
/// Gets or sets a value indicating whether [supports unique identifier]. /// Gets or sets a value indicating whether [supports unique identifier].
/// </summary> /// </summary>
/// <value><c>null</c> if [supports unique identifier] contains no value, <c>true</c> if [supports unique identifier]; otherwise, <c>false</c>.</value> /// <value><c>null</c> if [supports unique identifier] contains no value, <c>true</c> if [supports unique identifier]; otherwise, <c>false</c>.</value>
public bool? SupportsUniqueIdentifier { get; set; } public bool? SupportsPersistentIdentifier { get; set; }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether [supports synchronize]. /// Gets or sets a value indicating whether [supports synchronize].
/// </summary> /// </summary>

@ -14,16 +14,21 @@ namespace MediaBrowser.Model.Session
public string MessageCallbackUrl { get; set; } public string MessageCallbackUrl { get; set; }
public bool SupportsContentUploading { get; set; } public bool SupportsContentUploading { get; set; }
public bool SupportsUniqueIdentifier { get; set; } public bool SupportsPersistentIdentifier { get; set; }
public bool SupportsSync { get; set; } public bool SupportsSync { get; set; }
public DeviceProfile DeviceProfile { get; set; } public DeviceProfile DeviceProfile { get; set; }
/// <summary>
/// Usage should be migrated to SupportsPersistentIdentifier. Keeping this to preserve data.
/// </summary>
public bool? SupportsUniqueIdentifier { get; set; }
public ClientCapabilities() public ClientCapabilities()
{ {
PlayableMediaTypes = new List<string>(); PlayableMediaTypes = new List<string>();
SupportedCommands = new List<string>(); SupportedCommands = new List<string>();
SupportsUniqueIdentifier = true; SupportsPersistentIdentifier = true;
} }
} }
} }

@ -54,6 +54,9 @@ namespace MediaBrowser.Model.Users
public string[] EnabledChannels { get; set; } public string[] EnabledChannels { get; set; }
public bool EnableAllChannels { get; set; } public bool EnableAllChannels { get; set; }
public string[] EnabledFolders { get; set; }
public bool EnableAllFolders { get; set; }
public UserPolicy() public UserPolicy()
{ {
@ -62,9 +65,6 @@ namespace MediaBrowser.Model.Users
EnableLiveTvAccess = true; EnableLiveTvAccess = true;
EnableSharedDeviceControl = true; EnableSharedDeviceControl = true;
EnabledChannels = new string[] { };
BlockedMediaFolders = new string[] { };
BlockedTags = new string[] { }; BlockedTags = new string[] { };
BlockUnratedItems = new UnratedItem[] { }; BlockUnratedItems = new UnratedItem[] { };
@ -72,6 +72,12 @@ namespace MediaBrowser.Model.Users
AccessSchedules = new AccessSchedule[] { }; AccessSchedules = new AccessSchedule[] { };
EnableAllChannels = true;
EnabledChannels = new string[] { };
EnableAllFolders = true;
EnabledFolders = new string[] { };
EnabledDevices = new string[] { }; EnabledDevices = new string[] { };
EnableAllDevices = true; EnableAllDevices = true;
} }

@ -572,7 +572,7 @@ namespace MediaBrowser.Server.Implementations.Connect
Id = response.Id, Id = response.Id,
ImageUrl = response.UserImageUrl, ImageUrl = response.UserImageUrl,
UserName = response.UserName, UserName = response.UserName,
ExcludedLibraries = request.ExcludedLibraries, EnabledLibraries = request.EnabledLibraries,
EnabledChannels = request.EnabledChannels, EnabledChannels = request.EnabledChannels,
EnableLiveTv = request.EnableLiveTv, EnableLiveTv = request.EnableLiveTv,
AccessToken = accessToken AccessToken = accessToken
@ -833,10 +833,13 @@ namespace MediaBrowser.Server.Implementations.Connect
if (currentPendingEntry != null) if (currentPendingEntry != null)
{ {
user.Policy.EnableLiveTvAccess = currentPendingEntry.EnableLiveTv; user.Policy.EnabledFolders = currentPendingEntry.EnabledLibraries;
user.Policy.BlockedMediaFolders = currentPendingEntry.ExcludedLibraries; user.Policy.EnableAllFolders = false;
user.Policy.EnabledChannels = currentPendingEntry.EnabledChannels; user.Policy.EnabledChannels = currentPendingEntry.EnabledChannels;
user.Policy.EnableAllChannels = false; user.Policy.EnableAllChannels = false;
user.Policy.EnableLiveTvAccess = currentPendingEntry.EnableLiveTv;
} }
await _userManager.UpdateConfiguration(user.Id.ToString("N"), user.Configuration); await _userManager.UpdateConfiguration(user.Id.ToString("N"), user.Configuration);
@ -964,7 +967,7 @@ namespace MediaBrowser.Server.Implementations.Connect
ConnectUserId = i.ConnectUserId, ConnectUserId = i.ConnectUserId,
EnableLiveTv = i.EnableLiveTv, EnableLiveTv = i.EnableLiveTv,
EnabledChannels = i.EnabledChannels, EnabledChannels = i.EnabledChannels,
ExcludedLibraries = i.ExcludedLibraries, EnabledLibraries = i.EnabledLibraries,
Id = i.Id, Id = i.Id,
ImageUrl = i.ImageUrl, ImageUrl = i.ImageUrl,
UserName = i.UserName UserName = i.UserName

@ -100,11 +100,16 @@ namespace MediaBrowser.Server.Implementations.Devices
devices = devices.Where(i => GetCapabilities(i.Id).SupportsSync == val); devices = devices.Where(i => GetCapabilities(i.Id).SupportsSync == val);
} }
if (query.SupportsUniqueIdentifier.HasValue) if (query.SupportsPersistentIdentifier.HasValue)
{ {
var val = query.SupportsUniqueIdentifier.Value; var val = query.SupportsPersistentIdentifier.Value;
devices = devices.Where(i => GetCapabilities(i.Id).SupportsUniqueIdentifier == val); devices = devices.Where(i =>
{
var caps = GetCapabilities(i.Id);
var deviceVal = caps.SupportsUniqueIdentifier ?? caps.SupportsPersistentIdentifier;
return deviceVal == val;
});
} }
if (!string.IsNullOrWhiteSpace(query.UserId)) if (!string.IsNullOrWhiteSpace(query.UserId))
@ -212,7 +217,7 @@ namespace MediaBrowser.Server.Implementations.Devices
{ {
var capabilities = GetCapabilities(deviceId); var capabilities = GetCapabilities(deviceId);
if (capabilities.SupportsUniqueIdentifier) if (capabilities != null && capabilities.SupportsPersistentIdentifier)
{ {
return false; return false;
} }

@ -73,10 +73,11 @@ namespace MediaBrowser.Server.Implementations.Library
private readonly Func<IDtoService> _dtoServiceFactory; private readonly Func<IDtoService> _dtoServiceFactory;
private readonly Func<IConnectManager> _connectFactory; private readonly Func<IConnectManager> _connectFactory;
private readonly Func<IChannelManager> _channelManager; private readonly Func<IChannelManager> _channelManager;
private readonly Func<ILibraryManager> _libraryManager;
private readonly IServerApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository, IXmlSerializer xmlSerializer, INetworkManager networkManager, Func<IImageProcessor> imageProcessorFactory, Func<IDtoService> dtoServiceFactory, Func<IConnectManager> connectFactory, IServerApplicationHost appHost, IJsonSerializer jsonSerializer, IFileSystem fileSystem, Func<IChannelManager> channelManager) public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository, IXmlSerializer xmlSerializer, INetworkManager networkManager, Func<IImageProcessor> imageProcessorFactory, Func<IDtoService> dtoServiceFactory, Func<IConnectManager> connectFactory, IServerApplicationHost appHost, IJsonSerializer jsonSerializer, IFileSystem fileSystem, Func<IChannelManager> channelManager, Func<ILibraryManager> libraryManager)
{ {
_logger = logger; _logger = logger;
UserRepository = userRepository; UserRepository = userRepository;
@ -89,6 +90,7 @@ namespace MediaBrowser.Server.Implementations.Library
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
_fileSystem = fileSystem; _fileSystem = fileSystem;
_channelManager = channelManager; _channelManager = channelManager;
_libraryManager = libraryManager;
ConfigurationManager = configurationManager; ConfigurationManager = configurationManager;
Users = new List<User>(); Users = new List<User>();
@ -173,6 +175,7 @@ namespace MediaBrowser.Server.Implementations.Library
{ {
await DoPolicyMigration(user).ConfigureAwait(false); await DoPolicyMigration(user).ConfigureAwait(false);
await DoChannelMigration(user).ConfigureAwait(false); await DoChannelMigration(user).ConfigureAwait(false);
await DoLibraryMigration(user).ConfigureAwait(false);
} }
// If there are no local users with admin rights, make them all admins // If there are no local users with admin rights, make them all admins
@ -389,6 +392,39 @@ namespace MediaBrowser.Server.Implementations.Library
} }
} }
private async Task DoLibraryMigration(User user)
{
if (user.Policy.BlockedMediaFolders != null)
{
if (user.Policy.BlockedMediaFolders.Length > 0)
{
user.Policy.EnableAllFolders = false;
try
{
user.Policy.EnabledFolders = _libraryManager().RootFolder
.Children
.Where(i => !user.Policy.BlockedMediaFolders.Contains(i.Name, StringComparer.OrdinalIgnoreCase) && !user.Policy.BlockedMediaFolders.Contains(i.Id.ToString("N"), StringComparer.OrdinalIgnoreCase))
.Select(i => i.Id.ToString("N"))
.ToArray();
}
catch
{
user.Policy.EnabledFolders = new string[] { };
}
}
else
{
user.Policy.EnableAllFolders = true;
user.Policy.EnabledFolders = new string[] { };
}
user.Policy.BlockedMediaFolders = null;
await UpdateUserPolicy(user, user.Policy, false);
}
}
public UserDto GetUserDto(User user, string remoteEndPoint = null) public UserDto GetUserDto(User user, string remoteEndPoint = null)
{ {
if (user == null) if (user == null)

@ -6,6 +6,8 @@
"Administrator": "Administrator", "Administrator": "Administrator",
"Password": "Password", "Password": "Password",
"DeleteImage": "Delete Image", "DeleteImage": "Delete Image",
"MessageThankYouForSupporting": "Thank you for supporting Media Browser.",
"MessagePleaseSupportMediaBrowser": "Please support Media Browser.",
"DeleteImageConfirmation": "Are you sure you wish to delete this image?", "DeleteImageConfirmation": "Are you sure you wish to delete this image?",
"FileReadCancelled": "The file read has been canceled.", "FileReadCancelled": "The file read has been canceled.",
"FileNotFound": "File not found.", "FileNotFound": "File not found.",
@ -219,6 +221,7 @@
"ButtonResume": "Resume", "ButtonResume": "Resume",
"HeaderScenes": "Scenes", "HeaderScenes": "Scenes",
"HeaderAudioTracks": "Audio Tracks", "HeaderAudioTracks": "Audio Tracks",
"HeaderLibraries": "Libraries",
"LabelUnknownLanguage": "Unknown language", "LabelUnknownLanguage": "Unknown language",
"HeaderSubtitles": "Subtitles", "HeaderSubtitles": "Subtitles",
"HeaderVideoQuality": "Video Quality", "HeaderVideoQuality": "Video Quality",

@ -79,6 +79,7 @@
"ReferToMediaLibraryWiki": "Refer to the media library wiki.", "ReferToMediaLibraryWiki": "Refer to the media library wiki.",
"LabelCountry": "Country:", "LabelCountry": "Country:",
"LabelLanguage": "Language:", "LabelLanguage": "Language:",
"ButtonJoinTheDevelopmentTeam": "Join the Development Team",
"HeaderPreferredMetadataLanguage": "Preferred metadata language:", "HeaderPreferredMetadataLanguage": "Preferred metadata language:",
"LabelSaveLocalMetadata": "Save artwork and metadata into media folders", "LabelSaveLocalMetadata": "Save artwork and metadata into media folders",
"LabelSaveLocalMetadataHelp": "Saving artwork and metadata directly into media folders will put them in a place where they can be easily edited.", "LabelSaveLocalMetadataHelp": "Saving artwork and metadata directly into media folders will put them in a place where they can be easily edited.",
@ -97,6 +98,7 @@
"HeaderDeviceAccess": "Device Access", "HeaderDeviceAccess": "Device Access",
"OptionEnableAccessFromAllDevices": "Enable access from all devices", "OptionEnableAccessFromAllDevices": "Enable access from all devices",
"OptionEnableAccessToAllChannels": "Enable access to all channels", "OptionEnableAccessToAllChannels": "Enable access to all channels",
"OptionEnableAccessToAllLibraries": "Enable access to all libraries",
"DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.",
"LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons",
"LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons",

@ -407,7 +407,7 @@ namespace MediaBrowser.Server.Startup.Common
SyncRepository = await GetSyncRepository().ConfigureAwait(false); SyncRepository = await GetSyncRepository().ConfigureAwait(false);
RegisterSingleInstance(SyncRepository); RegisterSingleInstance(SyncRepository);
UserManager = new UserManager(LogManager.GetLogger("UserManager"), ServerConfigurationManager, UserRepository, XmlSerializer, NetworkManager, () => ImageProcessor, () => DtoService, () => ConnectManager, this, JsonSerializer, FileSystemManager, () => ChannelManager); UserManager = new UserManager(LogManager.GetLogger("UserManager"), ServerConfigurationManager, UserRepository, XmlSerializer, NetworkManager, () => ImageProcessor, () => DtoService, () => ConnectManager, this, JsonSerializer, FileSystemManager, () => ChannelManager, () => LibraryManager);
RegisterSingleInstance(UserManager); RegisterSingleInstance(UserManager);
LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataManager, () => LibraryMonitor, FileSystemManager, () => ProviderManager); LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataManager, () => LibraryMonitor, FileSystemManager, () => ProviderManager);

Loading…
Cancel
Save