aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-10-08 01:58:15 -0400
committerGitHub <noreply@github.com>2016-10-08 01:58:15 -0400
commit82c00b079df5ea7d9712f27c94852ba75bd552cc (patch)
tree7f6128a0a9e84ba10fec160600f22b460ec5695b /MediaBrowser.Server.Implementations
parente5bb2baa67d4b2dc216cf9c6b82d0e1c7997454a (diff)
parent5cd3276775461d96d912d47fbae6857b887b98d0 (diff)
Merge pull request #2215 from MediaBrowser/dev
pass requested fields to data layer
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs45
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs3
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs23
-rw-r--r--MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj5
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs547
-rw-r--r--MediaBrowser.Server.Implementations/app.config8
6 files changed, 476 insertions, 155 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index 46ee29b63..ae204c892 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -907,9 +907,13 @@ namespace MediaBrowser.Server.Implementations.Dto
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;
@@ -998,8 +1002,11 @@ namespace MediaBrowser.Server.Implementations.Dto
}
dto.Audio = item.Audio;
- dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
- dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
+ if (fields.Contains(ItemFields.Settings))
+ {
+ dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
+ dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
+ }
dto.CriticRating = item.CriticRating;
@@ -1089,10 +1096,9 @@ namespace MediaBrowser.Server.Implementations.Dto
if (fields.Contains(ItemFields.Taglines))
{
- var hasTagline = item as IHasTaglines;
- if (hasTagline != null)
+ if (!string.IsNullOrWhiteSpace(item.Tagline))
{
- dto.Taglines = hasTagline.Taglines;
+ dto.Taglines = new List<string> { item.Tagline };
}
if (dto.Taglines == null)
@@ -1529,31 +1535,6 @@ namespace MediaBrowser.Server.Implementations.Dto
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>
/// Attaches the primary image aspect ratio.
/// </summary>
diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
index 2ebeb0d44..9ec671908 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -91,10 +91,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer
HostConfig.Instance.DebugMode = false;
HostConfig.Instance.LogFactory = LogManager.LogFactory;
+ HostConfig.Instance.AllowJsonpRequests = false;
// The Markdown feature causes slow startup times (5 mins+) on cold boots for some users
// 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;
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 60b5b023a..93d8f8ef4 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -869,7 +869,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
SortBy = query.SortBy,
SortOrder = query.SortOrder ?? SortOrder.Ascending,
EnableTotalRecordCount = query.EnableTotalRecordCount,
- TopParentIds = new[] { topFolder.Id.ToString("N") }
+ TopParentIds = new[] { topFolder.Id.ToString("N") },
+ Fields = options.Fields
};
if (!string.IsNullOrWhiteSpace(query.SeriesTimerId))
@@ -920,7 +921,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
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);
@@ -937,7 +938,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
IsKids = query.IsKids,
EnableTotalRecordCount = query.EnableTotalRecordCount,
SortBy = new[] { ItemSortBy.StartDate },
- TopParentIds = new[] { topFolder.Id.ToString("N") }
+ TopParentIds = new[] { topFolder.Id.ToString("N") },
+ Fields = options.Fields
};
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)
{
- var internalResult = await GetRecommendedProgramsInternal(query, cancellationToken).ConfigureAwait(false);
+ var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false);
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)
{
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))
{
@@ -1552,7 +1556,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
EnableTotalRecordCount = query.EnableTotalRecordCount,
IncludeItemTypes = includeItemTypes.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)
{
- return GetEmbyRecordings(query, user);
+ return GetEmbyRecordings(query, new DtoOptions(), user);
}
await RefreshRecordings(cancellationToken).ConfigureAwait(false);
@@ -2717,7 +2722,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
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));
@@ -2758,7 +2763,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
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));
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index 78b04aaa5..73e6ce1a5 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -1,5 +1,5 @@
<?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')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -11,9 +11,10 @@
<AssemblyName>MediaBrowser.Server.Implementations</AssemblyName>
<FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<ReleaseVersion>
</ReleaseVersion>
+ <TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 8a8d0b749..8275b01b0 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -274,6 +274,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesId", "GUID");
_connection.AddColumn(Logger, "TypedBaseItems", "SeriesSortName", "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, "ItemValues", "CleanValue", "Text");
@@ -418,7 +423,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
"PresentationUniqueKey",
"InheritedParentalRatingValue",
"InheritedTags",
- "ExternalSeriesId"
+ "ExternalSeriesId",
+ "ShortOverview",
+ "Tagline",
+ "Keywords",
+ "ProviderIds",
+ "Images"
};
private readonly string[] _mediaStreamSaveColumns =
@@ -541,7 +551,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
"SeasonId",
"SeriesId",
"SeriesSortName",
- "ExternalSeriesId"
+ "ExternalSeriesId",
+ "ShortOverview",
+ "Tagline",
+ "Keywords",
+ "ProviderIds",
+ "Images"
};
_saveItemCommand = _connection.CreateCommand();
_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.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;
@@ -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>
/// Internal retrieve from items or users table
/// </summary>
@@ -1065,6 +1178,51 @@ namespace MediaBrowser.Server.Implementations.Persistence
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 type = _typeMapper.GetType(typeString);
@@ -1078,34 +1236,37 @@ namespace MediaBrowser.Server.Implementations.Persistence
BaseItem item = null;
- using (var stream = reader.GetMemoryStream(1, _memoryStreamProvider))
+ if (TypeRequiresDeserialization(type))
{
- try
- {
- item = _jsonSerializer.DeserializeFromStream(stream, type) as BaseItem;
- }
- catch (SerializationException ex)
- {
- Logger.ErrorException("Error deserializing item", ex);
- }
-
- if (item == null)
+ using (var stream = reader.GetMemoryStream(1, _memoryStreamProvider))
{
try
{
- item = Activator.CreateInstance(type) as BaseItem;
+ item = _jsonSerializer.DeserializeFromStream(stream, type) as BaseItem;
}
- catch
+ catch (SerializationException ex)
{
+ Logger.ErrorException("Error deserializing item", ex);
}
}
+ }
- if (item == null)
+ if (item == null)
+ {
+ try
+ {
+ item = Activator.CreateInstance(type) as BaseItem;
+ }
+ catch
{
- return null;
}
}
+ if (item == null)
+ {
+ return null;
+ }
+
if (!reader.IsDBNull(2))
{
var hasStartDate = item as IHasStartDate;
@@ -1179,194 +1340,275 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- if (!reader.IsDBNull(15))
- {
- item.CommunityRating = reader.GetFloat(15);
- }
+ var index = 15;
- if (!reader.IsDBNull(16))
+ if (!reader.IsDBNull(index))
{
- item.CustomRating = reader.GetString(16);
+ item.CommunityRating = reader.GetFloat(index);
}
+ index++;
- if (!reader.IsDBNull(17))
+ if (query.HasField(ItemFields.CustomRating))
{
- item.IndexNumber = reader.GetInt32(17);
+ if (!reader.IsDBNull(index))
+ {
+ item.CustomRating = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(18))
+ if (!reader.IsDBNull(index))
{
- item.IsLocked = reader.GetBoolean(18);
+ item.IndexNumber = reader.GetInt32(index);
}
+ index++;
- if (!reader.IsDBNull(19))
+ if (query.HasField(ItemFields.Settings))
{
- item.PreferredMetadataLanguage = reader.GetString(19);
- }
+ if (!reader.IsDBNull(index))
+ {
+ item.IsLocked = reader.GetBoolean(index);
+ }
+ index++;
- if (!reader.IsDBNull(20))
- {
- item.PreferredMetadataCountryCode = reader.GetString(20);
+ if (!reader.IsDBNull(index))
+ {
+ item.PreferredMetadataLanguage = reader.GetString(index);
+ }
+ index++;
+
+ if (!reader.IsDBNull(index))
+ {
+ item.PreferredMetadataCountryCode = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(21))
+ if (!reader.IsDBNull(index))
{
- item.IsHD = reader.GetBoolean(21);
+ item.IsHD = reader.GetBoolean(index);
}
+ index++;
- if (!reader.IsDBNull(22))
+ if (!reader.IsDBNull(index))
{
- item.ExternalEtag = reader.GetString(22);
+ item.ExternalEtag = reader.GetString(index);
}
+ index++;
- if (!reader.IsDBNull(23))
+ if (!reader.IsDBNull(index))
{
- item.DateLastRefreshed = reader.GetDateTime(23).ToUniversalTime();
+ item.DateLastRefreshed = reader.GetDateTime(index).ToUniversalTime();
}
+ index++;
- if (!reader.IsDBNull(24))
+ if (!reader.IsDBNull(index))
{
- item.Name = reader.GetString(24);
+ item.Name = reader.GetString(index);
}
+ index++;
- if (!reader.IsDBNull(25))
+ if (!reader.IsDBNull(index))
{
- item.Path = reader.GetString(25);
+ item.Path = reader.GetString(index);
}
+ index++;
- if (!reader.IsDBNull(26))
+ if (!reader.IsDBNull(index))
{
- item.PremiereDate = reader.GetDateTime(26).ToUniversalTime();
+ item.PremiereDate = reader.GetDateTime(index).ToUniversalTime();
}
+ index++;
- if (!reader.IsDBNull(27))
+ if (query.HasField(ItemFields.Overview))
{
- item.Overview = reader.GetString(27);
+ if (!reader.IsDBNull(index))
+ {
+ item.Overview = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(28))
+ if (!reader.IsDBNull(index))
{
- item.ParentIndexNumber = reader.GetInt32(28);
+ item.ParentIndexNumber = reader.GetInt32(index);
}
+ index++;
- if (!reader.IsDBNull(29))
+ if (!reader.IsDBNull(index))
{
- item.ProductionYear = reader.GetInt32(29);
+ item.ProductionYear = reader.GetInt32(index);
}
+ index++;
- if (!reader.IsDBNull(30))
+ if (!reader.IsDBNull(index))
{
- item.OfficialRating = reader.GetString(30);
+ item.OfficialRating = reader.GetString(index);
}
+ index++;
- if (!reader.IsDBNull(31))
+ if (query.HasField(ItemFields.OfficialRatingDescription))
{
- item.OfficialRatingDescription = reader.GetString(31);
+ if (!reader.IsDBNull(index))
+ {
+ item.OfficialRatingDescription = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(32))
+ if (query.HasField(ItemFields.HomePageUrl))
{
- item.HomePageUrl = reader.GetString(32);
+ if (!reader.IsDBNull(index))
+ {
+ item.HomePageUrl = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(33))
+ if (query.HasField(ItemFields.DisplayMediaType))
{
- item.DisplayMediaType = reader.GetString(33);
+ if (!reader.IsDBNull(index))
+ {
+ item.DisplayMediaType = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(34))
+ if (query.HasField(ItemFields.SortName))
{
- item.ForcedSortName = reader.GetString(34);
+ if (!reader.IsDBNull(index))
+ {
+ item.ForcedSortName = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(35))
+ if (!reader.IsDBNull(index))
{
- item.RunTimeTicks = reader.GetInt64(35);
+ item.RunTimeTicks = reader.GetInt64(index);
}
+ index++;
- if (!reader.IsDBNull(36))
+ if (query.HasField(ItemFields.VoteCount))
{
- item.VoteCount = reader.GetInt32(36);
+ if (!reader.IsDBNull(index))
+ {
+ item.VoteCount = reader.GetInt32(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(37))
+ if (query.HasField(ItemFields.DateCreated))
{
- item.DateCreated = reader.GetDateTime(37).ToUniversalTime();
+ if (!reader.IsDBNull(index))
+ {
+ item.DateCreated = reader.GetDateTime(index).ToUniversalTime();
+ }
+ index++;
}
- if (!reader.IsDBNull(38))
+ if (!reader.IsDBNull(index))
{
- item.DateModified = reader.GetDateTime(38).ToUniversalTime();
+ item.DateModified = reader.GetDateTime(index).ToUniversalTime();
}
+ index++;
- item.Id = reader.GetGuid(39);
+ item.Id = reader.GetGuid(index);
+ index++;
- if (!reader.IsDBNull(40))
+ if (query.HasField(ItemFields.Genres))
{
- item.Genres = reader.GetString(40).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ if (!reader.IsDBNull(index))
+ {
+ item.Genres = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ }
+ index++;
}
- if (!reader.IsDBNull(41))
+ if (!reader.IsDBNull(index))
{
- item.ParentId = reader.GetGuid(41);
+ item.ParentId = reader.GetGuid(index);
}
+ index++;
- if (!reader.IsDBNull(42))
+ if (!reader.IsDBNull(index))
{
- item.Audio = (ProgramAudio)Enum.Parse(typeof(ProgramAudio), reader.GetString(42), true);
+ item.Audio = (ProgramAudio)Enum.Parse(typeof(ProgramAudio), reader.GetString(index), true);
}
+ index++;
- if (!reader.IsDBNull(43))
+ if (query.HasField(ItemFields.ServiceName))
{
- item.ServiceName = reader.GetString(43);
+ if (!reader.IsDBNull(index))
+ {
+ item.ServiceName = reader.GetString(index);
+ }
+ index++;
}
- if (!reader.IsDBNull(44))
+ if (!reader.IsDBNull(index))
{
- item.IsInMixedFolder = reader.GetBoolean(44);
+ item.IsInMixedFolder = reader.GetBoolean(index);
}
+ index++;
- if (!reader.IsDBNull(45))
+ if (!reader.IsDBNull(index))
{
- item.DateLastSaved = reader.GetDateTime(45).ToUniversalTime();
+ item.DateLastSaved = reader.GetDateTime(index).ToUniversalTime();
}
+ index++;
- if (!reader.IsDBNull(46))
+ if (query.HasField(ItemFields.Settings))
{
- item.LockedFields = reader.GetString(46).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => (MetadataFields)Enum.Parse(typeof(MetadataFields), i, true)).ToList();
+ 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(47))
+ if (query.HasField(ItemFields.Studios))
{
- item.Studios = reader.GetString(47).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ if (!reader.IsDBNull(index))
+ {
+ item.Studios = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ }
+ index++;
}
- if (!reader.IsDBNull(48))
+ if (query.HasField(ItemFields.Tags))
{
- item.Tags = reader.GetString(48).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ if (!reader.IsDBNull(index))
+ {
+ item.Tags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ }
+ index++;
}
- if (!reader.IsDBNull(49))
+ if (!reader.IsDBNull(index))
{
- item.SourceType = (SourceType)Enum.Parse(typeof(SourceType), reader.GetString(49), true);
+ item.SourceType = (SourceType)Enum.Parse(typeof(SourceType), reader.GetString(index), true);
}
+ index++;
var trailer = item as Trailer;
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 (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.OriginalTitle))
{
- item.OriginalTitle = reader.GetString(index);
+ if (!reader.IsDBNull(index))
+ {
+ item.OriginalTitle = reader.GetString(index);
+ }
+ index++;
}
- index++;
var video = item as Video;
if (video != null)
@@ -1378,12 +1620,15 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
index++;
- var folder = item as Folder;
- if (folder != null && !reader.IsDBNull(index))
+ if (query.HasField(ItemFields.DateLastMediaAdded))
{
- folder.DateLastMediaAdded = reader.GetDateTime(index).ToUniversalTime();
+ var folder = item as Folder;
+ if (folder != null && !reader.IsDBNull(index))
+ {
+ folder.DateLastMediaAdded = reader.GetDateTime(index).ToUniversalTime();
+ }
+ index++;
}
- index++;
if (!reader.IsDBNull(index))
{
@@ -1397,11 +1642,14 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
index++;
- if (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.CriticRatingSummary))
{
- item.CriticRatingSummary = reader.GetString(index);
+ if (!reader.IsDBNull(index))
+ {
+ item.CriticRatingSummary = reader.GetString(index);
+ }
+ index++;
}
- index++;
if (!reader.IsDBNull(index))
{
@@ -1480,6 +1728,54 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
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;
}
@@ -1796,10 +2092,47 @@ namespace MediaBrowser.Server.Implementations.Persistence
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)
{
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))
{
list.Add("UserDataDb.UserData.UserId");
@@ -1954,7 +2287,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
while (reader.Read())
{
- var item = GetItem(reader);
+ var item = GetItem(reader, query);
if (item != null)
{
list.Add(item);
@@ -2141,7 +2474,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
{
while (reader.Read())
{
- var item = GetItem(reader);
+ var item = GetItem(reader, query);
if (item != null)
{
list.Add(item);
@@ -2652,7 +2985,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
if (programAttribtues.Count > 0)
{
- whereClauses.Add("("+string.Join(" OR ", programAttribtues.ToArray())+")");
+ whereClauses.Add("(" + string.Join(" OR ", programAttribtues.ToArray()) + ")");
}
}
diff --git a/MediaBrowser.Server.Implementations/app.config b/MediaBrowser.Server.Implementations/app.config
index 14f2f055f..77b8b9218 100644
--- a/MediaBrowser.Server.Implementations/app.config
+++ b/MediaBrowser.Server.Implementations/app.config
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
- <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
- <bindingRedirect oldVersion="0.0.0.0-1.0.94.0" newVersion="1.0.94.0" />
+ <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral"/>
+ <bindingRedirect oldVersion="0.0.0.0-1.0.94.0" newVersion="1.0.94.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
-</configuration> \ No newline at end of file
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/></startup></configuration>