update task buttons
This commit is contained in:
parent
7bc370bdc7
commit
b7e5e21c97
|
@ -4,6 +4,7 @@ using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Controller.Session;
|
using MediaBrowser.Controller.Session;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
using ServiceStack.Text.Controller;
|
||||||
using ServiceStack.Web;
|
using ServiceStack.Web;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -143,7 +144,7 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(parentId))
|
if (!string.IsNullOrEmpty(parentId))
|
||||||
{
|
{
|
||||||
var folder = (Folder) libraryManager.GetItemById(new Guid(parentId));
|
var folder = (Folder)libraryManager.GetItemById(new Guid(parentId));
|
||||||
|
|
||||||
if (userId.HasValue)
|
if (userId.HasValue)
|
||||||
{
|
{
|
||||||
|
@ -287,6 +288,20 @@ namespace MediaBrowser.Api
|
||||||
}) ?? name;
|
}) ?? name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected string GetPathValue(int index)
|
||||||
|
{
|
||||||
|
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
||||||
|
var first = pathInfo.GetArgumentValue<string>(0);
|
||||||
|
|
||||||
|
// backwards compatibility
|
||||||
|
if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pathInfo.GetArgumentValue<string>(index);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the name of the item by.
|
/// Gets the name of the item by.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -294,7 +309,6 @@ namespace MediaBrowser.Api
|
||||||
/// <param name="type">The type.</param>
|
/// <param name="type">The type.</param>
|
||||||
/// <param name="libraryManager">The library manager.</param>
|
/// <param name="libraryManager">The library manager.</param>
|
||||||
/// <returns>Task{BaseItem}.</returns>
|
/// <returns>Task{BaseItem}.</returns>
|
||||||
/// <exception cref="System.ArgumentException"></exception>
|
|
||||||
protected BaseItem GetItemByName(string name, string type, ILibraryManager libraryManager)
|
protected BaseItem GetItemByName(string name, string type, ILibraryManager libraryManager)
|
||||||
{
|
{
|
||||||
BaseItem item;
|
BaseItem item;
|
||||||
|
|
|
@ -143,8 +143,7 @@ namespace MediaBrowser.Api
|
||||||
|
|
||||||
public void Post(UpdateNamedConfiguration request)
|
public void Post(UpdateNamedConfiguration request)
|
||||||
{
|
{
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var key = GetPathValue(2);
|
||||||
var key = pathInfo.GetArgumentValue<string>(2);
|
|
||||||
|
|
||||||
var configurationType = _configurationManager.GetConfigurationType(key);
|
var configurationType = _configurationManager.GetConfigurationType(key);
|
||||||
var configuration = _jsonSerializer.DeserializeFromStream(request.RequestStream, configurationType);
|
var configuration = _jsonSerializer.DeserializeFromStream(request.RequestStream, configurationType);
|
||||||
|
|
|
@ -120,8 +120,7 @@ namespace MediaBrowser.Api.Dlna
|
||||||
|
|
||||||
private async Task<ControlResponse> PostAsync(Stream requestStream, IUpnpService service)
|
private async Task<ControlResponse> PostAsync(Stream requestStream, IUpnpService service)
|
||||||
{
|
{
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var id = GetPathValue(2);
|
||||||
var id = pathInfo.GetArgumentValue<string>(2);
|
|
||||||
|
|
||||||
using (var reader = new StreamReader(requestStream))
|
using (var reader = new StreamReader(requestStream))
|
||||||
{
|
{
|
||||||
|
|
|
@ -396,8 +396,7 @@ namespace MediaBrowser.Api.Images
|
||||||
|
|
||||||
public object Get(GetItemByNameImage request)
|
public object Get(GetItemByNameImage request)
|
||||||
{
|
{
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var type = GetPathValue(0);
|
||||||
var type = pathInfo.GetArgumentValue<string>(0);
|
|
||||||
|
|
||||||
var item = GetItemByName(request.Name, type, _libraryManager);
|
var item = GetItemByName(request.Name, type, _libraryManager);
|
||||||
|
|
||||||
|
@ -406,8 +405,7 @@ namespace MediaBrowser.Api.Images
|
||||||
|
|
||||||
public object Head(GetItemByNameImage request)
|
public object Head(GetItemByNameImage request)
|
||||||
{
|
{
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var type = GetPathValue(0);
|
||||||
var type = pathInfo.GetArgumentValue<string>(0);
|
|
||||||
|
|
||||||
var item = GetItemByName(request.Name, type, _libraryManager);
|
var item = GetItemByName(request.Name, type, _libraryManager);
|
||||||
|
|
||||||
|
@ -420,10 +418,9 @@ namespace MediaBrowser.Api.Images
|
||||||
/// <param name="request">The request.</param>
|
/// <param name="request">The request.</param>
|
||||||
public void Post(PostUserImage request)
|
public void Post(PostUserImage request)
|
||||||
{
|
{
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var id = new Guid(GetPathValue(1));
|
||||||
var id = new Guid(pathInfo.GetArgumentValue<string>(1));
|
|
||||||
|
|
||||||
request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue<string>(3), true);
|
request.Type = (ImageType)Enum.Parse(typeof(ImageType), GetPathValue(3), true);
|
||||||
|
|
||||||
var item = _userManager.GetUserById(id);
|
var item = _userManager.GetUserById(id);
|
||||||
|
|
||||||
|
@ -438,10 +435,9 @@ namespace MediaBrowser.Api.Images
|
||||||
/// <param name="request">The request.</param>
|
/// <param name="request">The request.</param>
|
||||||
public void Post(PostItemImage request)
|
public void Post(PostItemImage request)
|
||||||
{
|
{
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var id = new Guid(GetPathValue(1));
|
||||||
var id = new Guid(pathInfo.GetArgumentValue<string>(1));
|
|
||||||
|
|
||||||
request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue<string>(3), true);
|
request.Type = (ImageType)Enum.Parse(typeof(ImageType), GetPathValue(3), true);
|
||||||
|
|
||||||
var item = _libraryManager.GetItemById(id);
|
var item = _libraryManager.GetItemById(id);
|
||||||
|
|
||||||
|
|
|
@ -824,7 +824,7 @@ namespace MediaBrowser.Api.Playback
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -236,8 +236,7 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
|
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
|
||||||
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
|
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var id = new Guid(GetPathValue(1));
|
||||||
var id = new Guid(pathInfo.GetArgumentValue<string>(1));
|
|
||||||
|
|
||||||
var plugin = _appHost.Plugins.First(p => p.Id == id);
|
var plugin = _appHost.Plugins.First(p => p.Id == id);
|
||||||
|
|
||||||
|
|
|
@ -224,8 +224,7 @@ namespace MediaBrowser.Api.ScheduledTasks
|
||||||
{
|
{
|
||||||
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
|
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
|
||||||
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
|
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var id = GetPathValue(1);
|
||||||
var id = pathInfo.GetArgumentValue<string>(1);
|
|
||||||
|
|
||||||
var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, id));
|
var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, id));
|
||||||
|
|
||||||
|
|
|
@ -449,8 +449,7 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
|
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
|
||||||
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
|
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
|
||||||
var pathInfo = PathInfo.Parse(Request.PathInfo);
|
var id = new Guid(GetPathValue(1));
|
||||||
var id = new Guid(pathInfo.GetArgumentValue<string>(1));
|
|
||||||
|
|
||||||
var dtoUser = request;
|
var dtoUser = request;
|
||||||
|
|
||||||
|
|
|
@ -301,7 +301,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
public override bool IsVisible(User user)
|
public override bool IsVisible(User user)
|
||||||
{
|
{
|
||||||
if (this is ICollectionFolder)
|
if (this is ICollectionFolder && !(this is BasePluginFolder))
|
||||||
{
|
{
|
||||||
if (user.Policy.BlockedMediaFolders != null)
|
if (user.Policy.BlockedMediaFolders != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -10,10 +8,5 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface ISupportsBoxSetGrouping
|
public interface ISupportsBoxSetGrouping
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the box set identifier list.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The box set identifier list.</value>
|
|
||||||
List<Guid> BoxSetIdList { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,13 @@ using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
|
using MediaBrowser.Model.Users;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Model.Users;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities.Movies
|
namespace MediaBrowser.Controller.Entities.Movies
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,12 +25,6 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
public List<Guid> ThemeVideoIds { get; set; }
|
public List<Guid> ThemeVideoIds { get; set; }
|
||||||
public List<string> ProductionLocations { get; set; }
|
public List<string> ProductionLocations { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This is just a cache to enable quick access by Id
|
|
||||||
/// </summary>
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public List<Guid> BoxSetIdList { get; set; }
|
|
||||||
|
|
||||||
public Movie()
|
public Movie()
|
||||||
{
|
{
|
||||||
SpecialFeatureIds = new List<Guid>();
|
SpecialFeatureIds = new List<Guid>();
|
||||||
|
@ -40,7 +34,6 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
RemoteTrailerIds = new List<Guid>();
|
RemoteTrailerIds = new List<Guid>();
|
||||||
ThemeSongIds = new List<Guid>();
|
ThemeSongIds = new List<Guid>();
|
||||||
ThemeVideoIds = new List<Guid>();
|
ThemeVideoIds = new List<Guid>();
|
||||||
BoxSetIdList = new List<Guid>();
|
|
||||||
Taglines = new List<string>();
|
Taglines = new List<string>();
|
||||||
Keywords = new List<string>();
|
Keywords = new List<string>();
|
||||||
ProductionLocations = new List<string>();
|
ProductionLocations = new List<string>();
|
||||||
|
|
|
@ -132,61 +132,74 @@ namespace MediaBrowser.Dlna
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.DeviceDescription))
|
if (!string.IsNullOrWhiteSpace(profileInfo.DeviceDescription))
|
||||||
{
|
{
|
||||||
if (deviceInfo.DeviceDescription == null || !Regex.IsMatch(deviceInfo.DeviceDescription, profileInfo.DeviceDescription))
|
if (deviceInfo.DeviceDescription == null || !IsRegexMatch(deviceInfo.DeviceDescription, profileInfo.DeviceDescription))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.FriendlyName))
|
if (!string.IsNullOrWhiteSpace(profileInfo.FriendlyName))
|
||||||
{
|
{
|
||||||
if (deviceInfo.FriendlyName == null || !Regex.IsMatch(deviceInfo.FriendlyName, profileInfo.FriendlyName))
|
if (deviceInfo.FriendlyName == null || !IsRegexMatch(deviceInfo.FriendlyName, profileInfo.FriendlyName))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.Manufacturer))
|
if (!string.IsNullOrWhiteSpace(profileInfo.Manufacturer))
|
||||||
{
|
{
|
||||||
if (deviceInfo.Manufacturer == null || !Regex.IsMatch(deviceInfo.Manufacturer, profileInfo.Manufacturer))
|
if (deviceInfo.Manufacturer == null || !IsRegexMatch(deviceInfo.Manufacturer, profileInfo.Manufacturer))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.ManufacturerUrl))
|
if (!string.IsNullOrWhiteSpace(profileInfo.ManufacturerUrl))
|
||||||
{
|
{
|
||||||
if (deviceInfo.ManufacturerUrl == null || !Regex.IsMatch(deviceInfo.ManufacturerUrl, profileInfo.ManufacturerUrl))
|
if (deviceInfo.ManufacturerUrl == null || !IsRegexMatch(deviceInfo.ManufacturerUrl, profileInfo.ManufacturerUrl))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.ModelDescription))
|
if (!string.IsNullOrWhiteSpace(profileInfo.ModelDescription))
|
||||||
{
|
{
|
||||||
if (deviceInfo.ModelDescription == null || !Regex.IsMatch(deviceInfo.ModelDescription, profileInfo.ModelDescription))
|
if (deviceInfo.ModelDescription == null || !IsRegexMatch(deviceInfo.ModelDescription, profileInfo.ModelDescription))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.ModelName))
|
if (!string.IsNullOrWhiteSpace(profileInfo.ModelName))
|
||||||
{
|
{
|
||||||
if (deviceInfo.ModelName == null || !Regex.IsMatch(deviceInfo.ModelName, profileInfo.ModelName))
|
if (deviceInfo.ModelName == null || !IsRegexMatch(deviceInfo.ModelName, profileInfo.ModelName))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.ModelNumber))
|
if (!string.IsNullOrWhiteSpace(profileInfo.ModelNumber))
|
||||||
{
|
{
|
||||||
if (deviceInfo.ModelNumber == null || !Regex.IsMatch(deviceInfo.ModelNumber, profileInfo.ModelNumber))
|
if (deviceInfo.ModelNumber == null || !IsRegexMatch(deviceInfo.ModelNumber, profileInfo.ModelNumber))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.ModelUrl))
|
if (!string.IsNullOrWhiteSpace(profileInfo.ModelUrl))
|
||||||
{
|
{
|
||||||
if (deviceInfo.ModelUrl == null || !Regex.IsMatch(deviceInfo.ModelUrl, profileInfo.ModelUrl))
|
if (deviceInfo.ModelUrl == null || !IsRegexMatch(deviceInfo.ModelUrl, profileInfo.ModelUrl))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(profileInfo.SerialNumber))
|
if (!string.IsNullOrWhiteSpace(profileInfo.SerialNumber))
|
||||||
{
|
{
|
||||||
if (deviceInfo.SerialNumber == null || !Regex.IsMatch(deviceInfo.SerialNumber, profileInfo.SerialNumber))
|
if (deviceInfo.SerialNumber == null || !IsRegexMatch(deviceInfo.SerialNumber, profileInfo.SerialNumber))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsRegexMatch(string input, string pattern)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Regex.IsMatch(input, pattern);
|
||||||
|
}
|
||||||
|
catch (ArgumentException ex)
|
||||||
|
{
|
||||||
|
_logger.ErrorException("Error evaluating regex pattern {0}", ex, pattern);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public DeviceProfile GetProfile(IDictionary<string, string> headers)
|
public DeviceProfile GetProfile(IDictionary<string, string> headers)
|
||||||
{
|
{
|
||||||
if (headers == null)
|
if (headers == null)
|
||||||
|
|
|
@ -497,9 +497,6 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Dto\UserItemDataDto.cs">
|
<Compile Include="..\MediaBrowser.Model\Dto\UserItemDataDto.cs">
|
||||||
<Link>Dto\UserItemDataDto.cs</Link>
|
<Link>Dto\UserItemDataDto.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Dto\VideoStreamOptions.cs">
|
|
||||||
<Link>Dto\VideoStreamOptions.cs</Link>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="..\MediaBrowser.Model\Entities\BaseItemInfo.cs">
|
<Compile Include="..\MediaBrowser.Model\Entities\BaseItemInfo.cs">
|
||||||
<Link>Entities\BaseItemInfo.cs</Link>
|
<Link>Entities\BaseItemInfo.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -462,9 +462,6 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Dto\UserItemDataDto.cs">
|
<Compile Include="..\MediaBrowser.Model\Dto\UserItemDataDto.cs">
|
||||||
<Link>Dto\UserItemDataDto.cs</Link>
|
<Link>Dto\UserItemDataDto.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Dto\VideoStreamOptions.cs">
|
|
||||||
<Link>Dto\VideoStreamOptions.cs</Link>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="..\MediaBrowser.Model\Entities\BaseItemInfo.cs">
|
<Compile Include="..\MediaBrowser.Model\Entities\BaseItemInfo.cs">
|
||||||
<Link>Entities\BaseItemInfo.cs</Link>
|
<Link>Entities\BaseItemInfo.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -1316,24 +1316,6 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
/// <returns>Task<QueryResult<BaseItemDto>>.</returns>
|
/// <returns>Task<QueryResult<BaseItemDto>>.</returns>
|
||||||
Task<QueryResult<BaseItemDto>> GetPlaylistItems(PlaylistItemQuery query);
|
Task<QueryResult<BaseItemDto>> GetPlaylistItems(PlaylistItemQuery query);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the url needed to stream a video file
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="options">The options.</param>
|
|
||||||
/// <returns>System.String.</returns>
|
|
||||||
/// <exception cref="ArgumentNullException">options</exception>
|
|
||||||
[Obsolete]
|
|
||||||
string GetVideoStreamUrl(VideoStreamOptions options);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Formulates a url for streaming video using the HLS protocol
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="options">The options.</param>
|
|
||||||
/// <returns>System.String.</returns>
|
|
||||||
/// <exception cref="ArgumentNullException">options</exception>
|
|
||||||
[Obsolete]
|
|
||||||
string GetHlsVideoStreamUrl(VideoStreamOptions options);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends the context message asynchronous.
|
/// Sends the context message asynchronous.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1,158 +0,0 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Dto
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class VideoStreamOptions
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete]
|
|
||||||
public class VideoStreamOptions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the audio bit rate.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The audio bit rate.</value>
|
|
||||||
public int? AudioBitRate { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the audio codec.
|
|
||||||
/// Omit to copy the original stream
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The audio encoding format.</value>
|
|
||||||
public string AudioCodec { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the item id.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The item id.</value>
|
|
||||||
public string ItemId { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the max audio channels.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The max audio channels.</value>
|
|
||||||
public int? MaxAudioChannels { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the max audio sample rate.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The max audio sample rate.</value>
|
|
||||||
public int? MaxAudioSampleRate { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the start time ticks.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The start time ticks.</value>
|
|
||||||
public long? StartTimeTicks { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a value indicating whether the original media should be served statically
|
|
||||||
/// Only used with progressive streaming
|
|
||||||
/// </summary>
|
|
||||||
/// <value><c>true</c> if static; otherwise, <c>false</c>.</value>
|
|
||||||
public bool? Static { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the output file extension.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The output file extension.</value>
|
|
||||||
public string OutputFileExtension { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the device id.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The device id.</value>
|
|
||||||
public string DeviceId { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the video codec.
|
|
||||||
/// Omit to copy
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The video codec.</value>
|
|
||||||
public string VideoCodec { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the video bit rate.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The video bit rate.</value>
|
|
||||||
public int? VideoBitRate { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the width.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The width.</value>
|
|
||||||
public int? Width { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the height.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The height.</value>
|
|
||||||
public int? Height { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the width of the max.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The width of the max.</value>
|
|
||||||
public int? MaxWidth { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the height of the max.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The height of the max.</value>
|
|
||||||
public int? MaxHeight { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the frame rate.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The frame rate.</value>
|
|
||||||
public double? FrameRate { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the index of the audio stream.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The index of the audio stream.</value>
|
|
||||||
public int? AudioStreamIndex { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the index of the video stream.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The index of the video stream.</value>
|
|
||||||
public int? VideoStreamIndex { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the index of the subtitle stream.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The index of the subtitle stream.</value>
|
|
||||||
public int? SubtitleStreamIndex { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the profile.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The profile.</value>
|
|
||||||
public string Profile { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the level.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The level.</value>
|
|
||||||
public string Level { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the baseline stream audio bit rate.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The baseline stream audio bit rate.</value>
|
|
||||||
public int? BaselineStreamAudioBitRate { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a value indicating whether [append baseline stream].
|
|
||||||
/// </summary>
|
|
||||||
/// <value><c>true</c> if [append baseline stream]; otherwise, <c>false</c>.</value>
|
|
||||||
public bool AppendBaselineStream { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the time stamp offset ms. Only used with HLS.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The time stamp offset ms.</value>
|
|
||||||
public int? TimeStampOffsetMs { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -135,7 +135,6 @@
|
||||||
<Compile Include="Dto\NameValuePair.cs" />
|
<Compile Include="Dto\NameValuePair.cs" />
|
||||||
<Compile Include="MediaInfo\LiveMediaInfoResult.cs" />
|
<Compile Include="MediaInfo\LiveMediaInfoResult.cs" />
|
||||||
<Compile Include="Dto\MediaSourceType.cs" />
|
<Compile Include="Dto\MediaSourceType.cs" />
|
||||||
<Compile Include="Dto\VideoStreamOptions.cs" />
|
|
||||||
<Compile Include="Configuration\DynamicDayOfWeek.cs" />
|
<Compile Include="Configuration\DynamicDayOfWeek.cs" />
|
||||||
<Compile Include="Entities\ExtraType.cs" />
|
<Compile Include="Entities\ExtraType.cs" />
|
||||||
<Compile Include="Entities\SupporterInfo.cs" />
|
<Compile Include="Entities\SupporterInfo.cs" />
|
||||||
|
|
|
@ -167,18 +167,6 @@ namespace MediaBrowser.Server.Implementations.Collections
|
||||||
}
|
}
|
||||||
|
|
||||||
list.Add(LinkedChild.Create(item));
|
list.Add(LinkedChild.Create(item));
|
||||||
|
|
||||||
var supportsGrouping = item as ISupportsBoxSetGrouping;
|
|
||||||
|
|
||||||
if (supportsGrouping != null)
|
|
||||||
{
|
|
||||||
var boxsetIdList = supportsGrouping.BoxSetIdList.ToList();
|
|
||||||
if (!boxsetIdList.Contains(collectionId))
|
|
||||||
{
|
|
||||||
boxsetIdList.Add(collectionId);
|
|
||||||
}
|
|
||||||
supportsGrouping.BoxSetIdList = boxsetIdList;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
collection.LinkedChildren.AddRange(list);
|
collection.LinkedChildren.AddRange(list);
|
||||||
|
@ -228,15 +216,6 @@ namespace MediaBrowser.Server.Implementations.Collections
|
||||||
{
|
{
|
||||||
itemList.Add(childItem);
|
itemList.Add(childItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportsGrouping = childItem as ISupportsBoxSetGrouping;
|
|
||||||
|
|
||||||
if (supportsGrouping != null)
|
|
||||||
{
|
|
||||||
var boxsetIdList = supportsGrouping.BoxSetIdList.ToList();
|
|
||||||
boxsetIdList.Remove(collectionId);
|
|
||||||
supportsGrouping.BoxSetIdList = boxsetIdList;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var shortcutFiles = Directory
|
var shortcutFiles = Directory
|
||||||
|
@ -289,29 +268,40 @@ namespace MediaBrowser.Server.Implementations.Collections
|
||||||
|
|
||||||
public IEnumerable<BaseItem> CollapseItemsWithinBoxSets(IEnumerable<BaseItem> items, User user)
|
public IEnumerable<BaseItem> CollapseItemsWithinBoxSets(IEnumerable<BaseItem> items, User user)
|
||||||
{
|
{
|
||||||
var itemsToCollapse = new List<ISupportsBoxSetGrouping>();
|
var results = new Dictionary<Guid, BaseItem>();
|
||||||
var boxsets = new List<BaseItem>();
|
var allBoxsets = new List<BoxSet>();
|
||||||
|
|
||||||
var list = items.ToList();
|
foreach (var item in items)
|
||||||
|
|
||||||
foreach (var item in list.OfType<ISupportsBoxSetGrouping>())
|
|
||||||
{
|
{
|
||||||
var currentBoxSets = item.BoxSetIdList
|
var grouping = item as ISupportsBoxSetGrouping;
|
||||||
.Select(i => _libraryManager.GetItemById(i))
|
|
||||||
.Where(i => i != null && i.IsVisible(user))
|
if (grouping == null)
|
||||||
|
{
|
||||||
|
results[item.Id] = item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var itemId = item.Id;
|
||||||
|
|
||||||
|
var currentBoxSets = allBoxsets
|
||||||
|
.Where(i => i.GetLinkedChildren().Any(j => j.Id == itemId))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
if (currentBoxSets.Count > 0)
|
if (currentBoxSets.Count > 0)
|
||||||
{
|
{
|
||||||
itemsToCollapse.Add(item);
|
foreach (var boxset in currentBoxSets)
|
||||||
boxsets.AddRange(currentBoxSets);
|
{
|
||||||
|
results[boxset.Id] = boxset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
results[item.Id] = item;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return list
|
return results.Values;
|
||||||
.Except(itemsToCollapse.Cast<BaseItem>())
|
|
||||||
.Concat(boxsets)
|
|
||||||
.DistinctBy(i => i.Id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.Library.Validators
|
|
||||||
{
|
|
||||||
public class BoxSetPostScanTask : ILibraryPostScanTask
|
|
||||||
{
|
|
||||||
private readonly ILibraryManager _libraryManager;
|
|
||||||
|
|
||||||
public BoxSetPostScanTask(ILibraryManager libraryManager)
|
|
||||||
{
|
|
||||||
_libraryManager = libraryManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
var items = _libraryManager.RootFolder.RecursiveChildren.ToList();
|
|
||||||
|
|
||||||
var boxsets = items.OfType<BoxSet>().ToList();
|
|
||||||
|
|
||||||
var numComplete = 0;
|
|
||||||
|
|
||||||
foreach (var boxset in boxsets)
|
|
||||||
{
|
|
||||||
foreach (var child in boxset.Children.Concat(boxset.GetLinkedChildren()).OfType<ISupportsBoxSetGrouping>())
|
|
||||||
{
|
|
||||||
var boxsetIdList = child.BoxSetIdList.ToList();
|
|
||||||
if (!boxsetIdList.Contains(boxset.Id))
|
|
||||||
{
|
|
||||||
boxsetIdList.Add(boxset.Id);
|
|
||||||
}
|
|
||||||
child.BoxSetIdList = boxsetIdList;
|
|
||||||
}
|
|
||||||
|
|
||||||
numComplete++;
|
|
||||||
double percent = numComplete;
|
|
||||||
percent /= boxsets.Count;
|
|
||||||
progress.Report(percent * 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
progress.Report(100);
|
|
||||||
return Task.FromResult(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -45,6 +45,8 @@
|
||||||
"ButtonHelp": "Help",
|
"ButtonHelp": "Help",
|
||||||
"ButtonSave": "Save",
|
"ButtonSave": "Save",
|
||||||
"HeaderDevices": "Devices",
|
"HeaderDevices": "Devices",
|
||||||
|
"ButtonScheduledTasks": "Scheduled tasks",
|
||||||
|
"ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task. It can also be run manually here. To configure the scheduled task, see:",
|
||||||
"HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to premium plugins, internet channel content, and more. {0}Learn more{1}.",
|
"HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to premium plugins, internet channel content, and more. {0}Learn more{1}.",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
||||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||||
|
|
|
@ -209,7 +209,6 @@
|
||||||
<Compile Include="Library\UserViewManager.cs" />
|
<Compile Include="Library\UserViewManager.cs" />
|
||||||
<Compile Include="Library\Validators\ArtistsPostScanTask.cs" />
|
<Compile Include="Library\Validators\ArtistsPostScanTask.cs" />
|
||||||
<Compile Include="Library\Validators\ArtistsValidator.cs" />
|
<Compile Include="Library\Validators\ArtistsValidator.cs" />
|
||||||
<Compile Include="Library\Validators\BoxSetPostScanTask.cs" />
|
|
||||||
<Compile Include="Library\Validators\GameGenresPostScanTask.cs" />
|
<Compile Include="Library\Validators\GameGenresPostScanTask.cs" />
|
||||||
<Compile Include="Library\Validators\GameGenresValidator.cs" />
|
<Compile Include="Library\Validators\GameGenresValidator.cs" />
|
||||||
<Compile Include="Library\Validators\GenresPostScanTask.cs" />
|
<Compile Include="Library\Validators\GenresPostScanTask.cs" />
|
||||||
|
|
Loading…
Reference in New Issue
Block a user