Merge pull request #2804 from MediaBrowser/dev

Dev
pull/1154/head
Luke 7 years ago committed by GitHub
commit aff4fc649b

@ -113,7 +113,7 @@ namespace Emby.Dlna.PlayTo
private int GetInactiveTimerIntervalMs() private int GetInactiveTimerIntervalMs()
{ {
return 30000; return Timeout.Infinite;
} }
public void Start() public void Start()
@ -161,18 +161,15 @@ namespace Emby.Dlna.PlayTo
if (_disposed) if (_disposed)
return; return;
if (!_timerActive) lock (_timerLock)
{ {
lock (_timerLock) if (!_timerActive)
{ {
if (!_timerActive) _logger.Debug("RestartTimer");
{ _timer.Change(10, GetPlaybackTimerIntervalMs());
_logger.Debug("RestartTimer");
_timer.Change(10, GetPlaybackTimerIntervalMs());
}
_timerActive = true;
} }
_timerActive = true;
} }
} }
@ -184,23 +181,20 @@ namespace Emby.Dlna.PlayTo
if (_disposed) if (_disposed)
return; return;
if (_timerActive) lock (_timerLock)
{ {
lock (_timerLock) if (_timerActive)
{ {
if (_timerActive) _logger.Debug("RestartTimerInactive");
{ var interval = GetInactiveTimerIntervalMs();
_logger.Debug("RestartTimerInactive");
var interval = GetInactiveTimerIntervalMs();
if (_timer != null) if (_timer != null)
{ {
_timer.Change(interval, interval); _timer.Change(interval, interval);
}
} }
_timerActive = false;
} }
_timerActive = false;
} }
} }
@ -493,6 +487,10 @@ namespace Emby.Dlna.PlayTo
RestartTimer(); RestartTimer();
} }
} }
else
{
RestartTimerInactive();
}
} }
catch (HttpException ex) catch (HttpException ex)
{ {

@ -345,7 +345,10 @@ namespace Emby.Server.Implementations.Data
// items by name // items by name
"create index if not exists idx_ItemValues6 on ItemValues(ItemId,Type,CleanValue)", "create index if not exists idx_ItemValues6 on ItemValues(ItemId,Type,CleanValue)",
"create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)" "create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)",
// Used to update inherited tags
"create index if not exists idx_ItemValues8 on ItemValues(Type, ItemId, Value)",
}; };
connection.RunQueries(postQueries); connection.RunQueries(postQueries);
@ -1293,16 +1296,13 @@ namespace Emby.Server.Implementations.Data
return false; return false;
} }
if (_config.Configuration.SkipDeserializationForAudio) if (type == typeof(Audio))
{ {
if (type == typeof(Audio)) return false;
{ }
return false; if (type == typeof(MusicAlbum))
} {
if (type == typeof(MusicAlbum)) return false;
{
return false;
}
} }
return true; return true;
@ -4695,41 +4695,65 @@ namespace Emby.Server.Implementations.Data
private async Task UpdateInheritedTags(CancellationToken cancellationToken) private async Task UpdateInheritedTags(CancellationToken cancellationToken)
{ {
var newValues = new List<Tuple<Guid, string>>(); var newValues = new List<Tuple<Guid, string[]>>();
var commandText = "select Guid,(select group_concat(Tags, '|') from TypedBaseItems where (guid=outer.guid) OR (guid in (Select AncestorId from AncestorIds where ItemId=Outer.guid))) as NewInheritedTags from typedbaseitems as Outer"; var commandText = @"select guid,
(select group_concat(Value, '|') from ItemValues where (ItemValues.ItemId = Outer.Guid OR ItemValues.ItemId in ((Select AncestorId from AncestorIds where AncestorIds.ItemId=Outer.guid))) and ItemValues.Type = 4) NewInheritedTags,
(select group_concat(Value, '|') from ItemValues where ItemValues.ItemId = Outer.Guid and ItemValues.Type = 6) CurrentInheritedTags
from typedbaseitems as Outer
where (NewInheritedTags <> CurrentInheritedTags or (NewInheritedTags is null) <> (CurrentInheritedTags is null))
limit 100";
using (WriteLock.Write()) using (WriteLock.Write())
{ {
using (var connection = CreateConnection()) using (var connection = CreateConnection())
{ {
foreach (var row in connection.Query(commandText)) connection.RunInTransaction(db =>
{ {
var id = row.GetGuid(0); foreach (var row in connection.Query(commandText))
string value = row.IsDBNull(2) ? null : row.GetString(2); {
var id = row.GetGuid(0);
string value = row.IsDBNull(1) ? null : row.GetString(1);
newValues.Add(new Tuple<Guid, string>(id, value)); var valuesArray = string.IsNullOrWhiteSpace(value) ? new string[] { } : value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
}
Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count); newValues.Add(new Tuple<Guid, string[]>(id, valuesArray));
if (newValues.Count == 0) }
{
return;
}
// write lock here Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count);
using (var statement = PrepareStatement(connection, "Update TypedBaseItems set InheritedTags=@InheritedTags where Guid=@Guid")) if (newValues.Count == 0)
{
foreach (var item in newValues)
{ {
var paramList = new List<object>(); return;
}
using (var insertStatement = PrepareStatement(connection, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, 6, @Value, @CleanValue)"))
{
using (var deleteStatement = PrepareStatement(connection, "delete from ItemValues where ItemId=@ItemId and Type=6"))
{
foreach (var item in newValues)
{
var guidBlob = item.Item1.ToGuidBlob();
paramList.Add(item.Item1); deleteStatement.Reset();
paramList.Add(item.Item2); deleteStatement.TryBind("@ItemId", guidBlob);
deleteStatement.MoveNext();
statement.Execute(paramList.ToArray()); foreach (var itemValue in item.Item2)
{
insertStatement.Reset();
insertStatement.TryBind("@ItemId", guidBlob);
insertStatement.TryBind("@Value", itemValue);
insertStatement.TryBind("@CleanValue", GetCleanValue(itemValue));
insertStatement.MoveNext();
}
}
}
} }
}
}, TransactionMode);
} }
} }
} }
@ -5458,8 +5482,10 @@ namespace Emby.Server.Implementations.Data
CheckDisposed(); CheckDisposed();
var guidBlob = itemId.ToGuidBlob();
// First delete // First delete
db.Execute("delete from ItemValues where ItemId=@Id", itemId.ToGuidBlob()); db.Execute("delete from ItemValues where ItemId=@Id", guidBlob);
using (var statement = PrepareStatement(db, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, @Type, @Value, @CleanValue)")) using (var statement = PrepareStatement(db, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, @Type, @Value, @CleanValue)"))
{ {
@ -5475,7 +5501,7 @@ namespace Emby.Server.Implementations.Data
statement.Reset(); statement.Reset();
statement.TryBind("@ItemId", itemId.ToGuidBlob()); statement.TryBind("@ItemId", guidBlob);
statement.TryBind("@Type", pair.Item1); statement.TryBind("@Type", pair.Item1);
statement.TryBind("@Value", itemValue); statement.TryBind("@Value", itemValue);

@ -639,7 +639,6 @@ namespace Emby.Server.Implementations.Dto
private void SetGameProperties(BaseItemDto dto, Game item) private void SetGameProperties(BaseItemDto dto, Game item)
{ {
dto.Players = item.PlayersSupported;
dto.GameSystem = item.GameSystem; dto.GameSystem = item.GameSystem;
dto.MultiPartGameFiles = item.MultiPartGameFiles; dto.MultiPartGameFiles = item.MultiPartGameFiles;
} }
@ -1120,8 +1119,7 @@ namespace Emby.Server.Implementations.Dto
// Include artists that are not in the database yet, e.g., just added via metadata editor // Include artists that are not in the database yet, e.g., just added via metadata editor
//var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList(); //var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
dto.ArtistItems = new List<NameIdPair>(); dto.ArtistItems = hasArtist.Artists
dto.ArtistItems.AddRange(hasArtist.Artists
//.Except(foundArtists, new DistinctNameComparer()) //.Except(foundArtists, new DistinctNameComparer())
.Select(i => .Select(i =>
{ {
@ -1146,7 +1144,7 @@ namespace Emby.Server.Implementations.Dto
return null; return null;
}).Where(i => i != null)); }).Where(i => i != null).ToArray();
} }
var hasAlbumArtist = item as IHasAlbumArtist; var hasAlbumArtist = item as IHasAlbumArtist;
@ -1310,15 +1308,6 @@ namespace Emby.Server.Implementations.Dto
Series episodeSeries = null; Series episodeSeries = null;
if (fields.Contains(ItemFields.SeriesGenres))
{
episodeSeries = episodeSeries ?? episode.Series;
if (episodeSeries != null)
{
dto.SeriesGenres = episodeSeries.Genres.ToList();
}
}
//if (fields.Contains(ItemFields.SeriesPrimaryImage)) //if (fields.Contains(ItemFields.SeriesPrimaryImage))
{ {
episodeSeries = episodeSeries ?? episode.Series; episodeSeries = episodeSeries ?? episode.Series;
@ -1334,27 +1323,6 @@ namespace Emby.Server.Implementations.Dto
if (episodeSeries != null) if (episodeSeries != null)
{ {
dto.SeriesStudio = episodeSeries.Studios.FirstOrDefault(); dto.SeriesStudio = episodeSeries.Studios.FirstOrDefault();
if (!string.IsNullOrWhiteSpace(dto.SeriesStudio))
{
try
{
var studio = _libraryManager.GetStudio(dto.SeriesStudio);
if (studio != null)
{
dto.SeriesStudioInfo = new StudioDto
{
Name = dto.SeriesStudio,
Id = studio.Id.ToString("N"),
PrimaryImageTag = GetImageCacheTag(studio, ImageType.Primary)
};
}
}
catch (Exception ex)
{
}
}
} }
} }
} }
@ -1363,8 +1331,7 @@ namespace Emby.Server.Implementations.Dto
var series = item as Series; var series = item as Series;
if (series != null) if (series != null)
{ {
dto.AirDays = series.AirDays; dto.AirDays = new DayOfWeek[] {};
dto.AirTime = series.AirTime;
dto.Status = series.Status.HasValue ? series.Status.Value.ToString() : null; dto.Status = series.Status.HasValue ? series.Status.Value.ToString() : null;
} }
@ -1498,7 +1465,9 @@ namespace Emby.Server.Implementations.Dto
BaseItem parent = null; BaseItem parent = null;
var isFirst = true; var isFirst = true;
while (((!dto.HasLogo && logoLimit > 0) || (!dto.HasArtImage && artLimit > 0) || (!dto.HasThumb && thumbLimit > 0) || parent is Series) && var imageTags = dto.ImageTags;
while (((!(imageTags != null && imageTags.ContainsKey(ImageType.Logo)) && logoLimit > 0) || (!(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && artLimit > 0) || (!(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && thumbLimit > 0) || parent is Series) &&
(parent = parent ?? (isFirst ? GetImageDisplayParent(item, item) ?? owner : parent)) != null) (parent = parent ?? (isFirst ? GetImageDisplayParent(item, item) ?? owner : parent)) != null)
{ {
if (parent == null) if (parent == null)
@ -1508,7 +1477,7 @@ namespace Emby.Server.Implementations.Dto
var allImages = parent.ImageInfos; var allImages = parent.ImageInfos;
if (logoLimit > 0 && !dto.HasLogo && dto.ParentLogoItemId == null) if (logoLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Logo)) && dto.ParentLogoItemId == null)
{ {
var image = allImages.FirstOrDefault(i => i.Type == ImageType.Logo); var image = allImages.FirstOrDefault(i => i.Type == ImageType.Logo);
@ -1518,7 +1487,7 @@ namespace Emby.Server.Implementations.Dto
dto.ParentLogoImageTag = GetImageCacheTag(parent, image); dto.ParentLogoImageTag = GetImageCacheTag(parent, image);
} }
} }
if (artLimit > 0 && !dto.HasArtImage && dto.ParentArtItemId == null) if (artLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && dto.ParentArtItemId == null)
{ {
var image = allImages.FirstOrDefault(i => i.Type == ImageType.Art); var image = allImages.FirstOrDefault(i => i.Type == ImageType.Art);
@ -1528,7 +1497,7 @@ namespace Emby.Server.Implementations.Dto
dto.ParentArtImageTag = GetImageCacheTag(parent, image); dto.ParentArtImageTag = GetImageCacheTag(parent, image);
} }
} }
if (thumbLimit > 0 && !dto.HasThumb && (dto.ParentThumbItemId == null || parent is Series) && !(parent is ICollectionFolder) && !(parent is UserView)) if (thumbLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && (dto.ParentThumbItemId == null || parent is Series) && !(parent is ICollectionFolder) && !(parent is UserView))
{ {
var image = allImages.FirstOrDefault(i => i.Type == ImageType.Thumb); var image = allImages.FirstOrDefault(i => i.Type == ImageType.Thumb);
@ -1538,7 +1507,7 @@ namespace Emby.Server.Implementations.Dto
dto.ParentThumbImageTag = GetImageCacheTag(parent, image); dto.ParentThumbImageTag = GetImageCacheTag(parent, image);
} }
} }
if (backdropLimit > 0 && !dto.HasBackdrop) if (backdropLimit > 0 && !((dto.BackdropImageTags != null && dto.BackdropImageTags.Length > 0) || (dto.ParentBackdropImageTags != null && dto.ParentBackdropImageTags.Length > 0)))
{ {
var images = allImages.Where(i => i.Type == ImageType.Backdrop).Take(backdropLimit).ToList(); var images = allImages.Where(i => i.Type == ImageType.Backdrop).Take(backdropLimit).ToList();

@ -249,7 +249,6 @@
<Compile Include="Social\SharingManager.cs" /> <Compile Include="Social\SharingManager.cs" />
<Compile Include="Social\SharingRepository.cs" /> <Compile Include="Social\SharingRepository.cs" />
<Compile Include="Sorting\AiredEpisodeOrderComparer.cs" /> <Compile Include="Sorting\AiredEpisodeOrderComparer.cs" />
<Compile Include="Sorting\AirTimeComparer.cs" />
<Compile Include="Sorting\AlbumArtistComparer.cs" /> <Compile Include="Sorting\AlbumArtistComparer.cs" />
<Compile Include="Sorting\AlbumComparer.cs" /> <Compile Include="Sorting\AlbumComparer.cs" />
<Compile Include="Sorting\AlphanumComparator.cs" /> <Compile Include="Sorting\AlphanumComparator.cs" />

@ -1172,6 +1172,8 @@ namespace Emby.Server.Implementations.Library
progress.Report(percent * 100); progress.Report(percent * 100);
} }
await ItemRepository.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
progress.Report(100); progress.Report(100);
} }

@ -1686,7 +1686,6 @@ namespace Emby.Server.Implementations.Session
dtoOptions.Fields.Remove(ItemFields.RecursiveItemCount); dtoOptions.Fields.Remove(ItemFields.RecursiveItemCount);
dtoOptions.Fields.Remove(ItemFields.RemoteTrailers); dtoOptions.Fields.Remove(ItemFields.RemoteTrailers);
dtoOptions.Fields.Remove(ItemFields.SeasonUserData); dtoOptions.Fields.Remove(ItemFields.SeasonUserData);
dtoOptions.Fields.Remove(ItemFields.SeriesGenres);
dtoOptions.Fields.Remove(ItemFields.Settings); dtoOptions.Fields.Remove(ItemFields.Settings);
dtoOptions.Fields.Remove(ItemFields.SortName); dtoOptions.Fields.Remove(ItemFields.SortName);
dtoOptions.Fields.Remove(ItemFields.Tags); dtoOptions.Fields.Remove(ItemFields.Tags);

@ -1,71 +0,0 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Querying;
using System;
namespace Emby.Server.Implementations.Sorting
{
public class AirTimeComparer : IBaseItemComparer
{
/// <summary>
/// Compares the specified x.
/// </summary>
/// <param name="x">The x.</param>
/// <param name="y">The y.</param>
/// <returns>System.Int32.</returns>
public int Compare(BaseItem x, BaseItem y)
{
return DateTime.Compare(GetValue(x), GetValue(y));
}
/// <summary>
/// Gets the value.
/// </summary>
/// <param name="x">The x.</param>
/// <returns>System.String.</returns>
private DateTime GetValue(BaseItem x)
{
var series = x as Series;
if (series == null)
{
var season = x as Season;
if (season != null)
{
series = season.Series;
}
else
{
var episode = x as Episode;
if (episode != null)
{
series = episode.Series;
}
}
}
if (series != null)
{
DateTime result;
if (DateTime.TryParse(series.AirTime, out result))
{
return result;
}
}
return DateTime.MinValue;
}
/// <summary>
/// Gets the name.
/// </summary>
/// <value>The name.</value>
public string Name
{
get { return ItemSortBy.AirTime; }
}
}
}

@ -332,13 +332,6 @@ namespace MediaBrowser.Api
video.Video3DFormat = request.Video3DFormat; video.Video3DFormat = request.Video3DFormat;
} }
var game = item as Game;
if (game != null)
{
game.PlayersSupported = request.Players;
}
if (request.AlbumArtists != null) if (request.AlbumArtists != null)
{ {
var hasAlbumArtists = item as IHasAlbumArtist; var hasAlbumArtists = item as IHasAlbumArtist;
@ -379,8 +372,6 @@ namespace MediaBrowser.Api
if (series != null) if (series != null)
{ {
series.Status = GetSeriesStatus(request); series.Status = GetSeriesStatus(request);
series.AirDays = request.AirDays;
series.AirTime = request.AirTime;
} }
} }

@ -95,7 +95,6 @@ namespace MediaBrowser.Api
config.EnableStandaloneMusicKeys = true; config.EnableStandaloneMusicKeys = true;
config.EnableCaseSensitiveItemIds = true; config.EnableCaseSensitiveItemIds = true;
config.SkipDeserializationForBasicTypes = true; config.SkipDeserializationForBasicTypes = true;
config.SkipDeserializationForAudio = true;
config.EnableLocalizedGuids = true; config.EnableLocalizedGuids = true;
config.EnableSimpleArtistDetection = true; config.EnableSimpleArtistDetection = true;
config.EnableNormalizedItemByNameIds = true; config.EnableNormalizedItemByNameIds = true;

@ -23,18 +23,6 @@ namespace MediaBrowser.Controller.Entities
PhysicalLocationsList = new List<string>(); PhysicalLocationsList = new List<string>();
} }
/// <summary>
/// We don't support manual shortcuts
/// </summary>
[IgnoreDataMember]
protected override bool SupportsShortcutChildren
{
get
{
return false;
}
}
[IgnoreDataMember] [IgnoreDataMember]
public override bool IsPhysicalRoot public override bool IsPhysicalRoot
{ {

@ -31,15 +31,6 @@ namespace MediaBrowser.Controller.Entities
PhysicalFolderIds = new List<Guid>(); PhysicalFolderIds = new List<Guid>();
} }
[IgnoreDataMember]
protected override bool SupportsShortcutChildren
{
get
{
return true;
}
}
[IgnoreDataMember] [IgnoreDataMember]
public override bool SupportsPlayedStatus public override bool SupportsPlayedStatus
{ {

@ -22,8 +22,6 @@ namespace MediaBrowser.Controller.Entities.TV
{ {
public Series() public Series()
{ {
AirDays = new List<DayOfWeek>();
RemoteTrailers = EmptyMediaUrlArray; RemoteTrailers = EmptyMediaUrlArray;
LocalTrailerIds = EmptyGuidArray; LocalTrailerIds = EmptyGuidArray;
RemoteTrailerIds = EmptyGuidArray; RemoteTrailerIds = EmptyGuidArray;
@ -77,16 +75,6 @@ namespace MediaBrowser.Controller.Entities.TV
/// </summary> /// </summary>
/// <value>The status.</value> /// <value>The status.</value>
public SeriesStatus? Status { get; set; } public SeriesStatus? Status { get; set; }
/// <summary>
/// Gets or sets the air days.
/// </summary>
/// <value>The air days.</value>
public List<DayOfWeek> AirDays { get; set; }
/// <summary>
/// Gets or sets the air time.
/// </summary>
/// <value>The air time.</value>
public string AirTime { get; set; }
/// <summary> /// <summary>
/// Gets or sets the date last episode added. /// Gets or sets the date last episode added.

@ -1674,15 +1674,6 @@ namespace MediaBrowser.Controller.Entities
} }
} }
if (query.AirDays.Length > 0)
{
var ok = new[] { item }.OfType<Series>().Any(p => p.AirDays != null && query.AirDays.Any(d => p.AirDays.Contains(d)));
if (!ok)
{
return false;
}
}
if (query.SeriesStatuses.Length > 0) if (query.SeriesStatuses.Length > 0)
{ {
var ok = new[] { item }.OfType<Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value)); var ok = new[] { item }.OfType<Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value));

@ -162,7 +162,6 @@ namespace MediaBrowser.Model.Configuration
public bool EnableAutomaticRestart { get; set; } public bool EnableAutomaticRestart { get; set; }
public bool SkipDeserializationForBasicTypes { get; set; } public bool SkipDeserializationForBasicTypes { get; set; }
public bool SkipDeserializationForAudio { get; set; }
public string ServerName { get; set; } public string ServerName { get; set; }
public string WanDdns { get; set; } public string WanDdns { get; set; }
@ -349,7 +348,9 @@ namespace MediaBrowser.Model.Configuration
Limit = 1, Limit = 1,
Type = ImageType.Logo Type = ImageType.Logo
} }
} },
DisabledImageFetchers = new [] {"FanArt"}
}, },
new MetadataOptions(1, 1280) new MetadataOptions(1, 1280)
@ -539,7 +540,8 @@ namespace MediaBrowser.Model.Configuration
Type = ImageType.Thumb Type = ImageType.Thumb
} }
}, },
DisabledMetadataFetchers = new []{ "TheMovieDb" } DisabledMetadataFetchers = new []{ "TheMovieDb" },
DisabledImageFetchers = new [] { "FanArt" }
}, },
new MetadataOptions(0, 1280) new MetadataOptions(0, 1280)

@ -209,12 +209,6 @@ namespace MediaBrowser.Model.Dto
/// <value>The genres.</value> /// <value>The genres.</value>
public List<string> Genres { get; set; } public List<string> Genres { get; set; }
/// <summary>
/// Gets or sets the series genres.
/// </summary>
/// <value>The series genres.</value>
public List<string> SeriesGenres { get; set; }
/// <summary> /// <summary>
/// Gets or sets the community rating. /// Gets or sets the community rating.
/// </summary> /// </summary>
@ -257,12 +251,6 @@ namespace MediaBrowser.Model.Dto
/// <value>The production year.</value> /// <value>The production year.</value>
public int? ProductionYear { get; set; } public int? ProductionYear { get; set; }
/// <summary>
/// Gets or sets the players supported by a game.
/// </summary>
/// <value>The players.</value>
public int? Players { get; set; }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether this instance is place holder. /// Gets or sets a value indicating whether this instance is place holder.
/// </summary> /// </summary>
@ -432,7 +420,7 @@ namespace MediaBrowser.Model.Dto
/// Gets or sets the air days. /// Gets or sets the air days.
/// </summary> /// </summary>
/// <value>The air days.</value> /// <value>The air days.</value>
public List<DayOfWeek> AirDays { get; set; } public DayOfWeek[] AirDays { get; set; }
/// <summary> /// <summary>
/// Gets or sets the tags. /// Gets or sets the tags.
@ -456,7 +444,7 @@ namespace MediaBrowser.Model.Dto
/// Gets or sets the artist items. /// Gets or sets the artist items.
/// </summary> /// </summary>
/// <value>The artist items.</value> /// <value>The artist items.</value>
public List<NameIdPair> ArtistItems { get; set; } public NameIdPair[] ArtistItems { get; set; }
/// <summary> /// <summary>
/// Gets or sets the album. /// Gets or sets the album.
@ -598,8 +586,6 @@ namespace MediaBrowser.Model.Dto
/// <value>The series studio.</value> /// <value>The series studio.</value>
public string SeriesStudio { get; set; } public string SeriesStudio { get; set; }
public StudioDto SeriesStudioInfo { get; set; }
/// <summary> /// <summary>
/// Gets or sets the parent thumb item id. /// Gets or sets the parent thumb item id.
/// </summary> /// </summary>
@ -741,46 +727,6 @@ namespace MediaBrowser.Model.Dto
/// <value>The series timer identifier.</value> /// <value>The series timer identifier.</value>
public string SeriesTimerId { get; set; } public string SeriesTimerId { get; set; }
/// <summary>
/// Gets a value indicating whether this instance has art.
/// </summary>
/// <value><c>true</c> if this instance has art; otherwise, <c>false</c>.</value>
[IgnoreDataMember]
public bool HasArtImage
{
get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Art); }
}
/// <summary>
/// Gets a value indicating whether this instance has logo.
/// </summary>
/// <value><c>true</c> if this instance has logo; otherwise, <c>false</c>.</value>
[IgnoreDataMember]
public bool HasLogo
{
get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Logo); }
}
/// <summary>
/// Gets a value indicating whether this instance has thumb.
/// </summary>
/// <value><c>true</c> if this instance has thumb; otherwise, <c>false</c>.</value>
[IgnoreDataMember]
public bool HasThumb
{
get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Thumb); }
}
/// <summary>
/// Gets a value indicating whether this instance has thumb.
/// </summary>
/// <value><c>true</c> if this instance has thumb; otherwise, <c>false</c>.</value>
[IgnoreDataMember]
public bool HasBackdrop
{
get { return (BackdropImageTags != null && BackdropImageTags.Length > 0) || (ParentBackdropImageTags != null && ParentBackdropImageTags.Length > 0); }
}
/// <summary> /// <summary>
/// Gets or sets the program identifier. /// Gets or sets the program identifier.
/// </summary> /// </summary>

@ -1,29 +0,0 @@
using System.Diagnostics;
namespace MediaBrowser.Model.Dto
{
/// <summary>
/// Class StudioDto
/// </summary>
[DebuggerDisplay("Name = {Name}")]
public class StudioDto
{
/// <summary>
/// Gets or sets the name.
/// </summary>
/// <value>The name.</value>
public string Name { get; set; }
/// <summary>
/// Gets or sets the identifier.
/// </summary>
/// <value>The identifier.</value>
public string Id { get; set; }
/// <summary>
/// Gets or sets the primary image tag.
/// </summary>
/// <value>The primary image tag.</value>
public string PrimaryImageTag { get; set; }
}
}

@ -284,7 +284,6 @@
<Compile Include="Providers\ExternalUrl.cs" /> <Compile Include="Providers\ExternalUrl.cs" />
<Compile Include="Providers\ImageProviderInfo.cs" /> <Compile Include="Providers\ImageProviderInfo.cs" />
<Compile Include="Providers\RemoteImageInfo.cs" /> <Compile Include="Providers\RemoteImageInfo.cs" />
<Compile Include="Dto\StudioDto.cs" />
<Compile Include="Entities\CollectionType.cs" /> <Compile Include="Entities\CollectionType.cs" />
<Compile Include="Entities\ItemReview.cs" /> <Compile Include="Entities\ItemReview.cs" />
<Compile Include="Entities\MediaUrl.cs" /> <Compile Include="Entities\MediaUrl.cs" />

@ -153,11 +153,6 @@
/// </summary> /// </summary>
ScreenshotImageTags, ScreenshotImageTags,
/// <summary>
/// The series genres
/// </summary>
SeriesGenres,
SeriesPrimaryImage, SeriesPrimaryImage,
/// <summary> /// <summary>

@ -64,20 +64,10 @@ namespace MediaBrowser.Providers.TV
var sourceItem = source.Item; var sourceItem = source.Item;
var targetItem = target.Item; var targetItem = target.Item;
if (replaceData || string.IsNullOrEmpty(targetItem.AirTime))
{
targetItem.AirTime = sourceItem.AirTime;
}
if (replaceData || !targetItem.Status.HasValue) if (replaceData || !targetItem.Status.HasValue)
{ {
targetItem.Status = sourceItem.Status; targetItem.Status = sourceItem.Status;
} }
if (replaceData || targetItem.AirDays == null || targetItem.AirDays.Count == 0)
{
targetItem.AirDays = sourceItem.AirDays;
}
} }
} }
} }

@ -1090,28 +1090,6 @@ namespace MediaBrowser.Providers.TV
break; break;
} }
case "Airs_DayOfWeek":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
item.AirDays = TVUtils.GetAirDays(val);
}
break;
}
case "Airs_Time":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
item.AirTime = val;
}
break;
}
case "ContentRating": case "ContentRating":
{ {
var val = reader.ReadElementContentAsString(); var val = reader.ReadElementContentAsString();

@ -96,27 +96,4 @@ namespace MediaBrowser.Providers.TV
return item is Episode; return item is Episode;
} }
} }
public class TvComSeriesExternalId : IExternalId
{
public string Name
{
get { return "TV.com"; }
}
public string Key
{
get { return MetadataProviders.Tvcom.ToString(); }
}
public string UrlFormatString
{
get { return null; }
}
public bool Supports(IHasProviderIds item)
{
return item is Series;
}
}
} }

@ -61,22 +61,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
break; break;
} }
case "airs_dayofweek":
{
item.AirDays = TVUtils.GetAirDays(reader.ReadElementContentAsString());
break;
}
case "airs_time":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
item.AirTime = val;
}
break;
}
case "status": case "status":
{ {

@ -611,13 +611,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
writtenProviderIds.Add(MetadataProviders.Tmdb.ToString()); writtenProviderIds.Add(MetadataProviders.Tmdb.ToString());
} }
var tvcom = item.GetProviderId(MetadataProviders.Tvcom);
if (!string.IsNullOrEmpty(tvcom))
{
writer.WriteElementString("tvcomid", tvcom);
writtenProviderIds.Add(MetadataProviders.Tvcom.ToString());
}
if (!string.IsNullOrEmpty(item.PreferredMetadataLanguage)) if (!string.IsNullOrEmpty(item.PreferredMetadataLanguage))
{ {
writer.WriteElementString("language", item.PreferredMetadataLanguage); writer.WriteElementString("language", item.PreferredMetadataLanguage);

@ -69,20 +69,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
{ {
writer.WriteElementString("status", series.Status.Value.ToString()); writer.WriteElementString("status", series.Status.Value.ToString());
} }
if (!string.IsNullOrEmpty(series.AirTime))
{
writer.WriteElementString("airs_time", series.AirTime);
}
if (series.AirDays.Count == 7)
{
writer.WriteElementString("airs_dayofweek", "Daily");
}
else if (series.AirDays.Count > 0)
{
writer.WriteElementString("airs_dayofweek", series.AirDays[0].ToString());
}
} }
protected override List<string> GetTagsUsed(IHasMetadata item) protected override List<string> GetTagsUsed(IHasMetadata item)
@ -94,9 +80,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
"episodeguide", "episodeguide",
"season", "season",
"episode", "episode",
"status", "status"
"airs_time",
"airs_dayofweek"
}); });
return list; return list;
} }

@ -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.717</version> <version>3.0.720</version>
<title>Emby.Common</title> <title>Emby.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.717</version> <version>3.0.720</version>
<title>Emby.Server.Core</title> <title>Emby.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.717" /> <dependency id="MediaBrowser.Common" version="3.0.720" />
</dependencies> </dependencies>
</metadata> </metadata>
<files> <files>

@ -1,3 +1,3 @@
using System.Reflection; using System.Reflection;
[assembly: AssemblyVersion("3.2.26.20")] [assembly: AssemblyVersion("3.2.26.21")]

Loading…
Cancel
Save