From 900714c866a764e76ca4d6fb0d11833addc953b4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 10 Aug 2017 16:06:36 -0400 Subject: consolidate fields --- MediaBrowser.Model/Configuration/ServerConfiguration.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index a570f7b10..5bbd7c4da 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -349,7 +349,9 @@ namespace MediaBrowser.Model.Configuration Limit = 1, Type = ImageType.Logo } - } + }, + + DisabledImageFetchers = new [] {"FanArt"} }, new MetadataOptions(1, 1280) @@ -539,7 +541,8 @@ namespace MediaBrowser.Model.Configuration Type = ImageType.Thumb } }, - DisabledMetadataFetchers = new []{ "TheMovieDb" } + DisabledMetadataFetchers = new []{ "TheMovieDb" }, + DisabledImageFetchers = new [] { "FanArt" } }, new MetadataOptions(0, 1280) -- cgit v1.2.3 From a7db7cd40cf303b4f95c25ac34bd7f947b084344 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 11 Aug 2017 02:29:49 -0400 Subject: reduce traffic from session player --- .../Data/SqliteItemRepository.cs | 92 ++++++++++++++-------- Emby.Server.Implementations/Dto/DtoService.cs | 8 +- .../Emby.Server.Implementations.csproj | 1 - .../Library/LibraryManager.cs | 2 + .../Sorting/AirTimeComparer.cs | 71 ----------------- MediaBrowser.Api/ItemUpdateService.cs | 2 - MediaBrowser.Api/StartupWizardService.cs | 1 - .../Entities/AggregateFolder.cs | 12 --- .../Entities/CollectionFolder.cs | 9 --- MediaBrowser.Controller/Entities/TV/Series.cs | 12 --- .../Entities/UserViewBuilder.cs | 9 --- .../Configuration/ServerConfiguration.cs | 1 - MediaBrowser.Model/Dto/BaseItemDto.cs | 2 +- MediaBrowser.Providers/TV/SeriesMetadataService.cs | 10 --- .../TV/TheTVDB/TvdbSeriesProvider.cs | 22 ------ MediaBrowser.Providers/TV/TvExternalIds.cs | 23 ------ .../Parsers/SeriesNfoParser.cs | 16 ---- MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs | 7 -- MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs | 18 +---- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- SharedVersion.cs | 2 +- 22 files changed, 70 insertions(+), 256 deletions(-) delete mode 100644 Emby.Server.Implementations/Sorting/AirTimeComparer.cs (limited to 'MediaBrowser.Model/Configuration') diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index b7e2687ec..e8a9b2eaa 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -345,7 +345,10 @@ namespace Emby.Server.Implementations.Data // items by name "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); @@ -1293,16 +1296,13 @@ namespace Emby.Server.Implementations.Data return false; } - if (_config.Configuration.SkipDeserializationForAudio) + if (type == typeof(Audio)) { - if (type == typeof(Audio)) - { - return false; - } - if (type == typeof(MusicAlbum)) - { - return false; - } + return false; + } + if (type == typeof(MusicAlbum)) + { + return false; } return true; @@ -4695,41 +4695,65 @@ namespace Emby.Server.Implementations.Data private async Task UpdateInheritedTags(CancellationToken cancellationToken) { - var newValues = new List>(); + var newValues = new List>(); - 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 (var connection = CreateConnection()) { - foreach (var row in connection.Query(commandText)) + connection.RunInTransaction(db => { - var id = row.GetGuid(0); - string value = row.IsDBNull(2) ? null : row.GetString(2); + foreach (var row in connection.Query(commandText)) + { + var id = row.GetGuid(0); + string value = row.IsDBNull(1) ? null : row.GetString(1); - newValues.Add(new Tuple(id, value)); - } + var valuesArray = string.IsNullOrWhiteSpace(value) ? new string[] { } : value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); - Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count); - if (newValues.Count == 0) - { - return; - } + newValues.Add(new Tuple(id, valuesArray)); + } - // write lock here - using (var statement = PrepareStatement(connection, "Update TypedBaseItems set InheritedTags=@InheritedTags where Guid=@Guid")) - { - foreach (var item in newValues) + Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count); + if (newValues.Count == 0) { - var paramList = new List(); + 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); - paramList.Add(item.Item2); + deleteStatement.Reset(); + 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(); + var guidBlob = itemId.ToGuidBlob(); + // 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)")) { @@ -5475,7 +5501,7 @@ namespace Emby.Server.Implementations.Data statement.Reset(); - statement.TryBind("@ItemId", itemId.ToGuidBlob()); + statement.TryBind("@ItemId", guidBlob); statement.TryBind("@Type", pair.Item1); statement.TryBind("@Value", itemValue); diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs index 1fab23b32..2d717dc2c 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -1119,8 +1119,7 @@ namespace Emby.Server.Implementations.Dto // 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(); - dto.ArtistItems = new List(); - dto.ArtistItems.AddRange(hasArtist.Artists + dto.ArtistItems = hasArtist.Artists //.Except(foundArtists, new DistinctNameComparer()) .Select(i => { @@ -1145,7 +1144,7 @@ namespace Emby.Server.Implementations.Dto return null; - }).Where(i => i != null)); + }).Where(i => i != null).ToArray(); } var hasAlbumArtist = item as IHasAlbumArtist; @@ -1332,8 +1331,7 @@ namespace Emby.Server.Implementations.Dto var series = item as Series; if (series != null) { - dto.AirDays = series.AirDays.ToArray(); - dto.AirTime = series.AirTime; + dto.AirDays = new DayOfWeek[] {}; dto.Status = series.Status.HasValue ? series.Status.Value.ToString() : null; } diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj index d4976196c..38f51919a 100644 --- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -249,7 +249,6 @@ - diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 271dac153..b4ba58cfd 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -1172,6 +1172,8 @@ namespace Emby.Server.Implementations.Library progress.Report(percent * 100); } + await ItemRepository.UpdateInheritedValues(cancellationToken).ConfigureAwait(false); + progress.Report(100); } diff --git a/Emby.Server.Implementations/Sorting/AirTimeComparer.cs b/Emby.Server.Implementations/Sorting/AirTimeComparer.cs deleted file mode 100644 index bc05e9af3..000000000 --- a/Emby.Server.Implementations/Sorting/AirTimeComparer.cs +++ /dev/null @@ -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 - { - /// - /// Compares the specified x. - /// - /// The x. - /// The y. - /// System.Int32. - public int Compare(BaseItem x, BaseItem y) - { - return DateTime.Compare(GetValue(x), GetValue(y)); - } - - /// - /// Gets the value. - /// - /// The x. - /// System.String. - 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; - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get { return ItemSortBy.AirTime; } - } - } -} diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 4b4520e8d..13b5b64d9 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -372,8 +372,6 @@ namespace MediaBrowser.Api if (series != null) { series.Status = GetSeriesStatus(request); - series.AirDays = request.AirDays; - series.AirTime = request.AirTime; } } diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index cd56b69bd..7d612a796 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -95,7 +95,6 @@ namespace MediaBrowser.Api config.EnableStandaloneMusicKeys = true; config.EnableCaseSensitiveItemIds = true; config.SkipDeserializationForBasicTypes = true; - config.SkipDeserializationForAudio = true; config.EnableLocalizedGuids = true; config.EnableSimpleArtistDetection = true; config.EnableNormalizedItemByNameIds = true; diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs index 5520737b4..f88522f78 100644 --- a/MediaBrowser.Controller/Entities/AggregateFolder.cs +++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs @@ -23,18 +23,6 @@ namespace MediaBrowser.Controller.Entities PhysicalLocationsList = new List(); } - /// - /// We don't support manual shortcuts - /// - [IgnoreDataMember] - protected override bool SupportsShortcutChildren - { - get - { - return false; - } - } - [IgnoreDataMember] public override bool IsPhysicalRoot { diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index f314d82c1..d02e469d4 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -31,15 +31,6 @@ namespace MediaBrowser.Controller.Entities PhysicalFolderIds = new List(); } - [IgnoreDataMember] - protected override bool SupportsShortcutChildren - { - get - { - return true; - } - } - [IgnoreDataMember] public override bool SupportsPlayedStatus { diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index f9133ccb0..7d1c7314d 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -22,8 +22,6 @@ namespace MediaBrowser.Controller.Entities.TV { public Series() { - AirDays = new List(); - RemoteTrailers = EmptyMediaUrlArray; LocalTrailerIds = EmptyGuidArray; RemoteTrailerIds = EmptyGuidArray; @@ -77,16 +75,6 @@ namespace MediaBrowser.Controller.Entities.TV /// /// The status. public SeriesStatus? Status { get; set; } - /// - /// Gets or sets the air days. - /// - /// The air days. - public List AirDays { get; set; } - /// - /// Gets or sets the air time. - /// - /// The air time. - public string AirTime { get; set; } /// /// Gets or sets the date last episode added. diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index b7cf50ee3..f0d4d544e 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -1674,15 +1674,6 @@ namespace MediaBrowser.Controller.Entities } } - if (query.AirDays.Length > 0) - { - var ok = new[] { item }.OfType().Any(p => p.AirDays != null && query.AirDays.Any(d => p.AirDays.Contains(d))); - if (!ok) - { - return false; - } - } - if (query.SeriesStatuses.Length > 0) { var ok = new[] { item }.OfType().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value)); diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 5bbd7c4da..db66837e4 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -162,7 +162,6 @@ namespace MediaBrowser.Model.Configuration public bool EnableAutomaticRestart { get; set; } public bool SkipDeserializationForBasicTypes { get; set; } - public bool SkipDeserializationForAudio { get; set; } public string ServerName { get; set; } public string WanDdns { get; set; } diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 0fbb0a45e..2df69a58f 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -444,7 +444,7 @@ namespace MediaBrowser.Model.Dto /// Gets or sets the artist items. /// /// The artist items. - public List ArtistItems { get; set; } + public NameIdPair[] ArtistItems { get; set; } /// /// Gets or sets the album. diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs index cfea0c315..5ca36b448 100644 --- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs @@ -64,20 +64,10 @@ namespace MediaBrowser.Providers.TV var sourceItem = source.Item; var targetItem = target.Item; - if (replaceData || string.IsNullOrEmpty(targetItem.AirTime)) - { - targetItem.AirTime = sourceItem.AirTime; - } - if (replaceData || !targetItem.Status.HasValue) { targetItem.Status = sourceItem.Status; } - - if (replaceData || targetItem.AirDays == null || targetItem.AirDays.Count == 0) - { - targetItem.AirDays = sourceItem.AirDays; - } } } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index 78556c5a4..4a062f97e 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -1090,28 +1090,6 @@ namespace MediaBrowser.Providers.TV 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": { var val = reader.ReadElementContentAsString(); diff --git a/MediaBrowser.Providers/TV/TvExternalIds.cs b/MediaBrowser.Providers/TV/TvExternalIds.cs index d2860a622..104bcb5ae 100644 --- a/MediaBrowser.Providers/TV/TvExternalIds.cs +++ b/MediaBrowser.Providers/TV/TvExternalIds.cs @@ -96,27 +96,4 @@ namespace MediaBrowser.Providers.TV 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; - } - } } diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs index b0db4e6f3..795540e26 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs @@ -61,22 +61,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers } 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": { diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index 5f14137bd..41c376ddf 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -611,13 +611,6 @@ namespace MediaBrowser.XbmcMetadata.Savers 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)) { writer.WriteElementString("language", item.PreferredMetadataLanguage); diff --git a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs index e9b2b786a..a2f07d952 100644 --- a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs @@ -69,20 +69,6 @@ namespace MediaBrowser.XbmcMetadata.Savers { 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 GetTagsUsed(IHasMetadata item) @@ -94,9 +80,7 @@ namespace MediaBrowser.XbmcMetadata.Savers "episodeguide", "season", "episode", - "status", - "airs_time", - "airs_dayofweek" + "status" }); return list; } diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 890ecaccd..d82242826 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.717 + 3.0.720 Emby.Common Emby Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 6b7a8729b..8c3f90e4f 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.717 + 3.0.720 Emby.Server.Core Emby Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Emby Server. Copyright © Emby 2013 - + diff --git a/SharedVersion.cs b/SharedVersion.cs index b201954e6..719ace03f 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.26.20")] +[assembly: AssemblyVersion("3.2.26.21")] -- cgit v1.2.3 From cf350f3b7e3e82bf7863d426186044e92737ae27 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 12 Aug 2017 15:09:13 -0400 Subject: expand on hardware decoding options --- Emby.Server.Implementations/ApplicationHost.cs | 8 +--- .../Data/CleanDatabaseScheduledTask.cs | 47 +--------------------- MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 2 +- .../MediaEncoding/EncodingHelper.cs | 27 ++++++------- .../Configuration/EncodingOptions.cs | 6 ++- MediaBrowser.Model/Sync/SyncJob.cs | 3 -- SharedVersion.cs | 2 +- 7 files changed, 23 insertions(+), 72 deletions(-) (limited to 'MediaBrowser.Model/Configuration') diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs index 9c69cc0fc..7f893d8f7 100644 --- a/Emby.Server.Implementations/ApplicationHost.cs +++ b/Emby.Server.Implementations/ApplicationHost.cs @@ -1590,14 +1590,10 @@ namespace Emby.Server.Implementations /// Task{CheckForUpdateResult}. public override async Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress) { - var cacheLength = TimeSpan.FromHours(3); + var cacheLength = TimeSpan.FromHours(1); var updateLevel = SystemUpdateLevel; - if (updateLevel == PackageVersionClass.Beta) - { - cacheLength = TimeSpan.FromHours(1); - } - else if (updateLevel == PackageVersionClass.Dev) + if (updateLevel != PackageVersionClass.Release) { cacheLength = TimeSpan.FromMinutes(5); } diff --git a/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs b/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs index f43e45441..37ba2eb5f 100644 --- a/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs +++ b/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs @@ -11,9 +11,6 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Configuration; using MediaBrowser.Model.IO; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Model.Tasks; namespace Emby.Server.Implementations.Data { @@ -34,31 +31,9 @@ namespace Emby.Server.Implementations.Data _appPaths = appPaths; } - public string Name + public Task Run(IProgress progress, CancellationToken cancellationToken) { - get { return "Clean Database"; } - } - - public string Description - { - get { return "Deletes obsolete content from the database."; } - } - - public string Category - { - get { return "Library"; } - } - - public async Task Run(IProgress progress, CancellationToken cancellationToken) - { - // Ensure these objects are lazy loaded. - // Without this there is a deadlock that will need to be investigated - var rootChildren = _libraryManager.RootFolder.Children.ToList(); - rootChildren = _libraryManager.GetUserRootFolder().Children.ToList(); - - await CleanDeadItems(cancellationToken, progress).ConfigureAwait(false); - - //await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false); + return CleanDeadItems(cancellationToken, progress); } private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress progress) @@ -98,23 +73,5 @@ namespace Emby.Server.Implementations.Data progress.Report(100); } - - /// - /// Creates the triggers that define when the task will run - /// - /// IEnumerable{BaseTaskTrigger}. - public IEnumerable GetDefaultTriggers() - { - return new[] { - - // Every so often - new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} - }; - } - - public string Key - { - get { return "CleanDatabase"; } - } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index a5387a265..6ba9577d1 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -116,7 +116,7 @@ namespace MediaBrowser.Controller.Entities.Movies { if (IsLegacyBoxSet) { - return true; + return false; } return false; diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 1f85a076e..e0153f878 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -1788,8 +1788,7 @@ namespace MediaBrowser.Controller.MediaEncoding if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec) && - !string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType) && - encodingOptions.EnableHardwareDecoding) + !string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType)) { if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase)) { @@ -1797,7 +1796,7 @@ namespace MediaBrowser.Controller.MediaEncoding { case "avc": case "h264": - if (_mediaEncoder.SupportsDecoder("h264_qsv")) + if (_mediaEncoder.SupportsDecoder("h264_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("h264", StringComparer.OrdinalIgnoreCase)) { // qsv decoder does not support 10-bit input if ((videoStream.BitDepth ?? 8) > 8) @@ -1807,21 +1806,21 @@ namespace MediaBrowser.Controller.MediaEncoding return "-c:v h264_qsv "; } break; - //case "hevc": - //case "h265": - // if (_mediaEncoder.SupportsDecoder("hevc_qsv")) - // { - // return "-c:v hevc_qsv "; - // } - // break; + case "hevc": + case "h265": + if (_mediaEncoder.SupportsDecoder("hevc_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase)) + { + return "-c:v hevc_qsv "; + } + break; case "mpeg2video": - if (_mediaEncoder.SupportsDecoder("mpeg2_qsv")) + if (_mediaEncoder.SupportsDecoder("mpeg2_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg2video", StringComparer.OrdinalIgnoreCase)) { return "-c:v mpeg2_qsv "; } break; case "vc1": - if (_mediaEncoder.SupportsDecoder("vc1_qsv")) + if (_mediaEncoder.SupportsDecoder("vc1_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("vc1", StringComparer.OrdinalIgnoreCase)) { return "-c:v vc1_qsv "; } @@ -1835,14 +1834,14 @@ namespace MediaBrowser.Controller.MediaEncoding { case "avc": case "h264": - if (_mediaEncoder.SupportsDecoder("h264_cuvid")) + if (_mediaEncoder.SupportsDecoder("h264_cuvid") && encodingOptions.HardwareDecodingCodecs.Contains("h264", StringComparer.OrdinalIgnoreCase)) { return "-c:v h264_cuvid "; } break; case "hevc": case "h265": - if (_mediaEncoder.SupportsDecoder("hevc_cuvid")) + if (_mediaEncoder.SupportsDecoder("hevc_cuvid") && encodingOptions.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase)) { return "-c:v hevc_cuvid "; } diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index e1b0514e7..55d05418c 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -13,9 +13,10 @@ namespace MediaBrowser.Model.Configuration public string VaapiDevice { get; set; } public int H264Crf { get; set; } public string H264Preset { get; set; } - public bool EnableHardwareDecoding { get; set; } public bool EnableHardwareEncoding { get; set; } + public string[] HardwareDecodingCodecs { get; set; } + public EncodingOptions() { DownMixAudioBoost = 2; @@ -24,8 +25,9 @@ namespace MediaBrowser.Model.Configuration EncodingThreadCount = -1; VaapiDevice = "/dev/dri/card0"; H264Crf = 23; - EnableHardwareDecoding = true; EnableHardwareEncoding = true; + + HardwareDecodingCodecs = new string[] { "h264", "mpeg2video", "vc1" }; } } } diff --git a/MediaBrowser.Model/Sync/SyncJob.cs b/MediaBrowser.Model/Sync/SyncJob.cs index f0e262c50..eb153427c 100644 --- a/MediaBrowser.Model/Sync/SyncJob.cs +++ b/MediaBrowser.Model/Sync/SyncJob.cs @@ -105,12 +105,9 @@ namespace MediaBrowser.Model.Sync public string PrimaryImageItemId { get; set; } public string PrimaryImageTag { get; set; } - public bool EnableAutomaticResync { get; set; } - public SyncJob() { RequestedItemIds = new List(); - EnableAutomaticResync = true; } } } diff --git a/SharedVersion.cs b/SharedVersion.cs index 25d498a60..647892115 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.26.22")] +[assembly: AssemblyVersion("3.2.26.23")] -- cgit v1.2.3 From 6b28eee2dbfbaa4b578f2f1ff3aca7182cc6aedf Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 12 Aug 2017 22:09:07 -0400 Subject: rework episode queries --- Emby.Dlna/ContentDirectory/ControlHandler.cs | 6 +- .../Data/SqliteItemRepository.cs | 27 +- MediaBrowser.Api/Reports/ReportsService.cs | 7 - MediaBrowser.Api/TvShowsService.cs | 14 - MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs | 10 - MediaBrowser.Api/UserLibrary/ItemsService.cs | 7 - MediaBrowser.Controller/Entities/Folder.cs | 8 +- .../Entities/InternalItemsQuery.cs | 3 - MediaBrowser.Controller/Entities/TV/Episode.cs | 9 +- MediaBrowser.Controller/Entities/TV/Series.cs | 30 +- .../Entities/UserViewBuilder.cs | 16 - .../MediaEncoding/EncodingHelper.cs | 26 +- MediaBrowser.Controller/Providers/EpisodeInfo.cs | 1 - .../Configuration/UserConfiguration.cs | 1 - MediaBrowser.Model/MediaBrowser.Model.csproj | 2 - MediaBrowser.Model/Querying/ItemQuery.cs | 332 --------------------- MediaBrowser.Model/Querying/SeasonQuery.cs | 22 -- .../TV/Omdb/OmdbEpisodeProvider.cs | 2 +- .../TV/TheMovieDb/MovieDbEpisodeProvider.cs | 2 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- SharedVersion.cs | 2 +- 22 files changed, 30 insertions(+), 503 deletions(-) delete mode 100644 MediaBrowser.Model/Querying/ItemQuery.cs delete mode 100644 MediaBrowser.Model/Querying/SeasonQuery.cs (limited to 'MediaBrowser.Model/Configuration') diff --git a/Emby.Dlna/ContentDirectory/ControlHandler.cs b/Emby.Dlna/ContentDirectory/ControlHandler.cs index 4be2dc945..96b282d04 100644 --- a/Emby.Dlna/ContentDirectory/ControlHandler.cs +++ b/Emby.Dlna/ContentDirectory/ControlHandler.cs @@ -536,8 +536,8 @@ namespace Emby.Dlna.ContentDirectory Limit = limit, StartIndex = startIndex, User = user, - IsMissing = false, - PresetViews = new[] { CollectionType.Movies, CollectionType.TvShows }, + IsVirtualItem = false, + PresetViews = new string[] { }, ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name }, IsPlaceHolder = false, DtoOptions = GetDtoOptions() @@ -1129,7 +1129,7 @@ namespace Emby.Dlna.ContentDirectory Limit = 50, IncludeItemTypes = new[] { typeof(Episode).Name }, ParentId = parent == null ? null : parent.Id.ToString("N"), - GroupItems = true + GroupItems = false }, query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null).ToList(); diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index e8a9b2eaa..c468da1e0 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -4275,12 +4275,13 @@ namespace Emby.Server.Implementations.Data whereClauses.Add("ProductionYear in (" + val + ")"); } - if (query.IsVirtualItem.HasValue) + var isVirtualItem = query.IsVirtualItem ?? query.IsMissing; + if (isVirtualItem.HasValue) { whereClauses.Add("IsVirtualItem=@IsVirtualItem"); if (statement != null) { - statement.TryBind("@IsVirtualItem", query.IsVirtualItem.Value); + statement.TryBind("@IsVirtualItem", isVirtualItem.Value); } } if (query.IsSpecialSeason.HasValue) @@ -4305,28 +4306,6 @@ namespace Emby.Server.Implementations.Data whereClauses.Add("PremiereDate < DATETIME('now')"); } } - if (query.IsMissing.HasValue) - { - if (query.IsMissing.Value) - { - whereClauses.Add("(IsVirtualItem=1 AND PremiereDate < DATETIME('now'))"); - } - else - { - whereClauses.Add("(IsVirtualItem=0 OR PremiereDate >= DATETIME('now'))"); - } - } - if (query.IsVirtualUnaired.HasValue) - { - if (query.IsVirtualUnaired.Value) - { - whereClauses.Add("(IsVirtualItem=1 AND PremiereDate >= DATETIME('now'))"); - } - else - { - whereClauses.Add("(IsVirtualItem=0 OR PremiereDate < DATETIME('now'))"); - } - } var queryMediaTypes = query.MediaTypes.Where(IsValidMediaType).ToArray(); if (queryMediaTypes.Length == 1) { diff --git a/MediaBrowser.Api/Reports/ReportsService.cs b/MediaBrowser.Api/Reports/ReportsService.cs index d4201e73c..76d282990 100644 --- a/MediaBrowser.Api/Reports/ReportsService.cs +++ b/MediaBrowser.Api/Reports/ReportsService.cs @@ -183,7 +183,6 @@ namespace MediaBrowser.Api.Reports Limit = request.Limit, StartIndex = request.StartIndex, IsMissing = request.IsMissing, - IsVirtualUnaired = request.IsVirtualUnaired, IsUnaired = request.IsUnaired, CollapseBoxSetItems = request.CollapseBoxSetItems, NameLessThan = request.NameLessThan, @@ -283,12 +282,6 @@ namespace MediaBrowser.Api.Reports query.SeriesStatuses = request.SeriesStatus.Split(',').Select(d => (SeriesStatus)Enum.Parse(typeof(SeriesStatus), d, true)).ToArray(); } - // Filter by Series AirDays - if (!string.IsNullOrEmpty(request.AirDays)) - { - query.AirDays = request.AirDays.Split(',').Select(d => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), d, true)).ToArray(); - } - // ExcludeLocationTypes if (!string.IsNullOrEmpty(request.ExcludeLocationTypes)) { diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index 891221d41..148e65b49 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -166,9 +166,6 @@ namespace MediaBrowser.Api [ApiMember(Name = "IsMissing", Description = "Optional filter by items that are missing episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? IsMissing { get; set; } - [ApiMember(Name = "IsVirtualUnaired", Description = "Optional filter by items that are virtual unaired episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] - public bool? IsVirtualUnaired { get; set; } - [ApiMember(Name = "AdjacentTo", Description = "Optional. Return items that are siblings of a supplied item.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string AdjacentTo { get; set; } @@ -234,9 +231,6 @@ namespace MediaBrowser.Api [ApiMember(Name = "IsMissing", Description = "Optional filter by items that are missing episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? IsMissing { get; set; } - [ApiMember(Name = "IsVirtualUnaired", Description = "Optional filter by items that are virtual unaired episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] - public bool? IsVirtualUnaired { get; set; } - [ApiMember(Name = "AdjacentTo", Description = "Optional. Return items that are siblings of a supplied item.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string AdjacentTo { get; set; } @@ -446,7 +440,6 @@ namespace MediaBrowser.Api var seasons = (series.GetItemList(new InternalItemsQuery(user) { IsMissing = request.IsMissing, - IsVirtualUnaired = request.IsVirtualUnaired, IsSpecialSeason = request.IsSpecialSeason, AdjacentTo = request.AdjacentTo @@ -532,13 +525,6 @@ namespace MediaBrowser.Api episodes = episodes.Where(i => i.IsMissingEpisode == val); } - // Filter after the fact in case the ui doesn't want them - if (request.IsVirtualUnaired.HasValue) - { - var val = request.IsVirtualUnaired.Value; - episodes = episodes.Where(i => i.IsVirtualUnaired == val); - } - if (!string.IsNullOrWhiteSpace(request.StartItemId)) { episodes = episodes.SkipWhile(i => !string.Equals(i.Id.ToString("N"), request.StartItemId, StringComparison.OrdinalIgnoreCase)); diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs index 074c1b60a..a9c5ae700 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs @@ -70,9 +70,6 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "IsUnaired", Description = "Optional filter by items that are unaired episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? IsUnaired { get; set; } - [ApiMember(Name = "IsVirtualUnaired", Description = "Optional filter by items that are virtual unaired episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] - public bool? IsVirtualUnaired { get; set; } - [ApiMember(Name = "MinCommunityRating", Description = "Optional filter by minimum community rating.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public double? MinCommunityRating { get; set; } @@ -299,13 +296,6 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "VideoTypes", Description = "Optional filter by VideoType (videofile, dvd, bluray, iso). Allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string VideoTypes { get; set; } - /// - /// Gets or sets the air days. - /// - /// The air days. - [ApiMember(Name = "AirDays", Description = "Optional filter by Series Air Days. Allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] - public string AirDays { get; set; } - /// /// Gets or sets the user id. /// diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index b9231629b..f3d7772fc 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -207,7 +207,6 @@ namespace MediaBrowser.Api.UserLibrary Limit = request.Limit, StartIndex = request.StartIndex, IsMissing = request.IsMissing, - IsVirtualUnaired = request.IsVirtualUnaired, IsUnaired = request.IsUnaired, CollapseBoxSetItems = request.CollapseBoxSetItems, NameLessThan = request.NameLessThan, @@ -320,12 +319,6 @@ namespace MediaBrowser.Api.UserLibrary query.SeriesStatuses = request.SeriesStatus.Split(',').Select(d => (SeriesStatus)Enum.Parse(typeof(SeriesStatus), d, true)).ToArray(); } - // Filter by Series AirDays - if (!string.IsNullOrEmpty(request.AirDays)) - { - query.AirDays = request.AirDays.Split(',').Select(d => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), d, true)).ToArray(); - } - // ExcludeLocationTypes if (!string.IsNullOrEmpty(request.ExcludeLocationTypes)) { diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index c0e142396..46ae9230b 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -922,12 +922,6 @@ namespace MediaBrowser.Controller.Entities return true; } - if (query.AirDays.Length > 0) - { - Logger.Debug("Query requires post-filtering due to AirDays"); - return true; - } - if (query.SeriesStatuses.Length > 0) { Logger.Debug("Query requires post-filtering due to SeriesStatuses"); @@ -1388,7 +1382,7 @@ namespace MediaBrowser.Controller.Entities EnableTotalRecordCount = false }; - if (!user.Configuration.DisplayMissingEpisodes || !user.Configuration.DisplayUnairedEpisodes) + if (!user.Configuration.DisplayMissingEpisodes) { query.IsVirtualItem = false; } diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs index d9c8223c1..04833d049 100644 --- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs +++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs @@ -42,7 +42,6 @@ namespace MediaBrowser.Controller.Entities public bool? IsSpecialSeason { get; set; } public bool? IsMissing { get; set; } public bool? IsUnaired { get; set; } - public bool? IsVirtualUnaired { get; set; } public bool? CollapseBoxSetItems { get; set; } public string NameStartsWithOrGreater { get; set; } @@ -149,7 +148,6 @@ namespace MediaBrowser.Controller.Entities public TrailerType[] TrailerTypes { get; set; } public SourceType[] SourceTypes { get; set; } - public DayOfWeek[] AirDays { get; set; } public SeriesStatus[] SeriesStatuses { get; set; } public string ExternalSeriesId { get; set; } public string ExternalId { get; set; } @@ -214,7 +212,6 @@ namespace MediaBrowser.Controller.Entities PresetViews = new string[] { }; TrailerTypes = new TrailerType[] { }; SourceTypes = new SourceType[] { }; - AirDays = new DayOfWeek[] { }; SeriesStatuses = new SeriesStatus[] { }; OrderBy = new List>(); } diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index 3cdfd19f1..c30e0ef8e 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -282,16 +282,10 @@ namespace MediaBrowser.Controller.Entities.TV { get { - return LocationType == LocationType.Virtual && !IsUnaired; + return LocationType == LocationType.Virtual; } } - [IgnoreDataMember] - public bool IsVirtualUnaired - { - get { return LocationType == LocationType.Virtual && IsUnaired; } - } - [IgnoreDataMember] public Guid? SeasonId { get; set; } [IgnoreDataMember] @@ -346,7 +340,6 @@ namespace MediaBrowser.Controller.Entities.TV id.IsMissingEpisode = IsMissingEpisode; id.IndexNumberEnd = IndexNumberEnd; - id.IsVirtualUnaired = IsVirtualUnaired; return id; } diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 7d1c7314d..854c1d4da 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -250,18 +250,10 @@ namespace MediaBrowser.Controller.Entities.TV query.IncludeItemTypes = new[] { typeof(Season).Name }; query.SortBy = new[] {ItemSortBy.SortName}; - if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) - { - query.IsVirtualItem = false; - } - else if (!config.DisplayMissingEpisodes) + if (!config.DisplayMissingEpisodes) { query.IsMissing = false; } - else if (!config.DisplayUnairedEpisodes) - { - query.IsVirtualUnaired = false; - } } protected override QueryResult GetItemsInternal(InternalItemsQuery query) @@ -309,18 +301,10 @@ namespace MediaBrowser.Controller.Entities.TV DtoOptions = options }; var config = user.Configuration; - if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) - { - query.IsVirtualItem = false; - } - else if (!config.DisplayMissingEpisodes) + if (!config.DisplayMissingEpisodes) { query.IsMissing = false; } - else if (!config.DisplayUnairedEpisodes) - { - query.IsVirtualUnaired = false; - } var allItems = LibraryManager.GetItemList(query); @@ -428,18 +412,10 @@ namespace MediaBrowser.Controller.Entities.TV if (user != null) { var config = user.Configuration; - if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) - { - query.IsVirtualItem = false; - } - else if (!config.DisplayMissingEpisodes) + if (!config.DisplayMissingEpisodes) { query.IsMissing = false; } - else if (!config.DisplayUnairedEpisodes) - { - query.IsVirtualUnaired = false; - } } var allItems = LibraryManager.GetItemList(query).OfType(); diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index a01260397..9323404e3 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -779,7 +779,6 @@ namespace MediaBrowser.Controller.Entities items = FilterVirtualEpisodes(items, query.IsMissing, - query.IsVirtualUnaired, query.IsUnaired); if (collapseBoxSetItems && user != null) @@ -1065,7 +1064,6 @@ namespace MediaBrowser.Controller.Entities private static IEnumerable FilterVirtualEpisodes( IEnumerable items, bool? isMissing, - bool? isVirtualUnaired, bool? isUnaired) { if (isMissing.HasValue) @@ -1096,20 +1094,6 @@ namespace MediaBrowser.Controller.Entities }); } - if (isVirtualUnaired.HasValue) - { - var val = isVirtualUnaired.Value; - items = items.Where(i => - { - var e = i as Episode; - if (e != null) - { - return e.IsVirtualUnaired == val; - } - return true; - }); - } - return items; } diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index e0153f878..4fecc34e5 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -925,19 +925,6 @@ namespace MediaBrowser.Controller.MediaEncoding return false; } - // Video bitrate must fall within requested value - if (request.AudioBitRate.HasValue) - { - if (!audioStream.BitRate.HasValue || audioStream.BitRate.Value <= 0) - { - return false; - } - if (audioStream.BitRate.Value > request.AudioBitRate.Value) - { - return false; - } - } - // Channels must fall within requested value var channels = request.AudioChannels ?? request.MaxAudioChannels; if (channels.HasValue) @@ -965,6 +952,19 @@ namespace MediaBrowser.Controller.MediaEncoding } } + // Video bitrate must fall within requested value + if (request.AudioBitRate.HasValue) + { + if (!audioStream.BitRate.HasValue || audioStream.BitRate.Value <= 0) + { + return false; + } + if (audioStream.BitRate.Value > request.AudioBitRate.Value) + { + return false; + } + } + return request.EnableAutoStreamCopy; } diff --git a/MediaBrowser.Controller/Providers/EpisodeInfo.cs b/MediaBrowser.Controller/Providers/EpisodeInfo.cs index b8e88ea53..5df999ab0 100644 --- a/MediaBrowser.Controller/Providers/EpisodeInfo.cs +++ b/MediaBrowser.Controller/Providers/EpisodeInfo.cs @@ -10,7 +10,6 @@ namespace MediaBrowser.Controller.Providers public int? IndexNumberEnd { get; set; } public bool IsMissingEpisode { get; set; } - public bool IsVirtualUnaired { get; set; } public EpisodeInfo() { diff --git a/MediaBrowser.Model/Configuration/UserConfiguration.cs b/MediaBrowser.Model/Configuration/UserConfiguration.cs index 30b5f384f..15bd003ae 100644 --- a/MediaBrowser.Model/Configuration/UserConfiguration.cs +++ b/MediaBrowser.Model/Configuration/UserConfiguration.cs @@ -25,7 +25,6 @@ namespace MediaBrowser.Model.Configuration public string SubtitleLanguagePreference { get; set; } public bool DisplayMissingEpisodes { get; set; } - public bool DisplayUnairedEpisodes { get; set; } public string[] GroupedFolders { get; set; } diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 60cad44db..0e4cc0623 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -302,7 +302,6 @@ - @@ -339,7 +338,6 @@ - diff --git a/MediaBrowser.Model/Querying/ItemQuery.cs b/MediaBrowser.Model/Querying/ItemQuery.cs deleted file mode 100644 index 11c046452..000000000 --- a/MediaBrowser.Model/Querying/ItemQuery.cs +++ /dev/null @@ -1,332 +0,0 @@ -using MediaBrowser.Model.Entities; -using System; - -namespace MediaBrowser.Model.Querying -{ - /// - /// Contains all the possible parameters that can be used to query for items - /// - public class ItemQuery - { - /// - /// The user to localize search results for - /// - /// The user id. - public string UserId { get; set; } - - /// - /// Specify this to localize the search to a specific item or folder. Omit to use the root. - /// - /// The parent id. - public string ParentId { get; set; } - - /// - /// Skips over a given number of items within the results. Use for paging. - /// - /// The start index. - public int? StartIndex { get; set; } - - /// - /// The maximum number of items to return - /// - /// The limit. - public int? Limit { get; set; } - - /// - /// What to sort the results by - /// - /// The sort by. - public string[] SortBy { get; set; } - - /// - /// Gets or sets the artist ids. - /// - /// The artist ids. - public string[] ArtistIds { get; set; } - - /// - /// The sort order to return results with - /// - /// The sort order. - public SortOrder? SortOrder { get; set; } - - /// - /// Filters to apply to the results - /// - /// The filters. - public ItemFilter[] Filters { get; set; } - - /// - /// Fields to return within the items, in addition to basic information - /// - /// The fields. - public ItemFields[] Fields { get; set; } - - /// - /// Gets or sets the media types. - /// - /// The media types. - public string[] MediaTypes { get; set; } - - /// - /// Gets or sets the video formats. - /// - /// The video formats. - public bool? Is3D { get; set; } - - /// - /// Gets or sets the video types. - /// - /// The video types. - public VideoType[] VideoTypes { get; set; } - - /// - /// Whether or not to perform the query recursively - /// - /// true if recursive; otherwise, false. - public bool Recursive { get; set; } - - /// - /// Limit results to items containing specific genres - /// - /// The genres. - public string[] Genres { get; set; } - - /// - /// Gets or sets the studio ids. - /// - /// The studio ids. - public string[] StudioIds { get; set; } - - /// - /// Gets or sets the exclude item types. - /// - /// The exclude item types. - public string[] ExcludeItemTypes { get; set; } - - /// - /// Gets or sets the include item types. - /// - /// The include item types. - public string[] IncludeItemTypes { get; set; } - - /// - /// Limit results to items containing specific years - /// - /// The years. - public int[] Years { get; set; } - - /// - /// Limit results to items containing a specific person - /// - /// The person. - public string[] PersonIds { get; set; } - - /// - /// If the Person filter is used, this can also be used to restrict to a specific person type - /// - /// The type of the person. - public string[] PersonTypes { get; set; } - - /// - /// Search characters used to find items - /// - /// The index by. - public string SearchTerm { get; set; } - - /// - /// Gets or sets the image types. - /// - /// The image types. - public ImageType[] ImageTypes { get; set; } - - /// - /// Gets or sets the air days. - /// - /// The air days. - public DayOfWeek[] AirDays { get; set; } - - /// - /// Gets or sets the series status. - /// - /// The series status. - public SeriesStatus[] SeriesStatuses { get; set; } - - /// - /// Gets or sets the ids, which are specific items to retrieve - /// - /// The ids. - public string[] Ids { get; set; } - - /// - /// Gets or sets the min official rating. - /// - /// The min official rating. - public string MinOfficialRating { get; set; } - - /// - /// Gets or sets the max official rating. - /// - /// The max official rating. - public string MaxOfficialRating { get; set; } - - /// - /// Gets or sets the min index number. - /// - /// The min index number. - public int? MinIndexNumber { get; set; } - - /// - /// Gets or sets a value indicating whether this instance has parental rating. - /// - /// null if [has parental rating] contains no value, true if [has parental rating]; otherwise, false. - public bool? HasParentalRating { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is HD. - /// - /// null if [is HD] contains no value, true if [is HD]; otherwise, false. - public bool? IsHD { get; set; } - - /// - /// Gets or sets the parent index number. - /// - /// The parent index number. - public int? ParentIndexNumber { get; set; } - - /// - /// Gets or sets the min players. - /// - /// The min players. - public int? MinPlayers { get; set; } - - /// - /// Gets or sets the max players. - /// - /// The max players. - public int? MaxPlayers { get; set; } - - /// - /// Gets or sets the name starts with or greater. - /// - /// The name starts with or greater. - public string NameStartsWithOrGreater { get; set; } - - /// - /// Gets or sets the name starts with. - /// - /// The name starts with or greater. - public string NameStartsWith { get; set; } - - /// - /// Gets or sets the name starts with. - /// - /// The name lessthan. - public string NameLessThan { get; set; } - - /// - /// Gets or sets the album artist starts with or greater. - /// - /// The album artist starts with or greater. - public string AlbumArtistStartsWithOrGreater { get; set; } - - /// - /// Gets or sets a value indicating whether [include index containers]. - /// - /// true if [include index containers]; otherwise, false. - public bool IncludeIndexContainers { get; set; } - - /// - /// Gets or sets the location types. - /// - /// The location types. - public LocationType[] LocationTypes { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is missing episode. - /// - /// null if [is missing episode] contains no value, true if [is missing episode]; otherwise, false. - public bool? IsMissing { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is unaired episode. - /// - /// null if [is unaired episode] contains no value, true if [is unaired episode]; otherwise, false. - public bool? IsUnaired { get; set; } - - public bool? IsVirtualUnaired { get; set; } - - public bool? IsInBoxSet { get; set; } - - public bool? CollapseBoxSetItems { get; set; } - - public bool? IsPlayed { get; set; } - - /// - /// Gets or sets the exclude location types. - /// - /// The exclude location types. - public LocationType[] ExcludeLocationTypes { get; set; } - - public double? MinCommunityRating { get; set; } - public double? MinCriticRating { get; set; } - - public int? AiredDuringSeason { get; set; } - - public DateTime? MinPremiereDate { get; set; } - - public DateTime? MaxPremiereDate { get; set; } - - public bool? EnableImages { get; set; } - public int? ImageTypeLimit { get; set; } - public ImageType[] EnableImageTypes { get; set; } - - [Obsolete] - public string[] Artists { get; set; } - [Obsolete] - public string[] Studios { get; set; } - [Obsolete] - public string Person { get; set; } - - public bool EnableTotalRecordCount { get; set; } - - /// - /// Initializes a new instance of the class. - /// - public ItemQuery() - { - LocationTypes = new LocationType[] { }; - ExcludeLocationTypes = new LocationType[] { }; - - SortBy = new string[] { }; - - Filters = new ItemFilter[] { }; - - Fields = new ItemFields[] { }; - - MediaTypes = new string[] { }; - - VideoTypes = new VideoType[] { }; - - EnableTotalRecordCount = true; - - Artists = new string[] { }; - Studios = new string[] { }; - - Genres = new string[] { }; - StudioIds = new string[] { }; - IncludeItemTypes = new string[] { }; - ExcludeItemTypes = new string[] { }; - Years = new int[] { }; - PersonTypes = new string[] { }; - Ids = new string[] { }; - ArtistIds = new string[] { }; - PersonIds = new string[] { }; - - ImageTypes = new ImageType[] { }; - AirDays = new DayOfWeek[] { }; - SeriesStatuses = new SeriesStatus[] { }; - EnableImageTypes = new ImageType[] { }; - } - } -} diff --git a/MediaBrowser.Model/Querying/SeasonQuery.cs b/MediaBrowser.Model/Querying/SeasonQuery.cs deleted file mode 100644 index b1fe635bb..000000000 --- a/MediaBrowser.Model/Querying/SeasonQuery.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace MediaBrowser.Model.Querying -{ - public class SeasonQuery - { - public string UserId { get; set; } - - public string SeriesId { get; set; } - - public bool? IsMissing { get; set; } - - public bool? IsVirtualUnaired { get; set; } - - public ItemFields[] Fields { get; set; } - - public bool? IsSpecialSeason { get; set; } - - public SeasonQuery() - { - Fields = new ItemFields[] { }; - } - } -} \ No newline at end of file diff --git a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs index daf493ad9..48af89830 100644 --- a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs @@ -50,7 +50,7 @@ namespace MediaBrowser.Providers.TV }; // Allowing this will dramatically increase scan times - if (info.IsMissingEpisode || info.IsVirtualUnaired) + if (info.IsMissingEpisode) { return result; } diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs index 619e56baf..31785ca9c 100644 --- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs @@ -68,7 +68,7 @@ namespace MediaBrowser.Providers.TV var result = new MetadataResult(); // Allowing this will dramatically increase scan times - if (info.IsMissingEpisode || info.IsVirtualUnaired) + if (info.IsMissingEpisode) { return result; } diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index fedb815cf..c7eb70f59 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.726 + 3.0.727 Emby.Common Emby Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 58432679b..2837a812e 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.726 + 3.0.727 Emby.Server.Core Emby Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Emby Server. Copyright © Emby 2013 - + diff --git a/SharedVersion.cs b/SharedVersion.cs index 647892115..85fc89fc0 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.26.23")] +[assembly: AssemblyVersion("3.2.26.24")] -- cgit v1.2.3 From 4ea39256261f0ff537e0a75853e5881596602f50 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 13 Aug 2017 01:01:34 -0400 Subject: auto fallback from gpu to cpu --- .../MediaBrowser.Controller.csproj | 1 - MediaBrowser.Controller/MediaEncoding/JobLogger.cs | 149 --------------------- .../Configuration/EncodingOptions.cs | 2 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- SharedVersion.cs | 2 +- 6 files changed, 5 insertions(+), 155 deletions(-) delete mode 100644 MediaBrowser.Controller/MediaEncoding/JobLogger.cs (limited to 'MediaBrowser.Model/Configuration') diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 5c2bae82e..26766f51a 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -173,7 +173,6 @@ - diff --git a/MediaBrowser.Controller/MediaEncoding/JobLogger.cs b/MediaBrowser.Controller/MediaEncoding/JobLogger.cs deleted file mode 100644 index 03e4f7771..000000000 --- a/MediaBrowser.Controller/MediaEncoding/JobLogger.cs +++ /dev/null @@ -1,149 +0,0 @@ -using MediaBrowser.Model.Extensions; -using MediaBrowser.Model.Logging; -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; - -namespace MediaBrowser.Controller.MediaEncoding -{ - public class JobLogger - { - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - private readonly ILogger _logger; - - public JobLogger(ILogger logger) - { - _logger = logger; - } - - public async void StartStreamingLog(EncodingJobInfo state, Stream source, Stream target) - { - try - { - using (var reader = new StreamReader(source)) - { - while (!reader.EndOfStream) - { - var line = await reader.ReadLineAsync().ConfigureAwait(false); - - ParseLogLine(line, state); - - var bytes = Encoding.UTF8.GetBytes(Environment.NewLine + line); - - await target.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); - await target.FlushAsync().ConfigureAwait(false); - } - } - } - catch (ObjectDisposedException) - { - // Don't spam the log. This doesn't seem to throw in windows, but sometimes under linux - } - catch (Exception ex) - { - _logger.ErrorException("Error reading ffmpeg log", ex); - } - } - - private void ParseLogLine(string line, EncodingJobInfo state) - { - float? framerate = null; - double? percent = null; - TimeSpan? transcodingPosition = null; - long? bytesTranscoded = null; - int? bitRate = null; - - var parts = line.Split(' '); - - var totalMs = state.RunTimeTicks.HasValue - ? TimeSpan.FromTicks(state.RunTimeTicks.Value).TotalMilliseconds - : 0; - - var startMs = state.BaseRequest.StartTimeTicks.HasValue - ? TimeSpan.FromTicks(state.BaseRequest.StartTimeTicks.Value).TotalMilliseconds - : 0; - - for (var i = 0; i < parts.Length; i++) - { - var part = parts[i]; - - if (string.Equals(part, "fps=", StringComparison.OrdinalIgnoreCase) && - (i + 1 < parts.Length)) - { - var rate = parts[i + 1]; - float val; - - if (float.TryParse(rate, NumberStyles.Any, _usCulture, out val)) - { - framerate = val; - } - } - else if (state.RunTimeTicks.HasValue && - part.StartsWith("time=", StringComparison.OrdinalIgnoreCase)) - { - var time = part.Split(new[] { '=' }, 2).Last(); - TimeSpan val; - - if (TimeSpan.TryParse(time, _usCulture, out val)) - { - var currentMs = startMs + val.TotalMilliseconds; - - var percentVal = currentMs / totalMs; - percent = 100 * percentVal; - - transcodingPosition = val; - } - } - else if (part.StartsWith("size=", StringComparison.OrdinalIgnoreCase)) - { - var size = part.Split(new[] { '=' }, 2).Last(); - - int? scale = null; - if (size.IndexOf("kb", StringComparison.OrdinalIgnoreCase) != -1) - { - scale = 1024; - size = size.Replace("kb", string.Empty, StringComparison.OrdinalIgnoreCase); - } - - if (scale.HasValue) - { - long val; - - if (long.TryParse(size, NumberStyles.Any, _usCulture, out val)) - { - bytesTranscoded = val * scale.Value; - } - } - } - else if (part.StartsWith("bitrate=", StringComparison.OrdinalIgnoreCase)) - { - var rate = part.Split(new[] { '=' }, 2).Last(); - - int? scale = null; - if (rate.IndexOf("kbits/s", StringComparison.OrdinalIgnoreCase) != -1) - { - scale = 1024; - rate = rate.Replace("kbits/s", string.Empty, StringComparison.OrdinalIgnoreCase); - } - - if (scale.HasValue) - { - float val; - - if (float.TryParse(rate, NumberStyles.Any, _usCulture, out val)) - { - bitRate = (int)Math.Ceiling(val * scale.Value); - } - } - } - } - - if (framerate.HasValue || percent.HasValue) - { - state.ReportTranscodingProgress(transcodingPosition, framerate, percent, bytesTranscoded, bitRate); - } - } - } -} diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index 55d05418c..d619e3140 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -27,7 +27,7 @@ namespace MediaBrowser.Model.Configuration H264Crf = 23; EnableHardwareEncoding = true; - HardwareDecodingCodecs = new string[] { "h264", "mpeg2video", "vc1" }; + HardwareDecodingCodecs = new string[] { "h264", "vc1" }; } } } diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index c7eb70f59..9be89112a 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.727 + 3.0.729 Emby.Common Emby Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 2837a812e..1d2e484db 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.727 + 3.0.729 Emby.Server.Core Emby Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Emby Server. Copyright © Emby 2013 - + diff --git a/SharedVersion.cs b/SharedVersion.cs index 85fc89fc0..fc7304f53 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.26.24")] +[assembly: AssemblyVersion("3.2.26.25")] -- cgit v1.2.3