From 9b8f85ea8138b3ec4435bcede6a1d72d27b09d73 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 7 Mar 2016 13:50:58 -0500 Subject: update hls subtitles --- MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs index f8f4e9ec9..ddaf7ff6d 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs @@ -90,8 +90,7 @@ namespace MediaBrowser.Controller.MediaEncoding Cabac = info.Cabac; Context = info.Context; - if (info.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode || - info.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Embed) + if (info.SubtitleDeliveryMethod != SubtitleDeliveryMethod.External) { SubtitleStreamIndex = info.SubtitleStreamIndex; } -- cgit v1.2.3 From 3c4b64f6533721f3cb177a77967f154b90ee33cc Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 7 Mar 2016 21:59:21 -0500 Subject: update handling of deleted recording files --- MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 12 +++---- MediaBrowser.Controller/Entities/BaseItem.cs | 13 +++++-- MediaBrowser.Controller/LiveTv/ILiveTvManager.cs | 7 ++++ .../LiveTv/LiveTvAudioRecording.cs | 5 +++ .../LiveTv/LiveTvVideoRecording.cs | 5 +++ .../LiveTv/LiveTvManager.cs | 41 ++++++++++------------ .../Persistence/CleanDatabaseScheduledTask.cs | 12 ++----- 7 files changed, 55 insertions(+), 40 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 4693a54aa..000c02256 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -529,6 +529,11 @@ namespace MediaBrowser.Api.Playback.Hls "subs" : null; + if (!string.IsNullOrWhiteSpace(subtitleGroup)) + { + AddSubtitles(state, subtitleStreams, builder); + } + AppendPlaylist(builder, state, playlistUrl, totalBitrate, subtitleGroup); if (EnableAdaptiveBitrateStreaming(state, isLiveStream)) @@ -548,11 +553,6 @@ namespace MediaBrowser.Api.Playback.Hls AppendPlaylist(builder, state, variantUrl, newBitrate, subtitleGroup); } - if (!string.IsNullOrWhiteSpace(subtitleGroup)) - { - AddSubtitles(state, subtitleStreams, builder); - } - return builder.ToString(); } @@ -570,7 +570,7 @@ namespace MediaBrowser.Api.Playback.Hls foreach (var stream in subtitles) { - const string format = "#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"subs\",NAME=\"{0}\",DEFAULT={1},FORCED={2},URI=\"{3}\",LANGUAGE=\"{4}\""; + const string format = "#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"subs\",NAME=\"{0}\",DEFAULT={1},FORCED={2},AUTOSELECT=YES,URI=\"{3}\",LANGUAGE=\"{4}\""; var name = stream.Language; diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 3dfbdec56..bd4ede466 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1835,8 +1835,8 @@ namespace MediaBrowser.Controller.Entities ProviderIds = ProviderIds, IndexNumber = IndexNumber, ParentIndexNumber = ParentIndexNumber, - Year = ProductionYear, - PremiereDate = PremiereDate + Year = ProductionYear, + PremiereDate = PremiereDate }; } @@ -1985,5 +1985,14 @@ namespace MediaBrowser.Controller.Entities { return LibraryManager.DeleteItem(this, options); } + + public virtual Task OnFileDeleted() + { + // Remove from database + return Delete(new DeleteOptions + { + DeleteFileLocation = false + }); + } } } \ No newline at end of file diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs index 501e48a74..5dffb5e9b 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs @@ -390,5 +390,12 @@ namespace MediaBrowser.Controller.LiveTv /// The options. /// The user. void AddChannelInfo(BaseItemDto dto, LiveTvChannel channel, DtoOptions options, User user); + + /// + /// Called when [recording file deleted]. + /// + /// The recording. + /// Task. + Task OnRecordingFileDeleted(ILiveTvRecording recording); } } diff --git a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs index c3d843f85..6f72ae1fb 100644 --- a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs +++ b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs @@ -151,5 +151,10 @@ namespace MediaBrowser.Controller.LiveTv { return LiveTvManager.DeleteRecording(this); } + + public override Task OnFileDeleted() + { + return LiveTvManager.OnRecordingFileDeleted(this); + } } } diff --git a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs index 5492a29f3..ce0c69dee 100644 --- a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs +++ b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs @@ -166,5 +166,10 @@ namespace MediaBrowser.Controller.LiveTv { return LiveTvManager.DeleteRecording(this); } + + public override Task OnFileDeleted() + { + return LiveTvManager.OnRecordingFileDeleted(this); + } } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index bb522082a..6b848d0f6 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -926,16 +926,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv var queryResult = _libraryManager.QueryItems(internalQuery); - var returnArray = queryResult.Items - .Cast() - .Select(i => new Tuple(_dtoService.GetBaseItemDto(i, options, user), i.ServiceName, i.ExternalId)) - .ToArray(); - - await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); + var returnArray = _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ToArray(); var result = new QueryResult { - Items = returnArray.Select(i => i.Item1).ToArray(), + Items = returnArray, TotalRecordCount = queryResult.TotalRecordCount }; @@ -1006,15 +1001,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv var user = _userManager.GetUserById(query.UserId); - var returnArray = internalResult.Items - .Select(i => new Tuple(_dtoService.GetBaseItemDto(i, options, user), i.ServiceName, i.ExternalId)) - .ToArray(); - - await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); + var returnArray = _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ToArray(); var result = new QueryResult { - Items = returnArray.Select(i => i.Item1).ToArray(), + Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; @@ -1635,18 +1626,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false); - var tuples = internalResult.Items - .Select(i => new Tuple(i, _dtoService.GetBaseItemDto(i, options, user))) - .ToArray(); - - if (user != null) - { - _dtoService.FillSyncInfo(tuples, new DtoOptions(), user); - } + var returnArray = _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ToArray(); return new QueryResult { - Items = tuples.Select(i => i.Item2).ToArray(), + Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; } @@ -1707,6 +1691,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv }; } + public Task OnRecordingFileDeleted(ILiveTvRecording recording) + { + var service = GetService(recording); + + if (service is EmbyTV.EmbyTV) + { + // We can't trust that we'll be able to direct stream it through emby server, no matter what the provider says + return service.DeleteRecordingAsync(recording.ExternalId, CancellationToken.None); + } + + return Task.FromResult(true); + } + public async Task DeleteRecording(string recordingId) { var recording = await GetInternalRecording(recordingId, CancellationToken.None).ConfigureAwait(false); diff --git a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs index 5f1bf0216..7ff81e5c1 100644 --- a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs @@ -239,11 +239,7 @@ namespace MediaBrowser.Server.Implementations.Persistence typeof(Year).Name, typeof(Channel).Name, typeof(AggregateFolder).Name, - typeof(CollectionFolder).Name, - - // LiveTVManager handles recordings - typeof(LiveTvAudioRecording).Name, - typeof(LiveTvVideoRecording).Name + typeof(CollectionFolder).Name } }); @@ -279,11 +275,7 @@ namespace MediaBrowser.Server.Implementations.Persistence _logger.Info("Deleting item from database {0} because path no longer exists. type: {1} path: {2}", libraryItem.Name, libraryItem.GetType().Name, libraryItem.Path ?? string.Empty); - await libraryItem.Delete(new DeleteOptions - { - DeleteFileLocation = false - - }).ConfigureAwait(false); + await libraryItem.OnFileDeleted().ConfigureAwait(false); } catch (OperationCanceledException) { -- cgit v1.2.3 From aa23da0dc44afbfe47a83d2dda0644472ad4e0e4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 9 Mar 2016 12:40:29 -0500 Subject: ipv6 fixes --- MediaBrowser.Controller/IServerApplicationHost.cs | 7 +++++++ MediaBrowser.Dlna/Main/DlnaEntryPoint.cs | 2 +- MediaBrowser.Dlna/PlayTo/PlayToManager.cs | 2 +- .../Connect/ConnectManager.cs | 16 +++++++++++----- MediaBrowser.Server.Startup.Common/ApplicationHost.cs | 17 ++++++++++++++--- 5 files changed, 34 insertions(+), 10 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs index fb843d191..e4eecec18 100644 --- a/MediaBrowser.Controller/IServerApplicationHost.cs +++ b/MediaBrowser.Controller/IServerApplicationHost.cs @@ -79,5 +79,12 @@ namespace MediaBrowser.Controller /// The host. /// System.String. string GetLocalApiUrl(string host); + + /// + /// Gets the local API URL. + /// + /// The ip address. + /// System.String. + string GetLocalApiUrl(IPAddress ipAddress); } } diff --git a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs index 2133888b6..8a30fbf40 100644 --- a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs +++ b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs @@ -161,7 +161,7 @@ namespace MediaBrowser.Dlna.Main var descriptorURI = "/dlna/" + udn + "/description.xml"; - var uri = new Uri(_appHost.GetLocalApiUrl(addressString) + descriptorURI); + var uri = new Uri(_appHost.GetLocalApiUrl(address) + descriptorURI); var services = new List { diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs index 0328111c5..d2b48474c 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs @@ -171,7 +171,7 @@ namespace MediaBrowser.Dlna.PlayTo private string GetServerAddress(IPAddress localIp) { - return _appHost.GetLocalApiUrl(localIp.ToString()); + return _appHost.GetLocalApiUrl(localIp); } public void Dispose() diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index d7477225c..618b7ffc5 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs @@ -81,6 +81,12 @@ namespace MediaBrowser.Server.Implementations.Connect if (!ip.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !ip.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) { + // Handle ipv6 + if (ip.IndexOf(':') != -1) + { + ip = "[" + ip + "]"; + } + ip = (_appHost.EnableHttps ? "https://" : "http://") + ip; } @@ -316,7 +322,7 @@ namespace MediaBrowser.Server.Implementations.Connect try { - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); var json = _json.SerializeToString(_data); @@ -324,7 +330,7 @@ namespace MediaBrowser.Server.Implementations.Connect lock (_dataFileLock) { - _fileSystem.WriteAllText(path, encrypted, Encoding.UTF8); + _fileSystem.WriteAllText(path, encrypted, Encoding.UTF8); } } catch (Exception ex) @@ -341,7 +347,7 @@ namespace MediaBrowser.Server.Implementations.Connect { lock (_dataFileLock) { - var encrypted = _fileSystem.ReadAllText(path, Encoding.UTF8); + var encrypted = _fileSystem.ReadAllText(path, Encoding.UTF8); var json = _encryption.DecryptString(encrypted); @@ -381,7 +387,7 @@ namespace MediaBrowser.Server.Implementations.Connect { await UpdateConnectInfo().ConfigureAwait(false); } - + await _operationLock.WaitAsync().ConfigureAwait(false); try @@ -480,7 +486,7 @@ namespace MediaBrowser.Server.Implementations.Connect { await UpdateConnectInfo().ConfigureAwait(false); } - + await _operationLock.WaitAsync().ConfigureAwait(false); try diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index b71fe365d..269c30669 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -97,6 +97,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; +using System.Net.Sockets; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -322,7 +323,7 @@ namespace MediaBrowser.Server.Startup.Common { TaskManager.SuspendTriggers = true; } - + await base.RunStartupTasks().ConfigureAwait(false); Logger.Info("ServerId: {0}", SystemId); @@ -1134,7 +1135,7 @@ namespace MediaBrowser.Server.Startup.Common if (address != null) { - return GetLocalApiUrl(address.ToString()); + return GetLocalApiUrl(address); } return null; @@ -1148,6 +1149,16 @@ namespace MediaBrowser.Server.Startup.Common } } + public string GetLocalApiUrl(IPAddress ipAddress) + { + if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6) + { + return GetLocalApiUrl("[" + ipAddress + "]"); + } + + return GetLocalApiUrl(ipAddress.ToString()); + } + public string GetLocalApiUrl(string host) { return string.Format("http://{0}:{1}", @@ -1180,7 +1191,7 @@ namespace MediaBrowser.Server.Startup.Common return true; } - var apiUrl = GetLocalApiUrl(address.ToString()); + var apiUrl = GetLocalApiUrl(address); apiUrl += "/system/ping"; if ((DateTime.UtcNow - _lastAddressCacheClear).TotalMinutes >= 5) -- cgit v1.2.3 From d683f3061979d786efc574f1073af4e77da11772 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 13 Mar 2016 21:34:24 -0400 Subject: update music user data key --- MediaBrowser.Api/StartupWizardService.cs | 1 + MediaBrowser.Controller/Entities/Audio/Audio.cs | 25 ++++++++++++++++++++++ .../Entities/Audio/MusicAlbum.cs | 23 ++++++++++++++++++-- MediaBrowser.Controller/Entities/Movies/Movie.cs | 8 +++++++ .../Parsers/MovieXmlParser.cs | 2 +- .../Configuration/ServerConfiguration.cs | 3 ++- MediaBrowser.Model/Dto/BaseItemDto.cs | 6 ------ MediaBrowser.Model/Querying/ItemFields.cs | 5 ----- MediaBrowser.Providers/Manager/ProviderManager.cs | 4 ++-- .../MediaInfo/AudioImageProvider.cs | 16 +++++++++++--- .../Movies/GenericMovieDbInfo.cs | 2 +- .../Movies/MovieMetadataService.cs | 4 ++-- .../Dto/DtoService.cs | 10 --------- .../Library/LibraryManager.cs | 5 ----- MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs | 5 +++-- .../Parsers/MovieNfoParser.cs | 13 ++++++++--- MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs | 4 ++-- 17 files changed, 91 insertions(+), 45 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index 06db1de74..10f9ec022 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -68,6 +68,7 @@ namespace MediaBrowser.Api _config.Configuration.EnableLocalizedGuids = true; _config.Configuration.EnableCustomPathSubFolders = true; _config.Configuration.EnableDateLastRefresh = true; + _config.Configuration.EnableStandaloneMusicKeys = true; _config.SaveConfiguration(); } diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index 766f1e5ed..dc37dccea 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -153,6 +153,31 @@ namespace MediaBrowser.Controller.Entities.Audio /// System.String. protected override string CreateUserDataKey() { + if (ConfigurationManager.Configuration.EnableStandaloneMusicKeys) + { + var songKey = IndexNumber.HasValue ? IndexNumber.Value.ToString("0000") : string.Empty; + + + if (ParentIndexNumber.HasValue) + { + songKey = ParentIndexNumber.Value.ToString("0000") + "-" + songKey; + } + songKey+= Name; + + if (!string.IsNullOrWhiteSpace(Album)) + { + songKey = Album + "-" + songKey; + } + + var albumArtist = AlbumArtists.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(albumArtist)) + { + songKey = albumArtist + "-" + songKey; + } + + return songKey; + } + var parent = AlbumEntity; if (parent != null) diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index c5ce6a2f7..e6178c183 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -34,7 +34,17 @@ namespace MediaBrowser.Controller.Entities.Audio { get { - return GetParents().OfType().FirstOrDefault(); + var artist = GetParents().OfType().FirstOrDefault(); + + if (artist == null) + { + var name = AlbumArtist; + if (!string.IsNullOrWhiteSpace(name)) + { + artist = LibraryManager.GetArtist(name); + } + } + return artist; } } @@ -106,6 +116,15 @@ namespace MediaBrowser.Controller.Entities.Audio return "MusicAlbum-Musicbrainz-" + id; } + if (ConfigurationManager.Configuration.EnableStandaloneMusicKeys) + { + var albumArtist = AlbumArtist; + if (!string.IsNullOrWhiteSpace(albumArtist)) + { + return albumArtist + "-" + Name; + } + } + return base.CreateUserDataKey(); } @@ -125,7 +144,7 @@ namespace MediaBrowser.Controller.Entities.Audio id.AlbumArtists = AlbumArtists; - var artist = GetParents().OfType().FirstOrDefault(); + var artist = MusicArtist; if (artist != null) { diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 749d562ac..6f99e77ec 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; using CommonIO; @@ -85,6 +86,13 @@ namespace MediaBrowser.Controller.Entities.Movies /// The name of the TMDB collection. public string TmdbCollectionName { get; set; } + [IgnoreDataMember] + public string CollectionName + { + get { return TmdbCollectionName; } + set { TmdbCollectionName = value; } + } + /// /// Gets the trailer ids. /// diff --git a/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs index 0b434231f..1c1bbe71e 100644 --- a/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs @@ -35,7 +35,7 @@ namespace MediaBrowser.LocalMetadata.Parsers if (!string.IsNullOrWhiteSpace(val) && movie != null) { - movie.TmdbCollectionName = val; + movie.CollectionName = val; } break; diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 64edbdea9..009068dea 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -207,7 +207,8 @@ namespace MediaBrowser.Model.Configuration public bool DownloadImagesInAdvance { get; set; } public bool EnableAnonymousUsageReporting { get; set; } - + public bool EnableStandaloneMusicKeys { get; set; } + /// /// Initializes a new instance of the class. /// diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index ef2de5d78..8e3284152 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -206,12 +206,6 @@ namespace MediaBrowser.Model.Dto /// The short overview. public string ShortOverview { get; set; } - /// - /// Gets or sets the name of the TMDB collection. - /// - /// The name of the TMDB collection. - public string TmdbCollectionName { get; set; } - /// /// Gets or sets the taglines. /// diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs index 97fec8fdd..1540f178a 100644 --- a/MediaBrowser.Model/Querying/ItemFields.cs +++ b/MediaBrowser.Model/Querying/ItemFields.cs @@ -235,11 +235,6 @@ /// VoteCount, - /// - /// The TMDB collection name - /// - TmdbCollectionName, - /// /// The trailer url of the item /// diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index b0d3f6381..a83a40bc3 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -1022,8 +1022,8 @@ namespace MediaBrowser.Providers.Manager .ToList(); var musicArtists = albums - .Select(i => i.GetParent()) - .OfType() + .Select(i => i.MusicArtist) + .Where(i => i != null) .ToList(); var musicArtistRefreshTasks = musicArtists.Select(i => i.ValidateChildren(new Progress(), cancellationToken, options, true)); diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index c98a67bbd..f9108b9fd 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -107,11 +107,21 @@ namespace MediaBrowser.Providers.MediaInfo private string GetAudioImagePath(Audio item) { - var album = item.AlbumEntity; - var filename = item.Album ?? string.Empty; filename += string.Join(",", item.Artists.ToArray()); - filename += album == null ? item.Id.ToString("N") + "_primary" + item.DateModified.Ticks : album.Id.ToString("N") + album.DateModified.Ticks + "_primary"; + + if (!string.IsNullOrWhiteSpace(item.Album)) + { + filename += "_" + item.Album; + } + else if (!string.IsNullOrWhiteSpace(item.Name)) + { + filename += "_" + item.Name; + } + else + { + filename += "_" + item.Id.ToString("N"); + } filename = filename.GetMD5() + ".jpg"; diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs index abd4a6202..157704240 100644 --- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs +++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs @@ -179,7 +179,7 @@ namespace MediaBrowser.Providers.Movies if (movieItem != null) { - movieItem.TmdbCollectionName = movieData.belongs_to_collection.name; + movieItem.CollectionName = movieData.belongs_to_collection.name; } } diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs index 8757bdd0d..f4cad837a 100644 --- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs +++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs @@ -37,9 +37,9 @@ namespace MediaBrowser.Providers.Movies var sourceItem = source.Item; var targetItem = target.Item; - if (replaceData || string.IsNullOrEmpty(targetItem.TmdbCollectionName)) + if (replaceData || string.IsNullOrEmpty(targetItem.CollectionName)) { - targetItem.TmdbCollectionName = sourceItem.TmdbCollectionName; + targetItem.CollectionName = sourceItem.CollectionName; } } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index a19a122c3..fb202b798 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1378,16 +1378,6 @@ namespace MediaBrowser.Server.Implementations.Dto } } - // Add MovieInfo - var movie = item as Movie; - if (movie != null) - { - if (fields.Contains(ItemFields.TmdbCollectionName)) - { - dto.TmdbCollectionName = movie.TmdbCollectionName; - } - } - var hasSpecialFeatures = item as IHasSpecialFeatures; if (hasSpecialFeatures != null) { diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 721603efe..3c56af9e6 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -1044,11 +1044,6 @@ namespace MediaBrowser.Server.Implementations.Library return names; } - private void SetPropertiesFromSongs(MusicArtist artist, IEnumerable items) - { - - } - /// /// Validate and refresh the People sub-set of the IBN. /// The items are stored in the db but not loaded into memory until actually requested by an operation. diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 7362ee58f..cb74d4dd7 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -180,7 +180,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers } catch (XmlException) { - + } } } @@ -661,7 +661,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers if (!string.IsNullOrWhiteSpace(val)) { val = val.Replace("plugin://plugin.video.youtube/?action=play_video&videoid=", "http://www.youtube.com/watch?v=", StringComparison.OrdinalIgnoreCase); - + hasTrailer.AddTrailerUrl(val, false); } } @@ -860,6 +860,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers break; case "collectionnumber": + case "tmdbcolid": var tmdbCollection = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(tmdbCollection)) { diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs index 8d5c2bf20..14c214f04 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs @@ -11,7 +11,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers { class MovieNfoParser : BaseNfoParser