Merge pull request #2215 from MediaBrowser/dev
pass requested fields to data layer
This commit is contained in:
commit
82c00b079d
|
@ -4,6 +4,7 @@ using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
using ServiceStack;
|
using ServiceStack;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -104,7 +105,8 @@ namespace MediaBrowser.Api
|
||||||
MediaTypes = request.GetMediaTypes(),
|
MediaTypes = request.GetMediaTypes(),
|
||||||
IncludeItemTypes = request.GetIncludeItemTypes(),
|
IncludeItemTypes = request.GetIncludeItemTypes(),
|
||||||
Recursive = true,
|
Recursive = true,
|
||||||
EnableTotalRecordCount = false
|
EnableTotalRecordCount = false,
|
||||||
|
Fields = new List<ItemFields> { ItemFields.Genres, ItemFields.Tags }
|
||||||
};
|
};
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
|
|
|
@ -200,6 +200,8 @@ namespace MediaBrowser.Api
|
||||||
(!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
|
(!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
|
||||||
_libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
|
_libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
|
||||||
|
|
||||||
|
var dtoOptions = GetDtoOptions(request);
|
||||||
|
|
||||||
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
Limit = request.Limit,
|
Limit = request.Limit,
|
||||||
|
@ -207,12 +209,11 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
typeof(Game).Name
|
typeof(Game).Name
|
||||||
},
|
},
|
||||||
SimilarTo = item
|
SimilarTo = item,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
var dtoOptions = GetDtoOptions(request);
|
|
||||||
|
|
||||||
var result = new QueryResult<BaseItemDto>
|
var result = new QueryResult<BaseItemDto>
|
||||||
{
|
{
|
||||||
Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(),
|
Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(),
|
||||||
|
|
|
@ -274,10 +274,9 @@ namespace MediaBrowser.Api
|
||||||
|
|
||||||
item.Tags = request.Tags;
|
item.Tags = request.Tags;
|
||||||
|
|
||||||
var hasTaglines = item as IHasTaglines;
|
if (request.Taglines != null)
|
||||||
if (hasTaglines != null)
|
|
||||||
{
|
{
|
||||||
hasTaglines.Taglines = request.Taglines;
|
item.Tagline = request.Taglines.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasShortOverview = item as IHasShortOverview;
|
var hasShortOverview = item as IHasShortOverview;
|
||||||
|
@ -304,8 +303,6 @@ namespace MediaBrowser.Api
|
||||||
item.OfficialRating = string.IsNullOrWhiteSpace(request.OfficialRating) ? null : request.OfficialRating;
|
item.OfficialRating = string.IsNullOrWhiteSpace(request.OfficialRating) ? null : request.OfficialRating;
|
||||||
item.CustomRating = request.CustomRating;
|
item.CustomRating = request.CustomRating;
|
||||||
|
|
||||||
SetProductionLocations(item, request);
|
|
||||||
|
|
||||||
item.PreferredMetadataCountryCode = request.PreferredMetadataCountryCode;
|
item.PreferredMetadataCountryCode = request.PreferredMetadataCountryCode;
|
||||||
item.PreferredMetadataLanguage = request.PreferredMetadataLanguage;
|
item.PreferredMetadataLanguage = request.PreferredMetadataLanguage;
|
||||||
|
|
||||||
|
@ -413,23 +410,5 @@ namespace MediaBrowser.Api
|
||||||
series.AirTime = request.AirTime;
|
series.AirTime = request.AirTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetProductionLocations(BaseItem item, BaseItemDto request)
|
|
||||||
{
|
|
||||||
var hasProductionLocations = item as IHasProductionLocations;
|
|
||||||
|
|
||||||
if (hasProductionLocations != null)
|
|
||||||
{
|
|
||||||
hasProductionLocations.ProductionLocations = request.ProductionLocations;
|
|
||||||
}
|
|
||||||
|
|
||||||
var person = item as Person;
|
|
||||||
if (person != null)
|
|
||||||
{
|
|
||||||
person.PlaceOfBirth = request.ProductionLocations == null
|
|
||||||
? null
|
|
||||||
: request.ProductionLocations.FirstOrDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
@ -11,9 +11,10 @@
|
||||||
<AssemblyName>MediaBrowser.Api</AssemblyName>
|
<AssemblyName>MediaBrowser.Api</AssemblyName>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||||
<ReleaseVersion>
|
<ReleaseVersion>
|
||||||
</ReleaseVersion>
|
</ReleaseVersion>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
|
|
@ -156,18 +156,19 @@ namespace MediaBrowser.Api.Movies
|
||||||
itemTypes.Add(typeof(LiveTvProgram).Name);
|
itemTypes.Add(typeof(LiveTvProgram).Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var dtoOptions = GetDtoOptions(request);
|
||||||
|
|
||||||
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
Limit = request.Limit,
|
Limit = request.Limit,
|
||||||
IncludeItemTypes = itemTypes.ToArray(),
|
IncludeItemTypes = itemTypes.ToArray(),
|
||||||
IsMovie = true,
|
IsMovie = true,
|
||||||
SimilarTo = item,
|
SimilarTo = item,
|
||||||
EnableGroupByMetadataKey = true
|
EnableGroupByMetadataKey = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
var dtoOptions = GetDtoOptions(request);
|
|
||||||
|
|
||||||
var result = new QueryResult<BaseItemDto>
|
var result = new QueryResult<BaseItemDto>
|
||||||
{
|
{
|
||||||
Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(),
|
Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(),
|
||||||
|
@ -198,7 +199,8 @@ namespace MediaBrowser.Api.Movies
|
||||||
Limit = 7,
|
Limit = 7,
|
||||||
ParentId = parentIdGuid,
|
ParentId = parentIdGuid,
|
||||||
Recursive = true,
|
Recursive = true,
|
||||||
IsPlayed = true
|
IsPlayed = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
};
|
};
|
||||||
|
|
||||||
var recentlyPlayedMovies = _libraryManager.GetItemList(query).ToList();
|
var recentlyPlayedMovies = _libraryManager.GetItemList(query).ToList();
|
||||||
|
@ -221,7 +223,8 @@ namespace MediaBrowser.Api.Movies
|
||||||
ExcludeItemIds = recentlyPlayedMovies.Select(i => i.Id.ToString("N")).ToArray(),
|
ExcludeItemIds = recentlyPlayedMovies.Select(i => i.Id.ToString("N")).ToArray(),
|
||||||
EnableGroupByMetadataKey = true,
|
EnableGroupByMetadataKey = true,
|
||||||
ParentId = parentIdGuid,
|
ParentId = parentIdGuid,
|
||||||
Recursive = true
|
Recursive = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
@ -302,7 +305,8 @@ namespace MediaBrowser.Api.Movies
|
||||||
PersonTypes = new[] { PersonType.Director },
|
PersonTypes = new[] { PersonType.Director },
|
||||||
IncludeItemTypes = itemTypes.ToArray(),
|
IncludeItemTypes = itemTypes.ToArray(),
|
||||||
IsMovie = true,
|
IsMovie = true,
|
||||||
EnableGroupByMetadataKey = true
|
EnableGroupByMetadataKey = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N"))
|
}).DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N"))
|
||||||
.Take(itemLimit)
|
.Take(itemLimit)
|
||||||
|
@ -339,7 +343,8 @@ namespace MediaBrowser.Api.Movies
|
||||||
Limit = itemLimit + 2,
|
Limit = itemLimit + 2,
|
||||||
IncludeItemTypes = itemTypes.ToArray(),
|
IncludeItemTypes = itemTypes.ToArray(),
|
||||||
IsMovie = true,
|
IsMovie = true,
|
||||||
EnableGroupByMetadataKey = true
|
EnableGroupByMetadataKey = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N"))
|
}).DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N"))
|
||||||
.Take(itemLimit)
|
.Take(itemLimit)
|
||||||
|
@ -375,7 +380,8 @@ namespace MediaBrowser.Api.Movies
|
||||||
IncludeItemTypes = itemTypes.ToArray(),
|
IncludeItemTypes = itemTypes.ToArray(),
|
||||||
IsMovie = true,
|
IsMovie = true,
|
||||||
SimilarTo = item,
|
SimilarTo = item,
|
||||||
EnableGroupByMetadataKey = true
|
EnableGroupByMetadataKey = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace MediaBrowser.Api
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The name.</value>
|
/// <value>The name.</value>
|
||||||
[ApiMember(Name = "PackageType", Description = "Optional package type filter (System/UserInstalled)", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "PackageType", Description = "Optional package type filter (System/UserInstalled)", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
public PackageType? PackageType { get; set; }
|
public string PackageType { get; set; }
|
||||||
|
|
||||||
[ApiMember(Name = "TargetSystems", Description = "Optional. Filter by target system type. Allows multiple, comma delimited.", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET", AllowMultiple = true)]
|
[ApiMember(Name = "TargetSystems", Description = "Optional. Filter by target system type. Allows multiple, comma delimited.", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET", AllowMultiple = true)]
|
||||||
public string TargetSystems { get; set; }
|
public string TargetSystems { get; set; }
|
||||||
|
@ -72,7 +72,7 @@ namespace MediaBrowser.Api
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The name.</value>
|
/// <value>The name.</value>
|
||||||
[ApiMember(Name = "PackageType", Description = "Package type filter (System/UserInstalled)", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "PackageType", Description = "Package type filter (System/UserInstalled)", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
public PackageType PackageType { get; set; }
|
public string PackageType { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -149,12 +149,12 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
var result = new List<PackageVersionInfo>();
|
var result = new List<PackageVersionInfo>();
|
||||||
|
|
||||||
if (request.PackageType == PackageType.UserInstalled || request.PackageType == PackageType.All)
|
if (string.Equals(request.PackageType, "UserInstalled", StringComparison.OrdinalIgnoreCase) || string.Equals(request.PackageType, "All", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
result.AddRange(_installationManager.GetAvailablePluginUpdates(_appHost.ApplicationVersion, false, CancellationToken.None).Result.ToList());
|
result.AddRange(_installationManager.GetAvailablePluginUpdates(_appHost.ApplicationVersion, false, CancellationToken.None).Result.ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (request.PackageType == PackageType.System || request.PackageType == PackageType.All)
|
else if (string.Equals(request.PackageType, "System", StringComparison.OrdinalIgnoreCase) || string.Equals(request.PackageType, "All", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var updateCheckResult = _appHost.CheckForApplicationUpdate(CancellationToken.None, new Progress<double>()).Result;
|
var updateCheckResult = _appHost.CheckForApplicationUpdate(CancellationToken.None, new Progress<double>()).Result;
|
||||||
|
|
||||||
|
|
|
@ -1857,9 +1857,6 @@ namespace MediaBrowser.Api.Playback
|
||||||
|
|
||||||
state.IsInputVideo = string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase);
|
state.IsInputVideo = string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
var archivable = item as IArchivable;
|
|
||||||
state.IsInputArchive = archivable != null && archivable.IsArchive;
|
|
||||||
|
|
||||||
MediaSourceInfo mediaSource = null;
|
MediaSourceInfo mediaSource = null;
|
||||||
if (string.IsNullOrWhiteSpace(request.LiveStreamId))
|
if (string.IsNullOrWhiteSpace(request.LiveStreamId))
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,7 +63,6 @@ namespace MediaBrowser.Api.Playback
|
||||||
get { return Request is VideoStreamRequest; }
|
get { return Request is VideoStreamRequest; }
|
||||||
}
|
}
|
||||||
public bool IsInputVideo { get; set; }
|
public bool IsInputVideo { get; set; }
|
||||||
public bool IsInputArchive { get; set; }
|
|
||||||
|
|
||||||
public VideoType VideoType { get; set; }
|
public VideoType VideoType { get; set; }
|
||||||
public IsoType? IsoType { get; set; }
|
public IsoType? IsoType { get; set; }
|
||||||
|
|
|
@ -517,10 +517,6 @@ namespace MediaBrowser.Api.Reports
|
||||||
internalHeader = HeaderMetadata.Album;
|
internalHeader = HeaderMetadata.Album;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HeaderMetadata.Countries:
|
|
||||||
option.Column = (i, r) => this.GetListAsString(this.GetObject<IHasProductionLocations, List<string>>(i, (x) => x.ProductionLocations));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HeaderMetadata.Disc:
|
case HeaderMetadata.Disc:
|
||||||
option.Column = (i, r) => i.ParentIndexNumber;
|
option.Column = (i, r) => i.ParentIndexNumber;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -36,7 +36,6 @@ namespace MediaBrowser.Api.Reports
|
||||||
result = this.GetResultStudios(result, items, topItem);
|
result = this.GetResultStudios(result, items, topItem);
|
||||||
result = this.GetResultPersons(result, items, topItem);
|
result = this.GetResultPersons(result, items, topItem);
|
||||||
result = this.GetResultProductionYears(result, items, topItem);
|
result = this.GetResultProductionYears(result, items, topItem);
|
||||||
result = this.GetResulProductionLocations(result, items, topItem);
|
|
||||||
result = this.GetResultCommunityRatings(result, items, topItem);
|
result = this.GetResultCommunityRatings(result, items, topItem);
|
||||||
result = this.GetResultParentalRatings(result, items, topItem);
|
result = this.GetResultParentalRatings(result, items, topItem);
|
||||||
|
|
||||||
|
@ -100,30 +99,6 @@ namespace MediaBrowser.Api.Reports
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Gets resul production locations. </summary>
|
|
||||||
/// <param name="result"> The result. </param>
|
|
||||||
/// <param name="items"> The items. </param>
|
|
||||||
/// <param name="topItem"> The top item. </param>
|
|
||||||
/// <returns> The resul production locations. </returns>
|
|
||||||
private ReportStatResult GetResulProductionLocations(ReportStatResult result, BaseItem[] items, int topItem = 5)
|
|
||||||
{
|
|
||||||
this.GetGroups(result, GetLocalizedHeader(HeaderMetadata.Countries), topItem,
|
|
||||||
items.OfType<IHasProductionLocations>()
|
|
||||||
.Where(x => x.ProductionLocations != null)
|
|
||||||
.SelectMany(x => x.ProductionLocations)
|
|
||||||
.GroupBy(x => x)
|
|
||||||
.OrderByDescending(x => x.Count())
|
|
||||||
.Take(topItem)
|
|
||||||
.Select(x => new ReportStatItem
|
|
||||||
{
|
|
||||||
Name = x.Key.ToString(),
|
|
||||||
Value = x.Count().ToString()
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Gets result community ratings. </summary>
|
/// <summary> Gets result community ratings. </summary>
|
||||||
/// <param name="result"> The result. </param>
|
/// <param name="result"> The result. </param>
|
||||||
/// <param name="items"> The items. </param>
|
/// <param name="items"> The items. </param>
|
||||||
|
|
|
@ -81,7 +81,8 @@ namespace MediaBrowser.Api
|
||||||
var query = new InternalItemsQuery(user)
|
var query = new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
IncludeItemTypes = includeTypes.Select(i => i.Name).ToArray(),
|
IncludeItemTypes = includeTypes.Select(i => i.Name).ToArray(),
|
||||||
Recursive = true
|
Recursive = true,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
};
|
};
|
||||||
|
|
||||||
// ExcludeArtistIds
|
// ExcludeArtistIds
|
||||||
|
|
|
@ -117,6 +117,8 @@ namespace MediaBrowser.Api
|
||||||
config.EnableFolderView = true;
|
config.EnableFolderView = true;
|
||||||
config.SchemaVersion = 109;
|
config.SchemaVersion = 109;
|
||||||
config.EnableSimpleArtistDetection = true;
|
config.EnableSimpleArtistDetection = true;
|
||||||
|
config.SkipDeserializationForBasicTypes = true;
|
||||||
|
config.SkipDeserializationForPrograms = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Post(UpdateStartupConfiguration request)
|
public void Post(UpdateStartupConfiguration request)
|
||||||
|
|
|
@ -302,6 +302,8 @@ namespace MediaBrowser.Api
|
||||||
(!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
|
(!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
|
||||||
_libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
|
_libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
|
||||||
|
|
||||||
|
var dtoOptions = GetDtoOptions(request);
|
||||||
|
|
||||||
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
Limit = request.Limit,
|
Limit = request.Limit,
|
||||||
|
@ -309,12 +311,11 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
typeof(Series).Name
|
typeof(Series).Name
|
||||||
},
|
},
|
||||||
SimilarTo = item
|
SimilarTo = item,
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
var dtoOptions = GetDtoOptions(request);
|
|
||||||
|
|
||||||
var result = new QueryResult<BaseItemDto>
|
var result = new QueryResult<BaseItemDto>
|
||||||
{
|
{
|
||||||
Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(),
|
Items = (await _dtoService.GetBaseItemDtos(itemsResult, dtoOptions, user).ConfigureAwait(false)).ToArray(),
|
||||||
|
@ -333,6 +334,8 @@ namespace MediaBrowser.Api
|
||||||
|
|
||||||
var parentIdGuid = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId);
|
var parentIdGuid = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId);
|
||||||
|
|
||||||
|
var options = GetDtoOptions(request);
|
||||||
|
|
||||||
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
IncludeItemTypes = new[] { typeof(Episode).Name },
|
IncludeItemTypes = new[] { typeof(Episode).Name },
|
||||||
|
@ -342,12 +345,11 @@ namespace MediaBrowser.Api
|
||||||
StartIndex = request.StartIndex,
|
StartIndex = request.StartIndex,
|
||||||
Limit = request.Limit,
|
Limit = request.Limit,
|
||||||
ParentId = parentIdGuid,
|
ParentId = parentIdGuid,
|
||||||
Recursive = true
|
Recursive = true,
|
||||||
|
Fields = options.Fields
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
var options = GetDtoOptions(request);
|
|
||||||
|
|
||||||
var returnItems = (await _dtoService.GetBaseItemDtos(itemsResult, options, user).ConfigureAwait(false)).ToArray();
|
var returnItems = (await _dtoService.GetBaseItemDtos(itemsResult, options, user).ConfigureAwait(false)).ToArray();
|
||||||
|
|
||||||
var result = new ItemsResult
|
var result = new ItemsResult
|
||||||
|
|
|
@ -100,7 +100,9 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
{
|
{
|
||||||
var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
|
var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
|
||||||
|
|
||||||
var result = await GetQueryResult(request, user).ConfigureAwait(false);
|
var dtoOptions = GetDtoOptions(request);
|
||||||
|
|
||||||
|
var result = await GetQueryResult(request, dtoOptions, user).ConfigureAwait(false);
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
|
@ -112,8 +114,6 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
throw new InvalidOperationException("GetItemsToSerialize result.Items returned null");
|
throw new InvalidOperationException("GetItemsToSerialize result.Items returned null");
|
||||||
}
|
}
|
||||||
|
|
||||||
var dtoOptions = GetDtoOptions(request);
|
|
||||||
|
|
||||||
var dtoList = await _dtoService.GetBaseItemDtos(result.Items, dtoOptions, user).ConfigureAwait(false);
|
var dtoList = await _dtoService.GetBaseItemDtos(result.Items, dtoOptions, user).ConfigureAwait(false);
|
||||||
|
|
||||||
if (dtoList == null)
|
if (dtoList == null)
|
||||||
|
@ -131,10 +131,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the items to serialize.
|
/// Gets the items to serialize.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request">The request.</param>
|
private async Task<QueryResult<BaseItem>> GetQueryResult(GetItems request, DtoOptions dtoOptions, User user)
|
||||||
/// <param name="user">The user.</param>
|
|
||||||
/// <returns>IEnumerable{BaseItem}.</returns>
|
|
||||||
private async Task<QueryResult<BaseItem>> GetQueryResult(GetItems request, User user)
|
|
||||||
{
|
{
|
||||||
var item = string.IsNullOrEmpty(request.ParentId) ?
|
var item = string.IsNullOrEmpty(request.ParentId) ?
|
||||||
user == null ? _libraryManager.RootFolder : user.RootFolder :
|
user == null ? _libraryManager.RootFolder : user.RootFolder :
|
||||||
|
@ -159,14 +156,14 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
|
|
||||||
if (request.Recursive || !string.IsNullOrEmpty(request.Ids) || user == null)
|
if (request.Recursive || !string.IsNullOrEmpty(request.Ids) || user == null)
|
||||||
{
|
{
|
||||||
return await folder.GetItems(GetItemsQuery(request, user)).ConfigureAwait(false);
|
return await folder.GetItems(GetItemsQuery(request, dtoOptions, user)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var userRoot = item as UserRootFolder;
|
var userRoot = item as UserRootFolder;
|
||||||
|
|
||||||
if (userRoot == null)
|
if (userRoot == null)
|
||||||
{
|
{
|
||||||
return await folder.GetItems(GetItemsQuery(request, user)).ConfigureAwait(false);
|
return await folder.GetItems(GetItemsQuery(request, dtoOptions, user)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerable<BaseItem> items = folder.GetChildren(user, true);
|
IEnumerable<BaseItem> items = folder.GetChildren(user, true);
|
||||||
|
@ -180,7 +177,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private InternalItemsQuery GetItemsQuery(GetItems request, User user)
|
private InternalItemsQuery GetItemsQuery(GetItems request, DtoOptions dtoOptions, User user)
|
||||||
{
|
{
|
||||||
var query = new InternalItemsQuery(user)
|
var query = new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
|
@ -241,7 +238,8 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
AiredDuringSeason = request.AiredDuringSeason,
|
AiredDuringSeason = request.AiredDuringSeason,
|
||||||
AlbumArtistStartsWithOrGreater = request.AlbumArtistStartsWithOrGreater,
|
AlbumArtistStartsWithOrGreater = request.AlbumArtistStartsWithOrGreater,
|
||||||
EnableTotalRecordCount = request.EnableTotalRecordCount,
|
EnableTotalRecordCount = request.EnableTotalRecordCount,
|
||||||
ExcludeItemIds = request.GetExcludeItemIds()
|
ExcludeItemIds = request.GetExcludeItemIds(),
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(request.Ids))
|
if (!string.IsNullOrWhiteSpace(request.Ids))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
@ -14,6 +14,7 @@
|
||||||
<ProductVersion>10.0.0</ProductVersion>
|
<ProductVersion>10.0.0</ProductVersion>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -23,7 +24,7 @@
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
|
@ -79,6 +80,9 @@
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Net" />
|
<Reference Include="System.Net" />
|
||||||
|
<Reference Include="System.Text.Json">
|
||||||
|
<HintPath>..\ThirdParty\fastjsonparser\System.Text.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="ServiceStack.Text">
|
<Reference Include="ServiceStack.Text">
|
||||||
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
||||||
|
|
|
@ -148,14 +148,10 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets all available packages.
|
/// Gets all available packages.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
|
||||||
/// <param name="withRegistration">if set to <c>true</c> [with registration].</param>
|
|
||||||
/// <param name="packageType">Type of the package.</param>
|
|
||||||
/// <param name="applicationVersion">The application version.</param>
|
|
||||||
/// <returns>Task{List{PackageInfo}}.</returns>
|
/// <returns>Task{List{PackageInfo}}.</returns>
|
||||||
public async Task<IEnumerable<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken,
|
public async Task<IEnumerable<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken,
|
||||||
bool withRegistration = true,
|
bool withRegistration = true,
|
||||||
PackageType? packageType = null,
|
string packageType = null,
|
||||||
Version applicationVersion = null)
|
Version applicationVersion = null)
|
||||||
{
|
{
|
||||||
var data = new Dictionary<string, string>
|
var data = new Dictionary<string, string>
|
||||||
|
@ -293,7 +289,7 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
return packages;
|
return packages;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IEnumerable<PackageInfo> FilterPackages(List<PackageInfo> packages, PackageType? packageType, Version applicationVersion)
|
protected IEnumerable<PackageInfo> FilterPackages(List<PackageInfo> packages, string packageType, Version applicationVersion)
|
||||||
{
|
{
|
||||||
foreach (var package in packages)
|
foreach (var package in packages)
|
||||||
{
|
{
|
||||||
|
@ -301,9 +297,9 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
.OrderByDescending(GetPackageVersion).ToList();
|
.OrderByDescending(GetPackageVersion).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packageType.HasValue)
|
if (!string.IsNullOrWhiteSpace(packageType))
|
||||||
{
|
{
|
||||||
packages = packages.Where(p => p.type == packageType.Value).ToList();
|
packages = packages.Where(p => string.Equals(p.type, packageType, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If an app version was supplied, filter the versions for each package to only include supported versions
|
// If an app version was supplied, filter the versions for each package to only include supported versions
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace MediaBrowser.Common.Updates
|
||||||
/// <returns>Task{List{PackageInfo}}.</returns>
|
/// <returns>Task{List{PackageInfo}}.</returns>
|
||||||
Task<IEnumerable<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken,
|
Task<IEnumerable<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken,
|
||||||
bool withRegistration = true,
|
bool withRegistration = true,
|
||||||
PackageType? packageType = null,
|
string packageType = null,
|
||||||
Version applicationVersion = null);
|
Version applicationVersion = null);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -23,8 +23,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
IHasMusicGenres,
|
IHasMusicGenres,
|
||||||
IHasLookupInfo<SongInfo>,
|
IHasLookupInfo<SongInfo>,
|
||||||
IHasMediaSources,
|
IHasMediaSources,
|
||||||
IThemeMedia,
|
IThemeMedia
|
||||||
IArchivable
|
|
||||||
{
|
{
|
||||||
public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
|
public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
|
||||||
|
|
||||||
|
@ -84,21 +83,6 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public bool IsArchive
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(Path))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var ext = System.IO.Path.GetExtension(Path) ?? string.Empty;
|
|
||||||
|
|
||||||
return new[] { ".zip", ".rar", ".7z" }.Contains(ext, StringComparer.OrdinalIgnoreCase);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CanDownload()
|
public override bool CanDownload()
|
||||||
{
|
{
|
||||||
var locationType = LocationType;
|
var locationType = LocationType;
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class MusicArtist
|
/// Class MusicArtist
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MusicArtist : Folder, IMetadataContainer, IItemByName, IHasMusicGenres, IHasDualAccess, IHasProductionLocations, IHasLookupInfo<ArtistInfo>
|
public class MusicArtist : Folder, IMetadataContainer, IItemByName, IHasMusicGenres, IHasDualAccess, IHasLookupInfo<ArtistInfo>
|
||||||
{
|
{
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
public bool IsAccessedByName
|
public bool IsAccessedByName
|
||||||
|
@ -24,8 +24,6 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
get { return ParentId == Guid.Empty; }
|
get { return ParentId == Guid.Empty; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<string> ProductionLocations { get; set; }
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
public override bool IsFolder
|
public override bool IsFolder
|
||||||
{
|
{
|
||||||
|
@ -111,11 +109,6 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService);
|
return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MusicArtist()
|
|
||||||
{
|
|
||||||
ProductionLocations = new List<string>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override List<string> GetUserDataKeys()
|
public override List<string> GetUserDataKeys()
|
||||||
{
|
{
|
||||||
var list = base.GetUserDataKeys();
|
var list = base.GetUserDataKeys();
|
||||||
|
|
|
@ -73,6 +73,8 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public long? Size { get; set; }
|
public long? Size { get; set; }
|
||||||
public string Container { get; set; }
|
public string Container { get; set; }
|
||||||
public string ShortOverview { get; set; }
|
public string ShortOverview { get; set; }
|
||||||
|
[IgnoreDataMember]
|
||||||
|
public string Tagline { get; set; }
|
||||||
|
|
||||||
public List<ItemImageInfo> ImageInfos { get; set; }
|
public List<ItemImageInfo> ImageInfos { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
public interface IArchivable
|
|
||||||
{
|
|
||||||
bool IsArchive { get; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interface IHasProductionLocations
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasProductionLocations
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the production locations.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The production locations.</value>
|
|
||||||
List<string> ProductionLocations { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ProductionLocationExtensions
|
|
||||||
{
|
|
||||||
public static void AddProductionLocation(this IHasProductionLocations item, string name)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(name))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("name");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!item.ProductionLocations.Contains(name, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
item.ProductionLocations.Add(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interface IHasTaglines
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasTaglines
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the taglines.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The taglines.</value>
|
|
||||||
List<string> Taglines { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class TaglineExtensions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Adds the tagline.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="tagline">The tagline.</param>
|
|
||||||
/// <exception cref="System.ArgumentNullException">tagline</exception>
|
|
||||||
public static void AddTagline(this IHasTaglines item, string tagline)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(tagline))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("tagline");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!item.Taglines.Contains(tagline, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
item.Taglines.Add(tagline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,6 +2,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
|
using System.Linq;
|
||||||
|
using MediaBrowser.Model.Querying;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
|
@ -157,11 +159,43 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public DateTime? MinDateCreated { get; set; }
|
public DateTime? MinDateCreated { get; set; }
|
||||||
public DateTime? MinDateLastSaved { get; set; }
|
public DateTime? MinDateLastSaved { get; set; }
|
||||||
|
|
||||||
|
public List<ItemFields> Fields { get; set; }
|
||||||
|
|
||||||
|
public bool HasField(ItemFields name)
|
||||||
|
{
|
||||||
|
switch (name)
|
||||||
|
{
|
||||||
|
case ItemFields.Keywords:
|
||||||
|
case ItemFields.Taglines:
|
||||||
|
case ItemFields.ShortOverview:
|
||||||
|
case ItemFields.CustomRating:
|
||||||
|
case ItemFields.DateCreated:
|
||||||
|
case ItemFields.SortName:
|
||||||
|
case ItemFields.Overview:
|
||||||
|
case ItemFields.OfficialRatingDescription:
|
||||||
|
case ItemFields.HomePageUrl:
|
||||||
|
case ItemFields.VoteCount:
|
||||||
|
case ItemFields.DisplayMediaType:
|
||||||
|
case ItemFields.ServiceName:
|
||||||
|
case ItemFields.Genres:
|
||||||
|
case ItemFields.Studios:
|
||||||
|
case ItemFields.Settings:
|
||||||
|
case ItemFields.OriginalTitle:
|
||||||
|
case ItemFields.Tags:
|
||||||
|
case ItemFields.DateLastMediaAdded:
|
||||||
|
case ItemFields.CriticRatingSummary:
|
||||||
|
return Fields.Count == 0 || Fields.Contains(name);
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public InternalItemsQuery()
|
public InternalItemsQuery()
|
||||||
{
|
{
|
||||||
GroupByPresentationUniqueKey = true;
|
GroupByPresentationUniqueKey = true;
|
||||||
EnableTotalRecordCount = true;
|
EnableTotalRecordCount = true;
|
||||||
|
|
||||||
|
Fields = new List<ItemFields>();
|
||||||
AlbumNames = new string[] { };
|
AlbumNames = new string[] { };
|
||||||
ArtistNames = new string[] { };
|
ArtistNames = new string[] { };
|
||||||
ExcludeArtistIds = new string[] { };
|
ExcludeArtistIds = new string[] { };
|
||||||
|
|
|
@ -15,13 +15,12 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class Movie
|
/// Class Movie
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Movie : Video, IHasCriticRating, IHasSpecialFeatures, IHasProductionLocations, IHasBudget, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping, IHasOriginalTitle
|
public class Movie : Video, IHasCriticRating, IHasSpecialFeatures, IHasBudget, IHasTrailers, IHasThemeMedia, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping, IHasOriginalTitle
|
||||||
{
|
{
|
||||||
public List<Guid> SpecialFeatureIds { get; set; }
|
public List<Guid> SpecialFeatureIds { get; set; }
|
||||||
|
|
||||||
public List<Guid> ThemeSongIds { get; set; }
|
public List<Guid> ThemeSongIds { get; set; }
|
||||||
public List<Guid> ThemeVideoIds { get; set; }
|
public List<Guid> ThemeVideoIds { get; set; }
|
||||||
public List<string> ProductionLocations { get; set; }
|
|
||||||
|
|
||||||
public Movie()
|
public Movie()
|
||||||
{
|
{
|
||||||
|
@ -32,7 +31,6 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
ThemeSongIds = new List<Guid>();
|
ThemeSongIds = new List<Guid>();
|
||||||
ThemeVideoIds = new List<Guid>();
|
ThemeVideoIds = new List<Guid>();
|
||||||
Taglines = new List<string>();
|
Taglines = new List<string>();
|
||||||
ProductionLocations = new List<string>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string AwardSummary { get; set; }
|
public string AwardSummary { get; set; }
|
||||||
|
|
|
@ -6,7 +6,7 @@ using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
public class MusicVideo : Video, IHasArtist, IHasMusicGenres, IHasProductionLocations, IHasBudget, IHasLookupInfo<MusicVideoInfo>
|
public class MusicVideo : Video, IHasArtist, IHasMusicGenres, IHasBudget, IHasLookupInfo<MusicVideoInfo>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the budget.
|
/// Gets or sets the budget.
|
||||||
|
@ -19,12 +19,10 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The revenue.</value>
|
/// <value>The revenue.</value>
|
||||||
public double? Revenue { get; set; }
|
public double? Revenue { get; set; }
|
||||||
public List<string> ProductionLocations { get; set; }
|
|
||||||
public List<string> Artists { get; set; }
|
public List<string> Artists { get; set; }
|
||||||
|
|
||||||
public MusicVideo()
|
public MusicVideo()
|
||||||
{
|
{
|
||||||
ProductionLocations = new List<string>();
|
|
||||||
Artists = new List<string>();
|
Artists = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,11 @@
|
||||||
using MediaBrowser.Model.Drawing;
|
using MediaBrowser.Model.Drawing;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
public class Photo : BaseItem, IHasTaglines
|
public class Photo : BaseItem
|
||||||
{
|
{
|
||||||
public List<string> Taglines { get; set; }
|
|
||||||
|
|
||||||
public Photo()
|
|
||||||
{
|
|
||||||
Taglines = new List<string>();
|
|
||||||
}
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
public override bool SupportsLocalMetadata
|
public override bool SupportsLocalMetadata
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,17 +17,14 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class Series
|
/// Class Series
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Series : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<SeriesInfo>, IHasSpecialFeatures, IMetadataContainer, IHasOriginalTitle
|
public class Series : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<SeriesInfo>, IMetadataContainer, IHasOriginalTitle
|
||||||
{
|
{
|
||||||
public List<Guid> SpecialFeatureIds { get; set; }
|
|
||||||
|
|
||||||
public int? AnimeSeriesIndex { get; set; }
|
public int? AnimeSeriesIndex { get; set; }
|
||||||
|
|
||||||
public Series()
|
public Series()
|
||||||
{
|
{
|
||||||
AirDays = new List<DayOfWeek>();
|
AirDays = new List<DayOfWeek>();
|
||||||
|
|
||||||
SpecialFeatureIds = new List<Guid>();
|
|
||||||
RemoteTrailers = new List<MediaUrl>();
|
RemoteTrailers = new List<MediaUrl>();
|
||||||
LocalTrailerIds = new List<Guid>();
|
LocalTrailerIds = new List<Guid>();
|
||||||
RemoteTrailerIds = new List<Guid>();
|
RemoteTrailerIds = new List<Guid>();
|
||||||
|
|
|
@ -10,16 +10,12 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class Trailer
|
/// Class Trailer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Trailer : Video, IHasCriticRating, IHasProductionLocations, IHasBudget, IHasTaglines, IHasMetascore, IHasOriginalTitle, IHasLookupInfo<TrailerInfo>
|
public class Trailer : Video, IHasCriticRating, IHasBudget, IHasMetascore, IHasOriginalTitle, IHasLookupInfo<TrailerInfo>
|
||||||
{
|
{
|
||||||
public List<string> ProductionLocations { get; set; }
|
|
||||||
|
|
||||||
public Trailer()
|
public Trailer()
|
||||||
{
|
{
|
||||||
RemoteTrailers = new List<MediaUrl>();
|
RemoteTrailers = new List<MediaUrl>();
|
||||||
Taglines = new List<string>();
|
|
||||||
Keywords = new List<string>();
|
Keywords = new List<string>();
|
||||||
ProductionLocations = new List<string>();
|
|
||||||
TrailerTypes = new List<TrailerType> { TrailerType.LocalTrailer };
|
TrailerTypes = new List<TrailerType> { TrailerType.LocalTrailer };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,12 +31,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
get { return TrailerTypes.Contains(TrailerType.LocalTrailer); }
|
get { return TrailerTypes.Contains(TrailerType.LocalTrailer); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the taglines.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The taglines.</value>
|
|
||||||
public List<string> Taglines { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the budget.
|
/// Gets or sets the budget.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -96,7 +96,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
Limit = query.Limit,
|
Limit = query.Limit,
|
||||||
IsAiring = true
|
IsAiring = true
|
||||||
|
|
||||||
}, CancellationToken.None).ConfigureAwait(false);
|
}, new Dto.DtoOptions(), CancellationToken.None).ConfigureAwait(false);
|
||||||
|
|
||||||
return GetResult(result);
|
return GetResult(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
ISupportsPlaceHolders,
|
ISupportsPlaceHolders,
|
||||||
IHasMediaSources,
|
IHasMediaSources,
|
||||||
IHasShortOverview,
|
IHasShortOverview,
|
||||||
IThemeMedia,
|
IThemeMedia
|
||||||
IArchivable
|
|
||||||
{
|
{
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
public string PrimaryVersionId { get; set; }
|
public string PrimaryVersionId { get; set; }
|
||||||
|
@ -197,21 +196,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
get { return LocalAlternateVersions.Count > 0; }
|
get { return LocalAlternateVersions.Count > 0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public bool IsArchive
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(Path))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var ext = System.IO.Path.GetExtension(Path) ?? string.Empty;
|
|
||||||
|
|
||||||
return new[] { ".zip", ".rar", ".7z" }.Contains(ext, StringComparer.OrdinalIgnoreCase);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<Guid> GetAdditionalPartIds()
|
public IEnumerable<Guid> GetAdditionalPartIds()
|
||||||
{
|
{
|
||||||
return AdditionalParts.Select(i => LibraryManager.GetNewItemId(i, typeof(Video)));
|
return AdditionalParts.Select(i => LibraryManager.GetNewItemId(i, typeof(Video)));
|
||||||
|
|
|
@ -242,10 +242,8 @@ namespace MediaBrowser.Controller.LiveTv
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the recommended programs internal.
|
/// Gets the recommended programs internal.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="query">The query.</param>
|
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
|
||||||
/// <returns>Task<QueryResult<LiveTvProgram>>.</returns>
|
/// <returns>Task<QueryResult<LiveTvProgram>>.</returns>
|
||||||
Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken);
|
Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the live tv information.
|
/// Gets the live tv information.
|
||||||
|
|
|
@ -132,7 +132,6 @@
|
||||||
<Compile Include="Entities\Game.cs" />
|
<Compile Include="Entities\Game.cs" />
|
||||||
<Compile Include="Entities\GameGenre.cs" />
|
<Compile Include="Entities\GameGenre.cs" />
|
||||||
<Compile Include="Entities\GameSystem.cs" />
|
<Compile Include="Entities\GameSystem.cs" />
|
||||||
<Compile Include="Entities\IArchivable.cs" />
|
|
||||||
<Compile Include="Entities\IByReferenceItem.cs" />
|
<Compile Include="Entities\IByReferenceItem.cs" />
|
||||||
<Compile Include="Entities\IHasAspectRatio.cs" />
|
<Compile Include="Entities\IHasAspectRatio.cs" />
|
||||||
<Compile Include="Entities\IHasBudget.cs" />
|
<Compile Include="Entities\IHasBudget.cs" />
|
||||||
|
@ -144,14 +143,12 @@
|
||||||
<Compile Include="Entities\IHasMediaSources.cs" />
|
<Compile Include="Entities\IHasMediaSources.cs" />
|
||||||
<Compile Include="Entities\IHasMetascore.cs" />
|
<Compile Include="Entities\IHasMetascore.cs" />
|
||||||
<Compile Include="Entities\IHasOriginalTitle.cs" />
|
<Compile Include="Entities\IHasOriginalTitle.cs" />
|
||||||
<Compile Include="Entities\IHasProductionLocations.cs" />
|
|
||||||
<Compile Include="Entities\IHasProgramAttributes.cs" />
|
<Compile Include="Entities\IHasProgramAttributes.cs" />
|
||||||
<Compile Include="Entities\IHasScreenshots.cs" />
|
<Compile Include="Entities\IHasScreenshots.cs" />
|
||||||
<Compile Include="Entities\IHasSeries.cs" />
|
<Compile Include="Entities\IHasSeries.cs" />
|
||||||
<Compile Include="Entities\IHasShortOverview.cs" />
|
<Compile Include="Entities\IHasShortOverview.cs" />
|
||||||
<Compile Include="Entities\IHasSpecialFeatures.cs" />
|
<Compile Include="Entities\IHasSpecialFeatures.cs" />
|
||||||
<Compile Include="Entities\IHasStartDate.cs" />
|
<Compile Include="Entities\IHasStartDate.cs" />
|
||||||
<Compile Include="Entities\IHasTaglines.cs" />
|
|
||||||
<Compile Include="Entities\IHasThemeMedia.cs" />
|
<Compile Include="Entities\IHasThemeMedia.cs" />
|
||||||
<Compile Include="Entities\IHasTrailers.cs" />
|
<Compile Include="Entities\IHasTrailers.cs" />
|
||||||
<Compile Include="Entities\IHasUserData.cs" />
|
<Compile Include="Entities\IHasUserData.cs" />
|
||||||
|
|
|
@ -893,14 +893,6 @@ namespace MediaBrowser.Controller.Providers
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
if (!string.IsNullOrWhiteSpace(val))
|
||||||
{
|
{
|
||||||
var hasProductionLocations = item as IHasProductionLocations;
|
|
||||||
if (hasProductionLocations != null)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
hasProductionLocations.AddProductionLocation(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -934,14 +926,7 @@ namespace MediaBrowser.Controller.Providers
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
if (!string.IsNullOrWhiteSpace(val))
|
||||||
{
|
{
|
||||||
var hasTaglines = item as IHasTaglines;
|
item.Tagline = val;
|
||||||
if (hasTaglines != null)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
hasTaglines.AddTagline(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,21 +350,17 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasProductionLocations = item as IHasProductionLocations;
|
//if (hasProductionLocations.ProductionLocations.Count > 0)
|
||||||
if (hasProductionLocations != null)
|
//{
|
||||||
{
|
// builder.Append("<Countries>");
|
||||||
if (hasProductionLocations.ProductionLocations.Count > 0)
|
|
||||||
{
|
|
||||||
builder.Append("<Countries>");
|
|
||||||
|
|
||||||
foreach (var name in hasProductionLocations.ProductionLocations)
|
// foreach (var name in hasProductionLocations.ProductionLocations)
|
||||||
{
|
// {
|
||||||
builder.Append("<Country>" + SecurityElement.Escape(name) + "</Country>");
|
// builder.Append("<Country>" + SecurityElement.Escape(name) + "</Country>");
|
||||||
}
|
// }
|
||||||
|
|
||||||
builder.Append("</Countries>");
|
// builder.Append("</Countries>");
|
||||||
}
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
var hasDisplayOrder = item as IHasDisplayOrder;
|
var hasDisplayOrder = item as IHasDisplayOrder;
|
||||||
if (hasDisplayOrder != null && !string.IsNullOrEmpty(hasDisplayOrder.DisplayOrder))
|
if (hasDisplayOrder != null && !string.IsNullOrEmpty(hasDisplayOrder.DisplayOrder))
|
||||||
|
@ -457,21 +453,12 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasTagline = item as IHasTaglines;
|
if (!string.IsNullOrWhiteSpace(item.Tagline))
|
||||||
if (hasTagline != null)
|
|
||||||
{
|
|
||||||
if (hasTagline.Taglines.Count > 0)
|
|
||||||
{
|
{
|
||||||
builder.Append("<Taglines>");
|
builder.Append("<Taglines>");
|
||||||
|
builder.Append("<Tagline>" + SecurityElement.Escape(item.Tagline) + "</Tagline>");
|
||||||
foreach (var tagline in hasTagline.Taglines)
|
|
||||||
{
|
|
||||||
builder.Append("<Tagline>" + SecurityElement.Escape(tagline) + "</Tagline>");
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.Append("</Taglines>");
|
builder.Append("</Taglines>");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (item.Genres.Count > 0)
|
if (item.Genres.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1165,9 +1165,6 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Updates\PackageTargetSystem.cs">
|
<Compile Include="..\MediaBrowser.Model\Updates\PackageTargetSystem.cs">
|
||||||
<Link>Updates\PackageTargetSystem.cs</Link>
|
<Link>Updates\PackageTargetSystem.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Updates\PackageType.cs">
|
|
||||||
<Link>Updates\PackageType.cs</Link>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="..\MediaBrowser.Model\Updates\PackageVersionClass.cs">
|
<Compile Include="..\MediaBrowser.Model\Updates\PackageVersionClass.cs">
|
||||||
<Link>Updates\PackageVersionClass.cs</Link>
|
<Link>Updates\PackageVersionClass.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -1128,9 +1128,6 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Updates\PackageTargetSystem.cs">
|
<Compile Include="..\MediaBrowser.Model\Updates\PackageTargetSystem.cs">
|
||||||
<Link>Updates\PackageTargetSystem.cs</Link>
|
<Link>Updates\PackageTargetSystem.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Updates\PackageType.cs">
|
|
||||||
<Link>Updates\PackageType.cs</Link>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="..\MediaBrowser.Model\Updates\PackageVersionClass.cs">
|
<Compile Include="..\MediaBrowser.Model\Updates\PackageVersionClass.cs">
|
||||||
<Link>Updates\PackageVersionClass.cs</Link>
|
<Link>Updates\PackageVersionClass.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -168,6 +168,8 @@ namespace MediaBrowser.Model.Configuration
|
||||||
public MetadataOptions[] MetadataOptions { get; set; }
|
public MetadataOptions[] MetadataOptions { get; set; }
|
||||||
|
|
||||||
public bool EnableAutomaticRestart { get; set; }
|
public bool EnableAutomaticRestart { get; set; }
|
||||||
|
public bool SkipDeserializationForBasicTypes { get; set; }
|
||||||
|
public bool SkipDeserializationForPrograms { get; set; }
|
||||||
|
|
||||||
public PathSubstitution[] PathSubstitutions { get; set; }
|
public PathSubstitution[] PathSubstitutions { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -787,11 +787,7 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// <value>The home page URL.</value>
|
/// <value>The home page URL.</value>
|
||||||
public string HomePageUrl { get; set; }
|
public string HomePageUrl { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
public string PlaceOfBirth { get; set; }
|
||||||
/// Gets or sets the production locations.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The production locations.</value>
|
|
||||||
public List<string> ProductionLocations { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the budget.
|
/// Gets or sets the budget.
|
||||||
|
|
|
@ -396,7 +396,6 @@
|
||||||
<Compile Include="Updates\CheckForUpdateResult.cs" />
|
<Compile Include="Updates\CheckForUpdateResult.cs" />
|
||||||
<Compile Include="Updates\PackageTargetSystem.cs" />
|
<Compile Include="Updates\PackageTargetSystem.cs" />
|
||||||
<Compile Include="Updates\InstallationInfo.cs" />
|
<Compile Include="Updates\InstallationInfo.cs" />
|
||||||
<Compile Include="Updates\PackageType.cs" />
|
|
||||||
<Compile Include="Updates\PackageVersionClass.cs" />
|
<Compile Include="Updates\PackageVersionClass.cs" />
|
||||||
<Compile Include="Entities\EmptyRequestResult.cs" />
|
<Compile Include="Entities\EmptyRequestResult.cs" />
|
||||||
<Compile Include="Configuration\UserConfiguration.cs" />
|
<Compile Include="Configuration\UserConfiguration.cs" />
|
||||||
|
|
|
@ -130,6 +130,8 @@
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Metascore,
|
Metascore,
|
||||||
|
|
||||||
|
OfficialRatingDescription,
|
||||||
|
|
||||||
OriginalTitle,
|
OriginalTitle,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -152,6 +154,8 @@
|
||||||
/// </summary>
|
/// </summary>
|
||||||
People,
|
People,
|
||||||
|
|
||||||
|
PlaceOfBirth,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The production locations
|
/// The production locations
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -12,7 +12,7 @@ namespace MediaBrowser.Model.Updates
|
||||||
/// The internal id of this package.
|
/// The internal id of this package.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The id.</value>
|
/// <value>The id.</value>
|
||||||
public int id { get; set; }
|
public string id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
|
@ -66,7 +66,7 @@ namespace MediaBrowser.Model.Updates
|
||||||
/// Gets or sets the type.
|
/// Gets or sets the type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The type.</value>
|
/// <value>The type.</value>
|
||||||
public PackageType type { get; set; }
|
public string type { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the target filename.
|
/// Gets or sets the target filename.
|
||||||
|
@ -127,7 +127,7 @@ namespace MediaBrowser.Model.Updates
|
||||||
/// Gets or sets the total number of ratings for this package.
|
/// Gets or sets the total number of ratings for this package.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The total ratings.</value>
|
/// <value>The total ratings.</value>
|
||||||
public int totalRatings { get; set; }
|
public int? totalRatings { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the average rating for this package .
|
/// Gets or sets the average rating for this package .
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
namespace MediaBrowser.Model.Updates
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Enum PackageType
|
|
||||||
/// </summary>
|
|
||||||
public enum PackageType
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// All
|
|
||||||
/// </summary>
|
|
||||||
All,
|
|
||||||
/// <summary>
|
|
||||||
/// The system
|
|
||||||
/// </summary>
|
|
||||||
System,
|
|
||||||
/// <summary>
|
|
||||||
/// The user installed
|
|
||||||
/// </summary>
|
|
||||||
UserInstalled
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -555,12 +555,6 @@ namespace MediaBrowser.Providers.Manager
|
||||||
return false;
|
return false;
|
||||||
case ImageType.Thumb:
|
case ImageType.Thumb:
|
||||||
return false;
|
return false;
|
||||||
case ImageType.Logo:
|
|
||||||
return false;
|
|
||||||
case ImageType.Backdrop:
|
|
||||||
return false;
|
|
||||||
case ImageType.Screenshot:
|
|
||||||
return false;
|
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,11 @@ namespace MediaBrowser.Providers.Manager
|
||||||
target.CustomRating = source.CustomRating;
|
target.CustomRating = source.CustomRating;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (replaceData || string.IsNullOrEmpty(target.Tagline))
|
||||||
|
{
|
||||||
|
target.Tagline = source.Tagline;
|
||||||
|
}
|
||||||
|
|
||||||
if (!lockedFields.Contains(MetadataFields.Overview))
|
if (!lockedFields.Contains(MetadataFields.Overview))
|
||||||
{
|
{
|
||||||
if (replaceData || string.IsNullOrEmpty(target.Overview))
|
if (replaceData || string.IsNullOrEmpty(target.Overview))
|
||||||
|
@ -165,20 +170,6 @@ namespace MediaBrowser.Providers.Manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lockedFields.Contains(MetadataFields.ProductionLocations))
|
|
||||||
{
|
|
||||||
var sourceHasProductionLocations = source as IHasProductionLocations;
|
|
||||||
var targetHasProductionLocations = target as IHasProductionLocations;
|
|
||||||
|
|
||||||
if (sourceHasProductionLocations != null && targetHasProductionLocations != null)
|
|
||||||
{
|
|
||||||
if (replaceData || targetHasProductionLocations.ProductionLocations.Count == 0)
|
|
||||||
{
|
|
||||||
targetHasProductionLocations.ProductionLocations = sourceHasProductionLocations.ProductionLocations;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (replaceData || !target.VoteCount.HasValue)
|
if (replaceData || !target.VoteCount.HasValue)
|
||||||
{
|
{
|
||||||
target.VoteCount = source.VoteCount;
|
target.VoteCount = source.VoteCount;
|
||||||
|
@ -200,7 +191,6 @@ namespace MediaBrowser.Providers.Manager
|
||||||
MergeMetascore(source, target, lockedFields, replaceData);
|
MergeMetascore(source, target, lockedFields, replaceData);
|
||||||
MergeCriticRating(source, target, lockedFields, replaceData);
|
MergeCriticRating(source, target, lockedFields, replaceData);
|
||||||
MergeAwards(source, target, lockedFields, replaceData);
|
MergeAwards(source, target, lockedFields, replaceData);
|
||||||
MergeTaglines(source, target, lockedFields, replaceData);
|
|
||||||
MergeTrailers(source, target, lockedFields, replaceData);
|
MergeTrailers(source, target, lockedFields, replaceData);
|
||||||
MergeShortOverview(source, target, lockedFields, replaceData);
|
MergeShortOverview(source, target, lockedFields, replaceData);
|
||||||
|
|
||||||
|
@ -330,20 +320,6 @@ namespace MediaBrowser.Providers.Manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void MergeTaglines(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
|
|
||||||
{
|
|
||||||
var sourceCast = source as IHasTaglines;
|
|
||||||
var targetCast = target as IHasTaglines;
|
|
||||||
|
|
||||||
if (sourceCast != null && targetCast != null)
|
|
||||||
{
|
|
||||||
if (replaceData || targetCast.Taglines.Count == 0)
|
|
||||||
{
|
|
||||||
targetCast.Taglines = sourceCast.Taglines;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void MergeTrailers(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
|
private static void MergeTrailers(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
|
||||||
{
|
{
|
||||||
var sourceCast = source as IHasTrailers;
|
var sourceCast = source as IHasTrailers;
|
||||||
|
|
|
@ -162,7 +162,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
{
|
{
|
||||||
var audio = item as Audio;
|
var audio = item as Audio;
|
||||||
|
|
||||||
return item.LocationType == LocationType.FileSystem && audio != null && !audio.IsArchive;
|
return item.LocationType == LocationType.FileSystem && audio != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
|
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
|
||||||
|
|
|
@ -38,13 +38,6 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
public async Task<ItemUpdateType> Probe<T>(T item, CancellationToken cancellationToken)
|
public async Task<ItemUpdateType> Probe<T>(T item, CancellationToken cancellationToken)
|
||||||
where T : Audio
|
where T : Audio
|
||||||
{
|
{
|
||||||
if (item.IsArchive)
|
|
||||||
{
|
|
||||||
var ext = Path.GetExtension(item.Path) ?? string.Empty;
|
|
||||||
item.Container = ext.TrimStart('.');
|
|
||||||
return ItemUpdateType.MetadataImport;
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = await GetMediaInfo(item, cancellationToken).ConfigureAwait(false);
|
var result = await GetMediaInfo(item, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
|
@ -72,13 +72,6 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
where T : Video
|
where T : Video
|
||||||
{
|
{
|
||||||
if (item.IsArchive)
|
|
||||||
{
|
|
||||||
var ext = Path.GetExtension(item.Path) ?? string.Empty;
|
|
||||||
item.Container = ext.TrimStart('.');
|
|
||||||
return ItemUpdateType.MetadataImport;
|
|
||||||
}
|
|
||||||
|
|
||||||
var isoMount = await MountIsoIfNeeded(item, cancellationToken).ConfigureAwait(false);
|
var isoMount = await MountIsoIfNeeded(item, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
BlurayDiscInfo blurayDiscInfo = null;
|
BlurayDiscInfo blurayDiscInfo = null;
|
||||||
|
|
|
@ -174,8 +174,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
{
|
{
|
||||||
var video = item as Video;
|
var video = item as Video;
|
||||||
|
|
||||||
if (item.LocationType == LocationType.FileSystem && video != null && !video.IsPlaceHolder &&
|
if (item.LocationType == LocationType.FileSystem && video != null && !video.IsPlaceHolder && !video.IsShortcut)
|
||||||
!video.IsShortcut && !video.IsArchive)
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,24 +143,19 @@ namespace MediaBrowser.Providers.Movies
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(movieData.tagline))
|
if (!string.IsNullOrEmpty(movieData.tagline))
|
||||||
{
|
{
|
||||||
var hasTagline = movie as IHasTaglines;
|
movie.Tagline = movieData.tagline;
|
||||||
if (hasTagline != null)
|
|
||||||
{
|
|
||||||
hasTagline.Taglines.Clear();
|
|
||||||
hasTagline.AddTagline(movieData.tagline);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (movieData.production_countries != null)
|
if (movieData.production_countries != null)
|
||||||
{
|
{
|
||||||
var hasProductionLocations = movie as IHasProductionLocations;
|
//var hasProductionLocations = movie as IHasProductionLocations;
|
||||||
if (hasProductionLocations != null)
|
//if (hasProductionLocations != null)
|
||||||
{
|
//{
|
||||||
hasProductionLocations.ProductionLocations = movieData
|
// hasProductionLocations.ProductionLocations = movieData
|
||||||
.production_countries
|
// .production_countries
|
||||||
.Select(i => i.name)
|
// .Select(i => i.name)
|
||||||
.ToList();
|
// .ToList();
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
movie.SetProviderId(MetadataProviders.Tmdb, movieData.id.ToString(_usCulture));
|
movie.SetProviderId(MetadataProviders.Tmdb, movieData.id.ToString(_usCulture));
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
return RunInternal(progress, cancellationToken);
|
return RunInternal(progress, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
|
private Task RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var seriesList = _libraryManager.GetItemList(new InternalItemsQuery()
|
var seriesList = _libraryManager.GetItemList(new InternalItemsQuery()
|
||||||
{
|
{
|
||||||
|
@ -59,34 +59,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
|
|
||||||
var seriesGroups = FindSeriesGroups(seriesList).Where(g => !string.IsNullOrEmpty(g.Key)).ToList();
|
var seriesGroups = FindSeriesGroups(seriesList).Where(g => !string.IsNullOrEmpty(g.Key)).ToList();
|
||||||
|
|
||||||
await new MissingEpisodeProvider(_logger, _config, _libraryManager, _localization, _fileSystem)
|
return new MissingEpisodeProvider(_logger, _config, _libraryManager, _localization, _fileSystem).Run(seriesGroups, true, cancellationToken);
|
||||||
.Run(seriesGroups, true, cancellationToken).ConfigureAwait(false);
|
|
||||||
|
|
||||||
var numComplete = 0;
|
|
||||||
|
|
||||||
foreach (var series in seriesList)
|
|
||||||
{
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
|
||||||
|
|
||||||
var episodes = series.GetRecursiveChildren(i => i is Episode)
|
|
||||||
.Cast<Episode>()
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var physicalEpisodes = episodes.Where(i => i.LocationType != LocationType.Virtual)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
series.SpecialFeatureIds = physicalEpisodes
|
|
||||||
.Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0)
|
|
||||||
.Select(i => i.Id)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
numComplete++;
|
|
||||||
double percent = numComplete;
|
|
||||||
percent /= seriesList.Count;
|
|
||||||
percent *= 100;
|
|
||||||
|
|
||||||
progress.Report(percent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static IEnumerable<IGrouping<string, Series>> FindSeriesGroups(List<Series> seriesList)
|
internal static IEnumerable<IGrouping<string, Series>> FindSeriesGroups(List<Series> seriesList)
|
||||||
|
|
|
@ -907,9 +907,13 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
dto.Keywords = item.Keywords;
|
dto.Keywords = item.Keywords;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fields.Contains(ItemFields.ProductionLocations))
|
if (fields.Contains(ItemFields.PlaceOfBirth))
|
||||||
{
|
{
|
||||||
SetProductionLocations(item, dto);
|
var person = item as Person;
|
||||||
|
if (person != null)
|
||||||
|
{
|
||||||
|
dto.PlaceOfBirth = person.PlaceOfBirth;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasAspectRatio = item as IHasAspectRatio;
|
var hasAspectRatio = item as IHasAspectRatio;
|
||||||
|
@ -998,8 +1002,11 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
}
|
}
|
||||||
dto.Audio = item.Audio;
|
dto.Audio = item.Audio;
|
||||||
|
|
||||||
|
if (fields.Contains(ItemFields.Settings))
|
||||||
|
{
|
||||||
dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
|
dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
|
||||||
dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
|
dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
dto.CriticRating = item.CriticRating;
|
dto.CriticRating = item.CriticRating;
|
||||||
|
|
||||||
|
@ -1089,10 +1096,9 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
|
|
||||||
if (fields.Contains(ItemFields.Taglines))
|
if (fields.Contains(ItemFields.Taglines))
|
||||||
{
|
{
|
||||||
var hasTagline = item as IHasTaglines;
|
if (!string.IsNullOrWhiteSpace(item.Tagline))
|
||||||
if (hasTagline != null)
|
|
||||||
{
|
{
|
||||||
dto.Taglines = hasTagline.Taglines;
|
dto.Taglines = new List<string> { item.Tagline };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dto.Taglines == null)
|
if (dto.Taglines == null)
|
||||||
|
@ -1529,31 +1535,6 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetProductionLocations(BaseItem item, BaseItemDto dto)
|
|
||||||
{
|
|
||||||
var hasProductionLocations = item as IHasProductionLocations;
|
|
||||||
|
|
||||||
if (hasProductionLocations != null)
|
|
||||||
{
|
|
||||||
dto.ProductionLocations = hasProductionLocations.ProductionLocations;
|
|
||||||
}
|
|
||||||
|
|
||||||
var person = item as Person;
|
|
||||||
if (person != null)
|
|
||||||
{
|
|
||||||
dto.ProductionLocations = new List<string>();
|
|
||||||
if (!string.IsNullOrEmpty(person.PlaceOfBirth))
|
|
||||||
{
|
|
||||||
dto.ProductionLocations.Add(person.PlaceOfBirth);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dto.ProductionLocations == null)
|
|
||||||
{
|
|
||||||
dto.ProductionLocations = new List<string>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Attaches the primary image aspect ratio.
|
/// Attaches the primary image aspect ratio.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -91,10 +91,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
HostConfig.Instance.DebugMode = false;
|
HostConfig.Instance.DebugMode = false;
|
||||||
|
|
||||||
HostConfig.Instance.LogFactory = LogManager.LogFactory;
|
HostConfig.Instance.LogFactory = LogManager.LogFactory;
|
||||||
|
HostConfig.Instance.AllowJsonpRequests = false;
|
||||||
|
|
||||||
// The Markdown feature causes slow startup times (5 mins+) on cold boots for some users
|
// The Markdown feature causes slow startup times (5 mins+) on cold boots for some users
|
||||||
// Custom format allows images
|
// Custom format allows images
|
||||||
HostConfig.Instance.EnableFeatures = Feature.Html | Feature.Json | Feature.CustomFormat;
|
HostConfig.Instance.EnableFeatures = Feature.Html | Feature.Json | Feature.Xml | Feature.CustomFormat;
|
||||||
|
|
||||||
container.Adapter = _containerAdapter;
|
container.Adapter = _containerAdapter;
|
||||||
|
|
||||||
|
|
|
@ -869,7 +869,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
SortBy = query.SortBy,
|
SortBy = query.SortBy,
|
||||||
SortOrder = query.SortOrder ?? SortOrder.Ascending,
|
SortOrder = query.SortOrder ?? SortOrder.Ascending,
|
||||||
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
||||||
TopParentIds = new[] { topFolder.Id.ToString("N") }
|
TopParentIds = new[] { topFolder.Id.ToString("N") },
|
||||||
|
Fields = options.Fields
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(query.SeriesTimerId))
|
if (!string.IsNullOrWhiteSpace(query.SeriesTimerId))
|
||||||
|
@ -920,7 +921,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken)
|
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var user = _userManager.GetUserById(query.UserId);
|
var user = _userManager.GetUserById(query.UserId);
|
||||||
|
|
||||||
|
@ -937,7 +938,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
IsKids = query.IsKids,
|
IsKids = query.IsKids,
|
||||||
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
||||||
SortBy = new[] { ItemSortBy.StartDate },
|
SortBy = new[] { ItemSortBy.StartDate },
|
||||||
TopParentIds = new[] { topFolder.Id.ToString("N") }
|
TopParentIds = new[] { topFolder.Id.ToString("N") },
|
||||||
|
Fields = options.Fields
|
||||||
};
|
};
|
||||||
|
|
||||||
if (query.Limit.HasValue)
|
if (query.Limit.HasValue)
|
||||||
|
@ -987,7 +989,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
|
|
||||||
public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
|
public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var internalResult = await GetRecommendedProgramsInternal(query, cancellationToken).ConfigureAwait(false);
|
var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
var user = _userManager.GetUserById(query.UserId);
|
var user = _userManager.GetUserById(query.UserId);
|
||||||
|
|
||||||
|
@ -1315,6 +1317,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_logger.Debug("Channel {0} has {1} new programs and {2} updated programs", currentChannel.Name, newPrograms.Count, updatedPrograms.Count);
|
||||||
|
|
||||||
if (newPrograms.Count > 0)
|
if (newPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
await _libraryManager.CreateItems(newPrograms, cancellationToken).ConfigureAwait(false);
|
await _libraryManager.CreateItems(newPrograms, cancellationToken).ConfigureAwait(false);
|
||||||
|
@ -1476,7 +1480,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetEmbyRecordings(RecordingQuery query, User user)
|
private QueryResult<BaseItem> GetEmbyRecordings(RecordingQuery query, DtoOptions dtoOptions, User user)
|
||||||
{
|
{
|
||||||
if (user == null || (query.IsInProgress ?? false))
|
if (user == null || (query.IsInProgress ?? false))
|
||||||
{
|
{
|
||||||
|
@ -1552,7 +1556,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
||||||
IncludeItemTypes = includeItemTypes.ToArray(),
|
IncludeItemTypes = includeItemTypes.ToArray(),
|
||||||
ExcludeItemTypes = excludeItemTypes.ToArray(),
|
ExcludeItemTypes = excludeItemTypes.ToArray(),
|
||||||
Genres = genres.ToArray()
|
Genres = genres.ToArray(),
|
||||||
|
Fields = dtoOptions.Fields
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1625,7 +1630,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
|
|
||||||
if (_services.Count == 1)
|
if (_services.Count == 1)
|
||||||
{
|
{
|
||||||
return GetEmbyRecordings(query, user);
|
return GetEmbyRecordings(query, new DtoOptions(), user);
|
||||||
}
|
}
|
||||||
|
|
||||||
await RefreshRecordings(cancellationToken).ConfigureAwait(false);
|
await RefreshRecordings(cancellationToken).ConfigureAwait(false);
|
||||||
|
@ -2717,7 +2722,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
|
|
||||||
public async Task<TunerHostInfo> SaveTunerHost(TunerHostInfo info, bool dataSourceChanged = true)
|
public async Task<TunerHostInfo> SaveTunerHost(TunerHostInfo info, bool dataSourceChanged = true)
|
||||||
{
|
{
|
||||||
info = (TunerHostInfo)_jsonSerializer.DeserializeFromString(_jsonSerializer.SerializeToString(info), typeof(TunerHostInfo));
|
info = _jsonSerializer.DeserializeFromString<TunerHostInfo>(_jsonSerializer.SerializeToString(info));
|
||||||
|
|
||||||
var provider = _tunerHosts.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
|
var provider = _tunerHosts.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
@ -2758,7 +2763,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
|
|
||||||
public async Task<ListingsProviderInfo> SaveListingProvider(ListingsProviderInfo info, bool validateLogin, bool validateListings)
|
public async Task<ListingsProviderInfo> SaveListingProvider(ListingsProviderInfo info, bool validateLogin, bool validateListings)
|
||||||
{
|
{
|
||||||
info = (ListingsProviderInfo)_jsonSerializer.DeserializeFromString(_jsonSerializer.SerializeToString(info), typeof(ListingsProviderInfo));
|
info = _jsonSerializer.DeserializeFromString< ListingsProviderInfo>(_jsonSerializer.SerializeToString(info));
|
||||||
|
|
||||||
var provider = _listingProviders.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
|
var provider = _listingProviders.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
@ -11,9 +11,10 @@
|
||||||
<AssemblyName>MediaBrowser.Server.Implementations</AssemblyName>
|
<AssemblyName>MediaBrowser.Server.Implementations</AssemblyName>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||||
<ReleaseVersion>
|
<ReleaseVersion>
|
||||||
</ReleaseVersion>
|
</ReleaseVersion>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
|
|
@ -274,6 +274,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesId", "GUID");
|
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesId", "GUID");
|
||||||
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesSortName", "Text");
|
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesSortName", "Text");
|
||||||
_connection.AddColumn(Logger, "TypedBaseItems", "ExternalSeriesId", "Text");
|
_connection.AddColumn(Logger, "TypedBaseItems", "ExternalSeriesId", "Text");
|
||||||
|
_connection.AddColumn(Logger, "TypedBaseItems", "ShortOverview", "Text");
|
||||||
|
_connection.AddColumn(Logger, "TypedBaseItems", "Tagline", "Text");
|
||||||
|
_connection.AddColumn(Logger, "TypedBaseItems", "Keywords", "Text");
|
||||||
|
_connection.AddColumn(Logger, "TypedBaseItems", "ProviderIds", "Text");
|
||||||
|
_connection.AddColumn(Logger, "TypedBaseItems", "Images", "Text");
|
||||||
|
|
||||||
_connection.AddColumn(Logger, "UserDataKeys", "Priority", "INT");
|
_connection.AddColumn(Logger, "UserDataKeys", "Priority", "INT");
|
||||||
_connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text");
|
_connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text");
|
||||||
|
@ -418,7 +423,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
"PresentationUniqueKey",
|
"PresentationUniqueKey",
|
||||||
"InheritedParentalRatingValue",
|
"InheritedParentalRatingValue",
|
||||||
"InheritedTags",
|
"InheritedTags",
|
||||||
"ExternalSeriesId"
|
"ExternalSeriesId",
|
||||||
|
"ShortOverview",
|
||||||
|
"Tagline",
|
||||||
|
"Keywords",
|
||||||
|
"ProviderIds",
|
||||||
|
"Images"
|
||||||
};
|
};
|
||||||
|
|
||||||
private readonly string[] _mediaStreamSaveColumns =
|
private readonly string[] _mediaStreamSaveColumns =
|
||||||
|
@ -541,7 +551,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
"SeasonId",
|
"SeasonId",
|
||||||
"SeriesId",
|
"SeriesId",
|
||||||
"SeriesSortName",
|
"SeriesSortName",
|
||||||
"ExternalSeriesId"
|
"ExternalSeriesId",
|
||||||
|
"ShortOverview",
|
||||||
|
"Tagline",
|
||||||
|
"Keywords",
|
||||||
|
"ProviderIds",
|
||||||
|
"Images"
|
||||||
};
|
};
|
||||||
_saveItemCommand = _connection.CreateCommand();
|
_saveItemCommand = _connection.CreateCommand();
|
||||||
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
|
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
|
||||||
|
@ -982,6 +997,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
|
|
||||||
_saveItemCommand.GetParameter(index++).Value = item.ExternalSeriesId;
|
_saveItemCommand.GetParameter(index++).Value = item.ExternalSeriesId;
|
||||||
|
_saveItemCommand.GetParameter(index++).Value = item.ShortOverview;
|
||||||
|
_saveItemCommand.GetParameter(index++).Value = item.Tagline;
|
||||||
|
_saveItemCommand.GetParameter(index++).Value = string.Join("|", item.Keywords.ToArray());
|
||||||
|
_saveItemCommand.GetParameter(index++).Value = SerializeProviderIds(item);
|
||||||
|
_saveItemCommand.GetParameter(index++).Value = SerializeImages(item);
|
||||||
|
|
||||||
_saveItemCommand.Transaction = transaction;
|
_saveItemCommand.Transaction = transaction;
|
||||||
|
|
||||||
|
@ -1031,6 +1051,99 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string SerializeProviderIds(BaseItem item)
|
||||||
|
{
|
||||||
|
var ids = item.ProviderIds.ToList();
|
||||||
|
|
||||||
|
if (ids.Count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.Join("|", ids.Select(i => i.Key + "=" + i.Value).ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DeserializeProviderIds(string value, BaseItem item)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.ProviderIds.Count > 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var parts = value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
foreach (var part in parts)
|
||||||
|
{
|
||||||
|
var idParts = part.Split('=');
|
||||||
|
|
||||||
|
item.SetProviderId(idParts[0], idParts[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string SerializeImages(BaseItem item)
|
||||||
|
{
|
||||||
|
var images = item.ImageInfos.ToList();
|
||||||
|
|
||||||
|
if (images.Count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.Join("|", images.Select(ToValueString).ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DeserializeImages(string value, BaseItem item)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.ImageInfos.Count > 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var parts = value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
foreach (var part in parts)
|
||||||
|
{
|
||||||
|
item.ImageInfos.Add(ItemImageInfoFromValueString(part));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ToValueString(ItemImageInfo image)
|
||||||
|
{
|
||||||
|
var delimeter = "*";
|
||||||
|
|
||||||
|
return (image.Path ?? string.Empty) +
|
||||||
|
delimeter +
|
||||||
|
image.DateModified.Ticks.ToString(CultureInfo.InvariantCulture) +
|
||||||
|
delimeter +
|
||||||
|
image.Type +
|
||||||
|
delimeter +
|
||||||
|
image.IsPlaceholder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemImageInfo ItemImageInfoFromValueString(string value)
|
||||||
|
{
|
||||||
|
var parts = value.Split(new[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
var image = new ItemImageInfo();
|
||||||
|
|
||||||
|
image.Path = parts[0];
|
||||||
|
image.DateModified = new DateTime(long.Parse(parts[1], CultureInfo.InvariantCulture), DateTimeKind.Utc);
|
||||||
|
image.Type = (ImageType)Enum.Parse(typeof(ImageType), parts[2], true);
|
||||||
|
image.IsPlaceholder = string.Equals(parts[3], true.ToString(), StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Internal retrieve from items or users table
|
/// Internal retrieve from items or users table
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1064,6 +1177,51 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseItem GetItem(IDataReader reader)
|
private BaseItem GetItem(IDataReader reader)
|
||||||
|
{
|
||||||
|
return GetItem(reader, new InternalItemsQuery());
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TypeRequiresDeserialization(Type type)
|
||||||
|
{
|
||||||
|
if (_config.Configuration.SkipDeserializationForBasicTypes)
|
||||||
|
{
|
||||||
|
if (type == typeof(MusicGenre))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type == typeof(GameGenre))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type == typeof(Genre))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type == typeof(Studio))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type == typeof(Year))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type == typeof(Book))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_config.Configuration.SkipDeserializationForPrograms)
|
||||||
|
{
|
||||||
|
if (type == typeof(LiveTvProgram))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseItem GetItem(IDataReader reader, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var typeString = reader.GetString(0);
|
var typeString = reader.GetString(0);
|
||||||
|
|
||||||
|
@ -1078,6 +1236,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
|
|
||||||
BaseItem item = null;
|
BaseItem item = null;
|
||||||
|
|
||||||
|
if (TypeRequiresDeserialization(type))
|
||||||
|
{
|
||||||
using (var stream = reader.GetMemoryStream(1, _memoryStreamProvider))
|
using (var stream = reader.GetMemoryStream(1, _memoryStreamProvider))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -1088,6 +1248,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
{
|
{
|
||||||
Logger.ErrorException("Error deserializing item", ex);
|
Logger.ErrorException("Error deserializing item", ex);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
@ -1104,7 +1266,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(2))
|
if (!reader.IsDBNull(2))
|
||||||
{
|
{
|
||||||
|
@ -1179,194 +1340,275 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(15))
|
var index = 15;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.CommunityRating = reader.GetFloat(15);
|
item.CommunityRating = reader.GetFloat(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.CustomRating))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.CustomRating = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(16))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.CustomRating = reader.GetString(16);
|
item.IndexNumber = reader.GetInt32(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.Settings))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.IsLocked = reader.GetBoolean(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.PreferredMetadataLanguage = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.PreferredMetadataCountryCode = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(17))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.IndexNumber = reader.GetInt32(17);
|
item.IsHD = reader.GetBoolean(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.ExternalEtag = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.DateLastRefreshed = reader.GetDateTime(index).ToUniversalTime();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Name = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Path = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.PremiereDate = reader.GetDateTime(index).ToUniversalTime();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.Overview))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Overview = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(18))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.IsLocked = reader.GetBoolean(18);
|
item.ParentIndexNumber = reader.GetInt32(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.ProductionYear = reader.GetInt32(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.OfficialRating = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.OfficialRatingDescription))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.OfficialRatingDescription = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(19))
|
if (query.HasField(ItemFields.HomePageUrl))
|
||||||
{
|
{
|
||||||
item.PreferredMetadataLanguage = reader.GetString(19);
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.HomePageUrl = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(20))
|
if (query.HasField(ItemFields.DisplayMediaType))
|
||||||
{
|
{
|
||||||
item.PreferredMetadataCountryCode = reader.GetString(20);
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.DisplayMediaType = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(21))
|
if (query.HasField(ItemFields.SortName))
|
||||||
{
|
{
|
||||||
item.IsHD = reader.GetBoolean(21);
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.ForcedSortName = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(22))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.ExternalEtag = reader.GetString(22);
|
item.RunTimeTicks = reader.GetInt64(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.VoteCount))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.VoteCount = reader.GetInt32(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(23))
|
if (query.HasField(ItemFields.DateCreated))
|
||||||
{
|
{
|
||||||
item.DateLastRefreshed = reader.GetDateTime(23).ToUniversalTime();
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.DateCreated = reader.GetDateTime(index).ToUniversalTime();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(24))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.Name = reader.GetString(24);
|
item.DateModified = reader.GetDateTime(index).ToUniversalTime();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
item.Id = reader.GetGuid(index);
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.Genres))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Genres = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(25))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.Path = reader.GetString(25);
|
item.ParentId = reader.GetGuid(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Audio = (ProgramAudio)Enum.Parse(typeof(ProgramAudio), reader.GetString(index), true);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.ServiceName))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.ServiceName = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(26))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.PremiereDate = reader.GetDateTime(26).ToUniversalTime();
|
item.IsInMixedFolder = reader.GetBoolean(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.DateLastSaved = reader.GetDateTime(index).ToUniversalTime();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.Settings))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.LockedFields = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => (MetadataFields)Enum.Parse(typeof(MetadataFields), i, true)).ToList();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(27))
|
if (query.HasField(ItemFields.Studios))
|
||||||
{
|
{
|
||||||
item.Overview = reader.GetString(27);
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Studios = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(28))
|
if (query.HasField(ItemFields.Tags))
|
||||||
{
|
{
|
||||||
item.ParentIndexNumber = reader.GetInt32(28);
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Tags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(29))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.ProductionYear = reader.GetInt32(29);
|
item.SourceType = (SourceType)Enum.Parse(typeof(SourceType), reader.GetString(index), true);
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(30))
|
|
||||||
{
|
|
||||||
item.OfficialRating = reader.GetString(30);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(31))
|
|
||||||
{
|
|
||||||
item.OfficialRatingDescription = reader.GetString(31);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(32))
|
|
||||||
{
|
|
||||||
item.HomePageUrl = reader.GetString(32);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(33))
|
|
||||||
{
|
|
||||||
item.DisplayMediaType = reader.GetString(33);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(34))
|
|
||||||
{
|
|
||||||
item.ForcedSortName = reader.GetString(34);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(35))
|
|
||||||
{
|
|
||||||
item.RunTimeTicks = reader.GetInt64(35);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(36))
|
|
||||||
{
|
|
||||||
item.VoteCount = reader.GetInt32(36);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(37))
|
|
||||||
{
|
|
||||||
item.DateCreated = reader.GetDateTime(37).ToUniversalTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(38))
|
|
||||||
{
|
|
||||||
item.DateModified = reader.GetDateTime(38).ToUniversalTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
item.Id = reader.GetGuid(39);
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(40))
|
|
||||||
{
|
|
||||||
item.Genres = reader.GetString(40).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(41))
|
|
||||||
{
|
|
||||||
item.ParentId = reader.GetGuid(41);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(42))
|
|
||||||
{
|
|
||||||
item.Audio = (ProgramAudio)Enum.Parse(typeof(ProgramAudio), reader.GetString(42), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(43))
|
|
||||||
{
|
|
||||||
item.ServiceName = reader.GetString(43);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(44))
|
|
||||||
{
|
|
||||||
item.IsInMixedFolder = reader.GetBoolean(44);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(45))
|
|
||||||
{
|
|
||||||
item.DateLastSaved = reader.GetDateTime(45).ToUniversalTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(46))
|
|
||||||
{
|
|
||||||
item.LockedFields = reader.GetString(46).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => (MetadataFields)Enum.Parse(typeof(MetadataFields), i, true)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(47))
|
|
||||||
{
|
|
||||||
item.Studios = reader.GetString(47).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(48))
|
|
||||||
{
|
|
||||||
item.Tags = reader.GetString(48).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reader.IsDBNull(49))
|
|
||||||
{
|
|
||||||
item.SourceType = (SourceType)Enum.Parse(typeof(SourceType), reader.GetString(49), true);
|
|
||||||
}
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
var trailer = item as Trailer;
|
var trailer = item as Trailer;
|
||||||
if (trailer != null)
|
if (trailer != null)
|
||||||
{
|
{
|
||||||
if (!reader.IsDBNull(50))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
trailer.TrailerTypes = reader.GetString(50).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => (TrailerType)Enum.Parse(typeof(TrailerType), i, true)).ToList();
|
trailer.TrailerTypes = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => (TrailerType)Enum.Parse(typeof(TrailerType), i, true)).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
var index = 51;
|
if (query.HasField(ItemFields.OriginalTitle))
|
||||||
|
{
|
||||||
if (!reader.IsDBNull(index))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.OriginalTitle = reader.GetString(index);
|
item.OriginalTitle = reader.GetString(index);
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
var video = item as Video;
|
var video = item as Video;
|
||||||
if (video != null)
|
if (video != null)
|
||||||
|
@ -1378,12 +1620,15 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.DateLastMediaAdded))
|
||||||
|
{
|
||||||
var folder = item as Folder;
|
var folder = item as Folder;
|
||||||
if (folder != null && !reader.IsDBNull(index))
|
if (folder != null && !reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
folder.DateLastMediaAdded = reader.GetDateTime(index).ToUniversalTime();
|
folder.DateLastMediaAdded = reader.GetDateTime(index).ToUniversalTime();
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(index))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
|
@ -1397,11 +1642,14 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.CriticRatingSummary))
|
||||||
|
{
|
||||||
if (!reader.IsDBNull(index))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
item.CriticRatingSummary = reader.GetString(index);
|
item.CriticRatingSummary = reader.GetString(index);
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
if (!reader.IsDBNull(index))
|
if (!reader.IsDBNull(index))
|
||||||
{
|
{
|
||||||
|
@ -1480,6 +1728,54 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.ShortOverview))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.ShortOverview = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.Taglines))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Tagline = reader.GetString(index);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.HasField(ItemFields.Keywords))
|
||||||
|
{
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
item.Keywords = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
DeserializeProviderIds(reader.GetString(index), item);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(index))
|
||||||
|
{
|
||||||
|
DeserializeImages(reader.GetString(index), item);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(item.Tagline))
|
||||||
|
{
|
||||||
|
var movie = item as Movie;
|
||||||
|
if (movie != null && movie.Taglines.Count > 0)
|
||||||
|
{
|
||||||
|
movie.Tagline = movie.Taglines[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1796,10 +2092,47 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<ItemFields> allFields = Enum.GetNames(typeof(ItemFields))
|
||||||
|
.Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
private IEnumerable<string> GetColumnNamesFromField(ItemFields field)
|
||||||
|
{
|
||||||
|
if (field == ItemFields.Settings)
|
||||||
|
{
|
||||||
|
return new[] { "IsLocked", "PreferredMetadataCountryCode", "PreferredMetadataLanguage", "LockedFields" };
|
||||||
|
}
|
||||||
|
if (field == ItemFields.ServiceName)
|
||||||
|
{
|
||||||
|
return new[] { "ExternalServiceId" };
|
||||||
|
}
|
||||||
|
if (field == ItemFields.SortName)
|
||||||
|
{
|
||||||
|
return new[] { "ForcedSortName" };
|
||||||
|
}
|
||||||
|
if (field == ItemFields.Taglines)
|
||||||
|
{
|
||||||
|
return new[] { "Tagline" };
|
||||||
|
}
|
||||||
|
|
||||||
|
return new[] { field.ToString() };
|
||||||
|
}
|
||||||
|
|
||||||
private string[] GetFinalColumnsToSelect(InternalItemsQuery query, string[] startColumns, IDbCommand cmd)
|
private string[] GetFinalColumnsToSelect(InternalItemsQuery query, string[] startColumns, IDbCommand cmd)
|
||||||
{
|
{
|
||||||
var list = startColumns.ToList();
|
var list = startColumns.ToList();
|
||||||
|
|
||||||
|
foreach (var field in allFields)
|
||||||
|
{
|
||||||
|
if (!query.HasField(field))
|
||||||
|
{
|
||||||
|
foreach (var fieldToRemove in GetColumnNamesFromField(field).ToList())
|
||||||
|
{
|
||||||
|
list.Remove(fieldToRemove);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (EnableJoinUserData(query))
|
if (EnableJoinUserData(query))
|
||||||
{
|
{
|
||||||
list.Add("UserDataDb.UserData.UserId");
|
list.Add("UserDataDb.UserData.UserId");
|
||||||
|
@ -1954,7 +2287,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
|
|
||||||
while (reader.Read())
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
var item = GetItem(reader);
|
var item = GetItem(reader, query);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
list.Add(item);
|
list.Add(item);
|
||||||
|
@ -2141,7 +2474,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
{
|
{
|
||||||
while (reader.Read())
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
var item = GetItem(reader);
|
var item = GetItem(reader, query);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
list.Add(item);
|
list.Add(item);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<runtime>
|
<runtime>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
@ -8,4 +8,4 @@
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/></startup></configuration>
|
||||||
|
|
|
@ -102,7 +102,12 @@ using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using CommonIO;
|
using CommonIO;
|
||||||
using MediaBrowser.Api.Playback;
|
using MediaBrowser.Api.Playback;
|
||||||
|
using MediaBrowser.Common.Implementations.Serialization;
|
||||||
using MediaBrowser.Common.Implementations.Updates;
|
using MediaBrowser.Common.Implementations.Updates;
|
||||||
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Startup.Common
|
namespace MediaBrowser.Server.Startup.Common
|
||||||
{
|
{
|
||||||
|
@ -363,6 +368,89 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
LogManager.RemoveConsoleOutput();
|
LogManager.RemoveConsoleOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override IJsonSerializer CreateJsonSerializer()
|
||||||
|
{
|
||||||
|
var result = base.CreateJsonSerializer();
|
||||||
|
|
||||||
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ShortOverview" };
|
||||||
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "Taglines" };
|
||||||
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "Keywords" };
|
||||||
|
ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ShortOverview" };
|
||||||
|
ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ShortOverview" };
|
||||||
|
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ProviderIds" };
|
||||||
|
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ImageInfos" };
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public override Task Init(IProgress<double> progress)
|
public override Task Init(IProgress<double> progress)
|
||||||
{
|
{
|
||||||
HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber;
|
HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber;
|
||||||
|
|
|
@ -48,6 +48,10 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
|
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="ServiceStack.Text, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
|
|
@ -492,13 +492,9 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
||||||
{
|
{
|
||||||
var val = reader.ReadElementContentAsString();
|
var val = reader.ReadElementContentAsString();
|
||||||
|
|
||||||
var hasTagline = item as IHasTaglines;
|
|
||||||
if (hasTagline != null)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
if (!string.IsNullOrWhiteSpace(val))
|
||||||
{
|
{
|
||||||
hasTagline.AddTagline(val);
|
item.Tagline = val;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -507,20 +503,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
||||||
{
|
{
|
||||||
var val = reader.ReadElementContentAsString();
|
var val = reader.ReadElementContentAsString();
|
||||||
|
|
||||||
var hasProductionLocations = item as IHasProductionLocations;
|
|
||||||
if (hasProductionLocations != null)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
if (!string.IsNullOrWhiteSpace(val))
|
||||||
{
|
{
|
||||||
var parts = val.Split('/')
|
//var countries = val.Split('/')
|
||||||
.Select(i => i.Trim())
|
// .Select(i => i.Trim())
|
||||||
.Where(i => !string.IsNullOrWhiteSpace(i));
|
// .Where(i => !string.IsNullOrWhiteSpace(i));
|
||||||
|
|
||||||
foreach (var p in parts)
|
|
||||||
{
|
|
||||||
hasProductionLocations.AddProductionLocation(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
||||||
"imdbid",
|
"imdbid",
|
||||||
"imdb_id",
|
"imdb_id",
|
||||||
"plotkeyword",
|
"plotkeyword",
|
||||||
"country",
|
//"country",
|
||||||
"audiodbalbumid",
|
"audiodbalbumid",
|
||||||
"audiodbartistid",
|
"audiodbartistid",
|
||||||
"awardsummary",
|
"awardsummary",
|
||||||
|
@ -718,23 +718,15 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
||||||
writer.WriteElementString("runtime", Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture));
|
writer.WriteElementString("runtime", Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasTaglines = item as IHasTaglines;
|
if (!string.IsNullOrWhiteSpace(item.Tagline))
|
||||||
if (hasTaglines != null)
|
|
||||||
{
|
{
|
||||||
foreach (var tagline in hasTaglines.Taglines)
|
writer.WriteElementString("tagline", item.Tagline);
|
||||||
{
|
|
||||||
writer.WriteElementString("tagline", tagline);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasProductionLocations = item as IHasProductionLocations;
|
//foreach (var country in hasProductionLocations.ProductionLocations)
|
||||||
if (hasProductionLocations != null)
|
//{
|
||||||
{
|
// writer.WriteElementString("country", country);
|
||||||
foreach (var country in hasProductionLocations.ProductionLocations)
|
//}
|
||||||
{
|
|
||||||
writer.WriteElementString("country", country);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var genre in item.Genres)
|
foreach (var genre in item.Genres)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.660</version>
|
<version>3.0.661</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains common components shared by Emby Theater and Emby Server. Not intended for plugin developer consumption.</description>
|
<description>Contains common components shared by Emby Theater and Emby Server. Not intended for plugin developer consumption.</description>
|
||||||
<copyright>Copyright © Emby 2013</copyright>
|
<copyright>Copyright © Emby 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.660" />
|
<dependency id="MediaBrowser.Common" version="3.0.661" />
|
||||||
<dependency id="NLog" version="4.3.8" />
|
<dependency id="NLog" version="4.3.8" />
|
||||||
<dependency id="SimpleInjector" version="3.2.2" />
|
<dependency id="SimpleInjector" version="3.2.2" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.660</version>
|
<version>3.0.661</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Emby Team</authors>
|
<authors>Emby Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.660</version>
|
<version>3.0.661</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Emby Team</authors>
|
<authors>Emby Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains core components required to build plugins for Emby Server.</description>
|
<description>Contains core components required to build plugins for Emby Server.</description>
|
||||||
<copyright>Copyright © Emby 2013</copyright>
|
<copyright>Copyright © Emby 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.660" />
|
<dependency id="MediaBrowser.Common" version="3.0.661" />
|
||||||
<dependency id="Interfaces.IO" version="1.0.0.5" />
|
<dependency id="Interfaces.IO" version="1.0.0.5" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user