diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-09-06 00:21:23 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-09-06 00:21:23 -0400 |
| commit | 58eb50095676ec8bb4f7d4e1d0fc766dd3280305 (patch) | |
| tree | 9e183c21f39db3f826dcfecde24df6b16b0037ca | |
| parent | 195391aba0aee34d819b95cc60d271c0ab6b048e (diff) | |
fixes #914 - Add option to save metadata hidden
42 files changed, 511 insertions, 182 deletions
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index d8da31196..d17b6a4f8 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -138,7 +138,7 @@ namespace MediaBrowser.Controller.Entities case CollectionType.GameFavorites: return GetFavoriteGames(parent, user, query); - case CollectionType.TvSeries: + case CollectionType.ViewTypeTvShowSeries: return GetTvSeries(parent, user, query); case CollectionType.TvGenres: @@ -183,6 +183,12 @@ namespace MediaBrowser.Controller.Entities case CollectionType.MusicArtists: return GetMusicArtists(parent, user, query); + case CollectionType.TvFavoriteEpisodes: + return GetFavoriteEpisodes(parent, user, query); + + case CollectionType.TvFavoriteSeries: + return GetFavoriteSeries(parent, user, query); + default: return GetResult(GetMediaFolders(user).SelectMany(i => i.GetChildren(user, true)), query); } @@ -302,6 +308,20 @@ namespace MediaBrowser.Controller.Entities return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), query); } + private QueryResult<BaseItem> GetFavoriteSeries(Folder parent, User user, UserItemsQuery query) + { + query.IsFavorite = true; + + return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Series), query); + } + + private QueryResult<BaseItem> GetFavoriteEpisodes(Folder parent, User user, UserItemsQuery query) + { + query.IsFavorite = true; + + return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Episode), query); + } + private QueryResult<BaseItem> GetMovieMovies(Folder parent, User user, UserItemsQuery query) { return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), query); @@ -368,8 +388,9 @@ namespace MediaBrowser.Controller.Entities list.Add(await GetUserView(category, CollectionType.TvResume, user, "0", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvNextUp, user, "1", parent).ConfigureAwait(false)); list.Add(await GetUserView(category, CollectionType.TvLatest, user, "2", parent).ConfigureAwait(false)); - list.Add(await GetUserView(category, CollectionType.TvSeries, user, "3", parent).ConfigureAwait(false)); - //list.Add(await GetUserView(CollectionType.TvFavorites, user, "4", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.ViewTypeTvShowSeries, user, "3", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.TvFavoriteSeries, user, "4", parent).ConfigureAwait(false)); + list.Add(await GetUserView(category, CollectionType.TvFavoriteEpisodes, user, "5", parent).ConfigureAwait(false)); //list.Add(await GetUserView(CollectionType.TvGenres, user, "5", parent).ConfigureAwait(false)); return GetResult(list, query); diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index bcfd566a9..d3580010c 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -503,6 +503,9 @@ namespace MediaBrowser.Dlna.Didl private XmlElement CreateObjectClass(XmlDocument result, BaseItem item) { + // More types here + // http://oss.linn.co.uk/repos/Public/LibUpnpCil/DidlLite/UpnpAv/Test/TestDidlLite.cs + var objectClass = result.CreateElement("upnp", "class", NS_UPNP); if (item.IsFolder) @@ -527,6 +530,10 @@ namespace MediaBrowser.Dlna.Didl { classType = "object.container.playlistContainer"; } + else if (item is PhotoAlbum) + { + classType = "object.container.album.photoAlbum"; + } } objectClass.InnerText = classType ?? "object.container.storageFolder"; @@ -545,11 +552,23 @@ namespace MediaBrowser.Dlna.Didl { objectClass.InnerText = "object.item.videoItem.movie"; } + else if (!_profile.RequiresPlainVideoItems && item is MusicVideo) + { + objectClass.InnerText = "object.item.videoItem.musicVideoClip"; + } else { objectClass.InnerText = "object.item.videoItem"; } } + else if (item is MusicGenre) + { + objectClass.InnerText = _profile.RequiresPlainFolders ? "object.container.storageFolder" : "object.container.genre.musicGenre"; + } + else if (item is Genre || item is GameGenre) + { + objectClass.InnerText = _profile.RequiresPlainFolders ? "object.container.storageFolder" : "object.container.genre"; + } else { objectClass.InnerText = "object.item"; diff --git a/MediaBrowser.Dlna/Ssdp/Datagram.cs b/MediaBrowser.Dlna/Ssdp/Datagram.cs index 2554d33c6..0432c35c1 100644 --- a/MediaBrowser.Dlna/Ssdp/Datagram.cs +++ b/MediaBrowser.Dlna/Ssdp/Datagram.cs @@ -8,8 +8,8 @@ namespace MediaBrowser.Dlna.Ssdp { public class Datagram { - public IPEndPoint ToEndPoint { get; private set; } - public IPEndPoint FromEndPoint { get; private set; } + public EndPoint ToEndPoint { get; private set; } + public EndPoint FromEndPoint { get; private set; } public string Message { get; private set; } /// <summary> @@ -24,7 +24,7 @@ namespace MediaBrowser.Dlna.Ssdp private readonly ILogger _logger; - public Datagram(IPEndPoint toEndPoint, IPEndPoint fromEndPoint, ILogger logger, string message, int totalSendCount) + public Datagram(EndPoint toEndPoint, EndPoint fromEndPoint, ILogger logger, string message, int totalSendCount) { Message = message; _logger = logger; diff --git a/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs b/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs index cc9b80d75..56877d82d 100644 --- a/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs +++ b/MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs @@ -87,13 +87,13 @@ namespace MediaBrowser.Dlna.Ssdp try { - //var ip = _networkManager.GetLocalIpAddresses().FirstOrDefault(); + var ip = _networkManager.GetLocalIpAddresses().FirstOrDefault(); - //if (ip != null) - //{ - // e.LocalIp = IPAddress.Parse(ip); - // TryCreateDevice(e); - //} + if (ip != null) + { + e.LocalIp = IPAddress.Parse(ip); + TryCreateDevice(e); + } } catch (OperationCanceledException) { @@ -140,7 +140,8 @@ namespace MediaBrowser.Dlna.Ssdp if (receivedBytes > 0) { - var args = SsdpHelper.ParseSsdpResponse(receiveBuffer, endPoint); + var args = SsdpHelper.ParseSsdpResponse(receiveBuffer); + args.EndPoint = endPoint; args.LocalIp = localIp; TryCreateDevice(args); diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs index bac920ecb..10a9575be 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs @@ -101,7 +101,7 @@ namespace MediaBrowser.Dlna.Ssdp ReloadAliveNotifier(); } - public void SendSearchMessage(IPEndPoint localIp) + public void SendSearchMessage(EndPoint localIp) { var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); @@ -121,7 +121,7 @@ namespace MediaBrowser.Dlna.Ssdp public void SendDatagram(string header, Dictionary<string, string> values, - IPEndPoint localAddress, + EndPoint localAddress, int sendCount = 1) { SendDatagram(header, values, _ssdpEndp, localAddress, sendCount); @@ -129,8 +129,8 @@ namespace MediaBrowser.Dlna.Ssdp public void SendDatagram(string header, Dictionary<string, string> values, - IPEndPoint endpoint, - IPEndPoint localAddress, + EndPoint endpoint, + EndPoint localAddress, int sendCount = 1) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); @@ -147,7 +147,7 @@ namespace MediaBrowser.Dlna.Ssdp StartQueueTimer(); } - private void RespondToSearch(IPEndPoint endpoint, string deviceType) + private void RespondToSearch(EndPoint endpoint, string deviceType) { if (_config.GetDlnaConfiguration().EnableDebugLogging) { @@ -267,7 +267,8 @@ namespace MediaBrowser.Dlna.Ssdp _logger.Debug(Encoding.ASCII.GetString(received)); } - var args = SsdpHelper.ParseSsdpResponse(received, (IPEndPoint)endpoint); + var args = SsdpHelper.ParseSsdpResponse(received); + args.EndPoint = endpoint; if (_config.GetDlnaConfiguration().EnableDebugLogging) { diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHelper.cs b/MediaBrowser.Dlna/Ssdp/SsdpHelper.cs index b666140d2..707f0b877 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpHelper.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpHelper.cs @@ -1,14 +1,13 @@ using System; using System.Collections.Generic; using System.IO; -using System.Net; using System.Text; namespace MediaBrowser.Dlna.Ssdp { public class SsdpHelper { - public static SsdpMessageEventArgs ParseSsdpResponse(byte[] data, IPEndPoint endpoint) + public static SsdpMessageEventArgs ParseSsdpResponse(byte[] data) { using (var ms = new MemoryStream(data)) { @@ -35,8 +34,7 @@ namespace MediaBrowser.Dlna.Ssdp return new SsdpMessageEventArgs { Method = method, - Headers = headers, - EndPoint = endpoint + Headers = headers }; } } diff --git a/MediaBrowser.Dlna/Ssdp/SsdpMessageEventArgs.cs b/MediaBrowser.Dlna/Ssdp/SsdpMessageEventArgs.cs index 189476830..602a5bfc1 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpMessageEventArgs.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpMessageEventArgs.cs @@ -8,7 +8,7 @@ namespace MediaBrowser.Dlna.Ssdp { public string Method { get; set; } - public IPEndPoint EndPoint { get; set; } + public EndPoint EndPoint { get; set; } public Dictionary<string, string> Headers { get; set; } diff --git a/MediaBrowser.LocalMetadata/Savers/AlbumXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/AlbumXmlSaver.cs index 05022464d..ba334da8c 100644 --- a/MediaBrowser.LocalMetadata/Savers/AlbumXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/AlbumXmlSaver.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; namespace MediaBrowser.LocalMetadata.Savers { @@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public AlbumXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -52,7 +60,7 @@ namespace MediaBrowser.LocalMetadata.Savers var xmlFilePath = GetSavePath(item); - XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }); + XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/ArtistXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/ArtistXmlSaver.cs index b932c5c7c..5b74db232 100644 --- a/MediaBrowser.LocalMetadata/Savers/ArtistXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/ArtistXmlSaver.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; namespace MediaBrowser.LocalMetadata.Savers { @@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public ArtistXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -52,7 +60,7 @@ namespace MediaBrowser.LocalMetadata.Savers var xmlFilePath = GetSavePath(item); - XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }); + XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs index db7b40c7d..8cbe69551 100644 --- a/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; namespace MediaBrowser.LocalMetadata.Savers { @@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public BoxSetXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -52,7 +60,7 @@ namespace MediaBrowser.LocalMetadata.Savers var xmlFilePath = GetSavePath(item); - XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }); + XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/ChannelXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/ChannelXmlSaver.cs index 3b7783012..b111f6d15 100644 --- a/MediaBrowser.LocalMetadata/Savers/ChannelXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/ChannelXmlSaver.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; namespace MediaBrowser.LocalMetadata.Savers { @@ -13,6 +14,13 @@ namespace MediaBrowser.LocalMetadata.Savers /// </summary> public class ChannelXmlSaver : IMetadataFileSaver { + private readonly IServerConfigurationManager _config; + + public ChannelXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -57,7 +65,7 @@ namespace MediaBrowser.LocalMetadata.Savers XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { - }); + }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs index 275ec2fe8..06c13eb8b 100644 --- a/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs @@ -1,13 +1,14 @@ -using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Persistence; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security; using System.Text; using System.Threading; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Persistence; namespace MediaBrowser.LocalMetadata.Savers { @@ -16,10 +17,12 @@ namespace MediaBrowser.LocalMetadata.Savers private readonly IItemRepository _itemRepository; private readonly CultureInfo _usCulture = new CultureInfo("en-US"); + private readonly IServerConfigurationManager _config; - public EpisodeXmlSaver(IItemRepository itemRepository) + public EpisodeXmlSaver(IItemRepository itemRepository, IServerConfigurationManager config) { _itemRepository = itemRepository; + _config = config; } /// <summary> @@ -133,7 +136,7 @@ namespace MediaBrowser.LocalMetadata.Savers "DVD_episodenumber", "DVD_season", "absolute_number" - }); + }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs index c38a33c40..7efa55420 100644 --- a/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -21,6 +22,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public FolderXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -66,7 +74,7 @@ namespace MediaBrowser.LocalMetadata.Savers var xmlFilePath = GetSavePath(item); - XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }); + XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs index 163c79ce2..e1fc3b8cc 100644 --- a/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using System.Collections.Generic; using System.IO; using System.Security; using System.Text; using System.Threading; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; namespace MediaBrowser.LocalMetadata.Savers { @@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public GameSystemXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -59,7 +67,7 @@ namespace MediaBrowser.LocalMetadata.Savers var xmlFilePath = GetSavePath(item); - XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }); + XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs index 7eeaa211f..11f6db77c 100644 --- a/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs @@ -1,12 +1,13 @@ -using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Entities; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security; using System.Text; using System.Threading; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; namespace MediaBrowser.LocalMetadata.Savers { @@ -23,6 +24,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public GameXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -91,7 +99,7 @@ namespace MediaBrowser.LocalMetadata.Savers "GameSystem", "NesBox", "NesBoxRom" - }); + }, _config); } public string GetSavePath(IHasMetadata item) diff --git a/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs index ef81790a6..40ed156bc 100644 --- a/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs @@ -1,13 +1,14 @@ -using System.Collections.Generic; -using System.IO; -using System.Security; -using System.Text; -using System.Threading; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; +using System.Collections.Generic; +using System.IO; +using System.Security; +using System.Text; +using System.Threading; namespace MediaBrowser.LocalMetadata.Savers { @@ -17,10 +18,12 @@ namespace MediaBrowser.LocalMetadata.Savers public class MovieXmlSaver : IMetadataFileSaver { private readonly IItemRepository _itemRepository; + private readonly IServerConfigurationManager _config; - public MovieXmlSaver(IItemRepository itemRepository) + public MovieXmlSaver(IItemRepository itemRepository, IServerConfigurationManager config) { _itemRepository = itemRepository; + _config = config; } public string Name @@ -112,7 +115,7 @@ namespace MediaBrowser.LocalMetadata.Savers "Artist", "Album", "TmdbCollectionName" - }); + }, _config); } public string GetSavePath(IHasMetadata item) diff --git a/MediaBrowser.LocalMetadata/Savers/PersonXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/PersonXmlSaver.cs index 2ea60f47c..835256ca7 100644 --- a/MediaBrowser.LocalMetadata/Savers/PersonXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/PersonXmlSaver.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using System.Collections.Generic; using System.IO; using System.Security; using System.Text; using System.Threading; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; namespace MediaBrowser.LocalMetadata.Savers { @@ -21,6 +22,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public PersonXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -65,7 +73,7 @@ namespace MediaBrowser.LocalMetadata.Savers XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { "PlaceOfBirth" - }); + }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs index 1541c2176..169f0b6ee 100644 --- a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs @@ -1,9 +1,10 @@ -using System.Security; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Playlists; using System.Collections.Generic; using System.IO; +using System.Security; using System.Text; using System.Threading; @@ -19,6 +20,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public PlaylistXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -70,7 +78,7 @@ namespace MediaBrowser.LocalMetadata.Savers "OwnerUserId", "PlaylistMediaType" - }); + }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/SeasonXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/SeasonXmlSaver.cs index b9908875d..610652c6b 100644 --- a/MediaBrowser.LocalMetadata/Savers/SeasonXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/SeasonXmlSaver.cs @@ -1,12 +1,13 @@ -using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security; using System.Text; using System.Threading; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; namespace MediaBrowser.LocalMetadata.Savers { @@ -20,6 +21,13 @@ namespace MediaBrowser.LocalMetadata.Savers } } + private readonly IServerConfigurationManager _config; + + public SeasonXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + /// <summary> /// Determines whether [is enabled for] [the specified item]. /// </summary> @@ -42,7 +50,7 @@ namespace MediaBrowser.LocalMetadata.Savers } private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - + /// <summary> /// Saves the specified item. /// </summary> @@ -71,7 +79,7 @@ namespace MediaBrowser.LocalMetadata.Savers XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { "SeasonNumber" - }); + }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs index 23ea52820..885dccdb6 100644 --- a/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs @@ -1,18 +1,26 @@ -using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Entities; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security; using System.Text; using System.Threading; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; namespace MediaBrowser.LocalMetadata.Savers { public class SeriesXmlSaver : IMetadataFileSaver { + private readonly IServerConfigurationManager _config; + + public SeriesXmlSaver(IServerConfigurationManager config) + { + _config = config; + } + public string Name { get @@ -38,7 +46,7 @@ namespace MediaBrowser.LocalMetadata.Savers } private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - + /// <summary> /// Saves the specified item. /// </summary> @@ -119,7 +127,7 @@ namespace MediaBrowser.LocalMetadata.Savers // Deprecated. No longer saving in this field. "AnimeSeriesIndex" - }); + }, _config); } /// <summary> diff --git a/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs b/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs index 0801b7358..93876f474 100644 --- a/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs +++ b/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs @@ -1,4 +1,11 @@ -using System; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Persistence; +using MediaBrowser.Controller.Playlists; +using MediaBrowser.Model.Entities; +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -6,12 +13,6 @@ using System.Linq; using System.Security; using System.Text; using System.Xml; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Model.Entities; namespace MediaBrowser.LocalMetadata.Savers { @@ -126,7 +127,7 @@ namespace MediaBrowser.LocalMetadata.Savers /// <param name="xml">The XML.</param> /// <param name="path">The path.</param> /// <param name="xmlTagsUsed">The XML tags used.</param> - public static void Save(StringBuilder xml, string path, List<string> xmlTagsUsed) + public static void Save(StringBuilder xml, string path, List<string> xmlTagsUsed, IServerConfigurationManager config) { if (File.Exists(path)) { @@ -165,7 +166,7 @@ namespace MediaBrowser.LocalMetadata.Savers } } - if (wasHidden) + if (wasHidden || config.Configuration.SaveMetadataHidden) { file.Refresh(); diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 7a3a7d2d0..3b8dafa8e 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -59,7 +59,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles try { // Return the original without any conversions, if possible - if (startTimeTicks == 0 && + if (startTimeTicks == 0 && !endTimeTicks.HasValue && string.Equals(inputFormat, outputFormat, StringComparison.OrdinalIgnoreCase)) { @@ -158,14 +158,14 @@ namespace MediaBrowser.MediaEncoding.Subtitles var fileInfo = await GetReadableFile(mediaSource.Path, inputFiles, mediaSource.Protocol, subtitleStream, cancellationToken).ConfigureAwait(false); - var stream = await GetSubtitleStream(fileInfo.Item1, subtitleStream.Language).ConfigureAwait(false); + var stream = await GetSubtitleStream(fileInfo.Item1, subtitleStream.Language, fileInfo.Item3).ConfigureAwait(false); return new Tuple<Stream, string>(stream, fileInfo.Item2); } - private async Task<Stream> GetSubtitleStream(string path, string language) + private async Task<Stream> GetSubtitleStream(string path, string language, bool requiresCharset) { - if (!string.IsNullOrEmpty(language)) + if (requiresCharset && !string.IsNullOrEmpty(language)) { var charset = GetSubtitleFileCharacterSet(path, language); @@ -188,7 +188,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles return File.OpenRead(path); } - private async Task<Tuple<string, string>> GetReadableFile(string mediaPath, + private async Task<Tuple<string, string, bool>> GetReadableFile(string mediaPath, string[] inputFiles, MediaProtocol protocol, MediaStream subtitleStream, @@ -225,7 +225,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles await ExtractTextSubtitle(inputFiles, protocol, subtitleStream.Index, outputCodec, outputPath, cancellationToken) .ConfigureAwait(false); - return new Tuple<string, string>(outputPath, outputFormat); + return new Tuple<string, string, bool>(outputPath, outputFormat, false); } var currentFormat = (Path.GetExtension(subtitleStream.Path) ?? subtitleStream.Codec) @@ -239,10 +239,10 @@ namespace MediaBrowser.MediaEncoding.Subtitles await ConvertTextSubtitleToSrt(subtitleStream.Path, outputPath, subtitleStream.Language, cancellationToken) .ConfigureAwait(false); - return new Tuple<string, string>(outputPath, "srt"); + return new Tuple<string, string, bool>(outputPath, "srt", false); } - return new Tuple<string, string>(subtitleStream.Path, currentFormat); + return new Tuple<string, string, bool>(subtitleStream.Path, currentFormat, false); } private async Task<SubtitleTrackInfo> GetTrackInfo(Stream stream, @@ -647,7 +647,10 @@ namespace MediaBrowser.MediaEncoding.Subtitles _logger.Info(msg); } - await SetAssFont(outputPath).ConfigureAwait(false); + if (string.Equals(outputCodec, "ass", StringComparison.OrdinalIgnoreCase)) + { + await SetAssFont(outputPath).ConfigureAwait(false); + } } /// <summary> diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 62f2a7425..c6e8adb16 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -341,6 +341,9 @@ <Compile Include="..\MediaBrowser.Model\Dto\RecommendationType.cs"> <Link>Dto\RecommendationType.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dto\StreamOptions.cs"> + <Link>Dto\StreamOptions.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Dto\StudioDto.cs"> <Link>Dto\StudioDto.cs</Link> </Compile> diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index a9d0f480c..7dec2fa38 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1265,5 +1265,32 @@ namespace MediaBrowser.Model.ApiClient /// <param name="query">The query.</param> /// <returns>Task<QueryResult<BaseItemDto>>.</returns> Task<QueryResult<BaseItemDto>> GetPlaylistItems(PlaylistItemQuery query); + + /// <summary> + /// Gets the url needed to stream an audio file + /// </summary> + /// <param name="options">The options.</param> + /// <returns>System.String.</returns> + /// <exception cref="ArgumentNullException">options</exception> + [Obsolete] + string GetAudioStreamUrl(StreamOptions options); + + /// <summary> + /// Gets the url needed to stream a video file + /// </summary> + /// <param name="options">The options.</param> + /// <returns>System.String.</returns> + /// <exception cref="ArgumentNullException">options</exception> + [Obsolete] + string GetVideoStreamUrl(VideoStreamOptions options); + + /// <summary> + /// Formulates a url for streaming video using the HLS protocol + /// </summary> + /// <param name="options">The options.</param> + /// <returns>System.String.</returns> + /// <exception cref="ArgumentNullException">options</exception> + [Obsolete] + string GetHlsVideoStreamUrl(VideoStreamOptions options); } }
\ No newline at end of file diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 0807951a7..ab618dc5a 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -160,7 +160,6 @@ namespace MediaBrowser.Model.Configuration public bool EnableAutomaticRestart { get; set; } public TvFileOrganizationOptions TvFileOrganizationOptions { get; set; } - public LiveTvOptions LiveTvOptions { get; set; } public bool EnableRealtimeMonitor { get; set; } public PathSubstitution[] PathSubstitutions { get; set; } @@ -178,7 +177,9 @@ namespace MediaBrowser.Model.Configuration public PeopleMetadataOptions PeopleMetadataOptions { get; set; } - public string[] SecureApps { get; set; } + public string[] SecureApps1 { get; set; } + + public bool SaveMetadataHidden { get; set; } /// <summary> /// Initializes a new instance of the <see cref="ServerConfiguration" /> class. @@ -205,7 +206,7 @@ namespace MediaBrowser.Model.Configuration RealtimeMonitorDelay = 30; - EnableInternetProviders = true; //initial installs will need these + EnableInternetProviders = true; PathSubstitutions = new PathSubstitution[] { }; @@ -224,14 +225,14 @@ namespace MediaBrowser.Model.Configuration PeopleMetadataOptions = new PeopleMetadataOptions(); - SecureApps = new[] + SecureApps1 = new[] { "Dashboard", - "Chrome Companion", "MBKinect", "NuVue", "Media Browser Theater", + //"Chrome Companion", //"MB-Classic" }; diff --git a/MediaBrowser.Model/Dto/StreamOptions.cs b/MediaBrowser.Model/Dto/StreamOptions.cs new file mode 100644 index 000000000..d281148ff --- /dev/null +++ b/MediaBrowser.Model/Dto/StreamOptions.cs @@ -0,0 +1,165 @@ +using System; + +namespace MediaBrowser.Model.Dto +{ + /// <summary> + /// Class StreamOptions + /// </summary> + [Obsolete] + public class StreamOptions + { + /// <summary> + /// Gets or sets the audio bit rate. + /// </summary> + /// <value>The audio bit rate.</value> + public int? AudioBitRate { get; set; } + + /// <summary> + /// Gets or sets the audio codec. + /// Omit to copy the original stream + /// </summary> + /// <value>The audio encoding format.</value> + public string AudioCodec { get; set; } + + /// <summary> + /// Gets or sets the item id. + /// </summary> + /// <value>The item id.</value> + public string ItemId { get; set; } + + /// <summary> + /// Gets or sets the max audio channels. + /// </summary> + /// <value>The max audio channels.</value> + public int? MaxAudioChannels { get; set; } + + /// <summary> + /// Gets or sets the max audio sample rate. + /// </summary> + /// <value>The max audio sample rate.</value> + public int? MaxAudioSampleRate { get; set; } + + /// <summary> + /// Gets or sets the start time ticks. + /// </summary> + /// <value>The start time ticks.</value> + public long? StartTimeTicks { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether the original media should be served statically + /// Only used with progressive streaming + /// </summary> + /// <value><c>true</c> if static; otherwise, <c>false</c>.</value> + public bool? Static { get; set; } + + /// <summary> + /// Gets or sets the output file extension. + /// </summary> + /// <value>The output file extension.</value> + public string OutputFileExtension { get; set; } + + /// <summary> + /// Gets or sets the device id. + /// </summary> + /// <value>The device id.</value> + public string DeviceId { get; set; } + } + + /// <summary> + /// Class VideoStreamOptions + /// </summary> + [Obsolete] + public class VideoStreamOptions : StreamOptions + { + /// <summary> + /// Gets or sets the video codec. + /// Omit to copy + /// </summary> + /// <value>The video codec.</value> + public string VideoCodec { get; set; } + + /// <summary> + /// Gets or sets the video bit rate. + /// </summary> + /// <value>The video bit rate.</value> + public int? VideoBitRate { get; set; } + + /// <summary> + /// Gets or sets the width. + /// </summary> + /// <value>The width.</value> + public int? Width { get; set; } + + /// <summary> + /// Gets or sets the height. + /// </summary> + /// <value>The height.</value> + public int? Height { get; set; } + + /// <summary> + /// Gets or sets the width of the max. + /// </summary> + /// <value>The width of the max.</value> + public int? MaxWidth { get; set; } + + /// <summary> + /// Gets or sets the height of the max. + /// </summary> + /// <value>The height of the max.</value> + public int? MaxHeight { get; set; } + + /// <summary> + /// Gets or sets the frame rate. + /// </summary> + /// <value>The frame rate.</value> + public double? FrameRate { get; set; } + + /// <summary> + /// Gets or sets the index of the audio stream. + /// </summary> + /// <value>The index of the audio stream.</value> + public int? AudioStreamIndex { get; set; } + + /// <summary> + /// Gets or sets the index of the video stream. + /// </summary> + /// <value>The index of the video stream.</value> + public int? VideoStreamIndex { get; set; } + + /// <summary> + /// Gets or sets the index of the subtitle stream. + /// </summary> + /// <value>The index of the subtitle stream.</value> + public int? SubtitleStreamIndex { get; set; } + + /// <summary> + /// Gets or sets the profile. + /// </summary> + /// <value>The profile.</value> + public string Profile { get; set; } + + /// <summary> + /// Gets or sets the level. + /// </summary> + /// <value>The level.</value> + public string Level { get; set; } + + /// <summary> + /// Gets or sets the baseline stream audio bit rate. + /// </summary> + /// <value>The baseline stream audio bit rate.</value> + public int? BaselineStreamAudioBitRate { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether [append baseline stream]. + /// </summary> + /// <value><c>true</c> if [append baseline stream]; otherwise, <c>false</c>.</value> + public bool AppendBaselineStream { get; set; } + + /// <summary> + /// Gets or sets the time stamp offset ms. Only used with HLS. + /// </summary> + /// <value>The time stamp offset ms.</value> + public int? TimeStampOffsetMs { get; set; } + } +} diff --git a/MediaBrowser.Model/Entities/CollectionType.cs b/MediaBrowser.Model/Entities/CollectionType.cs index a8e32ac69..f55980430 100644 --- a/MediaBrowser.Model/Entities/CollectionType.cs +++ b/MediaBrowser.Model/Entities/CollectionType.cs @@ -30,12 +30,13 @@ public const string LiveTvChannels = "LiveTvChannels"; public const string LiveTvRecordingGroups = "LiveTvRecordingGroups"; - public const string TvSeries = "TvSeries"; + public const string ViewTypeTvShowSeries = "ViewTypeTvShowSeries"; public const string TvGenres = "TvGenres"; public const string TvLatest = "TvLatest"; public const string TvNextUp = "TvNextUp"; public const string TvResume = "TvResume"; - public const string TvFavorites = "TvFavorites"; + public const string TvFavoriteSeries = "TvFavoriteSeries"; + public const string TvFavoriteEpisodes = "TvFavoriteEpisodes"; public const string MovieLatest = "MovieLatest"; public const string MovieResume = "MovieResume"; diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index a760cba05..9223db80a 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -82,6 +82,7 @@ <Compile Include="Configuration\XbmcMetadataOptions.cs" /> <Compile Include="Configuration\SubtitlePlaybackMode.cs" /> <Compile Include="Drawing\ImageOrientation.cs" /> + <Compile Include="Dto\StreamOptions.cs" /> <Compile Include="FileOrganization\AutoOrganizeOptions.cs" /> <Compile Include="FileOrganization\TvFileOrganizationOptions.cs" /> <Compile Include="Configuration\BaseApplicationConfiguration.cs" /> diff --git a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs index 0f7e6d10a..ce6694edc 100644 --- a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs +++ b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs @@ -7,12 +7,13 @@ using MediaBrowser.Model.Providers; using MediaBrowser.Providers.Genres; using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.FolderImages { - public class DefaultImageProvider : IRemoteImageProvider + public class DefaultImageProvider : IRemoteImageProvider, IHasChangeMonitor { private readonly IHttpClient _httpClient; @@ -130,5 +131,10 @@ namespace MediaBrowser.Providers.FolderImages ResourcePool = GenreImageProvider.ImageDownloadResourcePool }); } + + public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) + { + return GetSupportedImages(item).Any(i => !item.HasImage(i)); + } } } diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs index d7110c1ec..1acc1738c 100644 --- a/MediaBrowser.Providers/Manager/ImageSaver.cs +++ b/MediaBrowser.Providers/Manager/ImageSaver.cs @@ -216,6 +216,14 @@ namespace MediaBrowser.Providers.Manager { await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false); } + + if (_config.Configuration.SaveMetadataHidden) + { + file.Refresh(); + + // Add back the attribute + file.Attributes |= FileAttributes.Hidden; + } } finally { diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index f48707582..31796aeb0 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -501,8 +501,7 @@ namespace MediaBrowser.Providers.MediaInfo var downloadedLanguages = await new SubtitleDownloader(_logger, _subtitleManager) .DownloadSubtitles(video, - currentStreams, - externalSubtitleStreams, + currentStreams.Concat(externalSubtitleStreams).ToList(), subtitleOptions.SkipIfGraphicalSubtitlesPresent, subtitleOptions.SkipIfAudioTrackMatches, subtitleOptions.DownloadLanguages, diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs index 9b9883ac1..6230e7347 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs @@ -25,8 +25,7 @@ namespace MediaBrowser.Providers.MediaInfo } public async Task<List<string>> DownloadSubtitles(Video video, - List<MediaStream> internalMediaStreams, - List<MediaStream> externalSubtitleStreams, + List<MediaStream> mediaStreams, bool skipIfGraphicalSubtitlesPresent, bool skipIfAudioTrackMatches, IEnumerable<string> languages, @@ -60,7 +59,7 @@ namespace MediaBrowser.Providers.MediaInfo { try { - var downloaded = await DownloadSubtitles(video, internalMediaStreams, externalSubtitleStreams, skipIfGraphicalSubtitlesPresent, skipIfAudioTrackMatches, lang, mediaType, cancellationToken) + var downloaded = await DownloadSubtitles(video, mediaStreams, skipIfGraphicalSubtitlesPresent, skipIfAudioTrackMatches, lang, mediaType, cancellationToken) .ConfigureAwait(false); if (downloaded) @@ -78,8 +77,7 @@ namespace MediaBrowser.Providers.MediaInfo } private async Task<bool> DownloadSubtitles(Video video, - List<MediaStream> internalMediaStreams, - IEnumerable<MediaStream> externalSubtitleStreams, + List<MediaStream> mediaStreams, bool skipIfGraphicalSubtitlesPresent, bool skipIfAudioTrackMatches, string language, @@ -87,12 +85,12 @@ namespace MediaBrowser.Providers.MediaInfo CancellationToken cancellationToken) { // There's already subtitles for this language - if (externalSubtitleStreams.Any(i => string.Equals(i.Language, language, StringComparison.OrdinalIgnoreCase))) + if (mediaStreams.Any(i => i.Type == MediaStreamType.Subtitle && i.IsTextSubtitleStream && string.Equals(i.Language, language, StringComparison.OrdinalIgnoreCase))) { return false; } - var audioStreams = internalMediaStreams.Where(i => i.Type == MediaStreamType.Audio).ToList(); + var audioStreams = mediaStreams.Where(i => i.Type == MediaStreamType.Audio).ToList(); var defaultAudioStreams = audioStreams.Where(i => i.IsDefault).ToList(); // If none are marked as default, just take a guess @@ -110,7 +108,7 @@ namespace MediaBrowser.Providers.MediaInfo // There's an internal subtitle stream for this language if (skipIfGraphicalSubtitlesPresent && - internalMediaStreams.Any(i => i.Type == MediaStreamType.Subtitle && !i.IsTextSubtitleStream && string.Equals(i.Language, language, StringComparison.OrdinalIgnoreCase))) + mediaStreams.Any(i => i.Type == MediaStreamType.Subtitle && !i.IsTextSubtitleStream && string.Equals(i.Language, language, StringComparison.OrdinalIgnoreCase))) { return false; } diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs index 63df3f50d..d913bd076 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs @@ -105,14 +105,10 @@ namespace MediaBrowser.Providers.MediaInfo { var mediaStreams = video.GetMediaSources(false).First().MediaStreams; - var externalSubtitleStreams = mediaStreams.Where(i => i.Type == MediaStreamType.Subtitle && i.IsExternal).ToList(); - var currentStreams = mediaStreams.Except(externalSubtitleStreams).ToList(); - var downloadedLanguages = await new SubtitleDownloader(_logger, _subtitleManager) .DownloadSubtitles(video, - currentStreams, - externalSubtitleStreams, + mediaStreams, options.SkipIfGraphicalSubtitlesPresent, options.SkipIfAudioTrackMatches, options.DownloadLanguages, diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index dc03f14cb..c406e48b9 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs @@ -1,5 +1,4 @@ -using System.Net; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; @@ -12,6 +11,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -77,7 +77,7 @@ namespace MediaBrowser.Server.Implementations.Connect { WanIpAddress = address; - UpdateConnectInfo(); + //UpdateConnectInfo(); } private async void UpdateConnectInfo() diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs index 855b26034..1294368f1 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs @@ -59,7 +59,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security var auth = AuthorizationContext.GetAuthorizationInfo(req); if (!string.IsNullOrWhiteSpace(auth.Token) - || _config.Configuration.SecureApps.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase)) + || _config.Configuration.SecureApps1.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { if (!allowLocal || !req.IsLocal) { diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index a3e86c667..076da4352 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -861,13 +861,7 @@ namespace MediaBrowser.Server.Implementations.Library if (!fileInfo.Exists) { - Directory.CreateDirectory(path); - fileInfo = new DirectoryInfo(path); - - if (!fileInfo.Exists) - { - throw new IOException("Path not created: " + path); - } + fileInfo = Directory.CreateDirectory(path); isNew = true; } @@ -1470,20 +1464,6 @@ namespace MediaBrowser.Server.Implementations.Library return collectionTypes.Count == 1 ? collectionTypes[0] : null; } - - public IEnumerable<string> GetAllArtists() - { - return GetAllArtists(RootFolder.RecursiveChildren); - } - - public IEnumerable<string> GetAllArtists(IEnumerable<BaseItem> items) - { - return items - .OfType<Audio>() - .SelectMany(i => i.AllArtists) - .Distinct(StringComparer.OrdinalIgnoreCase); - } - public Task<UserView> GetNamedView(string name, string type, string sortName, CancellationToken cancellationToken) { return GetNamedView(name, null, type, sortName, cancellationToken); diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 2192f5f08..db810c947 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -842,26 +842,27 @@ "ViewTypeChannels": "Channels", "ViewTypeLiveTV": "Live TV", "ViewTypeLiveTvNowPlaying": "Now Airing", - "ViewTypeLatestGames": "Latest Games", - "ViewTypeRecentlyPlayedGames": "Recently Played", - "ViewTypeGameFavorites": "Favorites", - "ViewTypeGameSystems": "Game Systems", - "ViewTypeGameGenres": "Genres", - "ViewTypeTvResume": "Resume", - "ViewTypeTvNextUp": "Next Up", - "ViewTypeTvLatest": "Latest", - "ViewTypeTvSeries": "Series", - "ViewTypeTvGenres": "Genres", - "ViewTypeTvFavorites": "Favorites", - "ViewTypeMovieResume": "Resume", - "ViewTypeMovieLatest": "Latest", - "ViewTypeMovieMovies": "Movies", - "ViewTypeMovieCollections": "Collections", - "ViewTypeMovieFavorites": "Favorites", - "ViewTypeMovieGenres": "Genres", - "ViewTypeMusicLatest": "Latest", - "ViewTypeMusicAlbums": "Albums", - "ViewTypeMusicAlbumArtists": "Album Artists", + "ViewTypeLatestGames": "Latest Games", + "ViewTypeRecentlyPlayedGames": "Recently Played", + "ViewTypeGameFavorites": "Favorites", + "ViewTypeGameSystems": "Game Systems", + "ViewTypeGameGenres": "Genres", + "ViewTypeTvResume": "Resume", + "ViewTypeTvNextUp": "Next Up", + "ViewTypeTvLatest": "Latest", + "ViewTypeTvShowSeries": "Series", + "ViewTypeTvGenres": "Genres", + "ViewTypeTvFavoriteSeries": "Favorite Series", + "ViewTypeTvFavoriteEpisodes": "Favorite Episodes", + "ViewTypeMovieResume": "Resume", + "ViewTypeMovieLatest": "Latest", + "ViewTypeMovieMovies": "Movies", + "ViewTypeMovieCollections": "Collections", + "ViewTypeMovieFavorites": "Favorites", + "ViewTypeMovieGenres": "Genres", + "ViewTypeMusicLatest": "Latest", + "ViewTypeMusicAlbums": "Albums", + "ViewTypeMusicAlbumArtists": "Album Artists", "HeaderOtherDisplaySettings": "Display Settings", "HeaderMyViews": "My Views", "LabelSelectFolderGroups": "Automatically group content from the following folders into views such as Movies, Music and TV:", @@ -1143,5 +1144,10 @@ "HeaderDeveloperInfo": "Developer Info", "HeaderRevisionHistory": "Revision History", "ButtonViewWebsite": "View website", - "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account." + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", + "HeaderXmlSettings": "Xml Settings", + "HeaderXmlDocumentAttributes": "Xml Document Attributes", + "HeaderXmlDocumentAttribute": "Xml Document Attribute", + "XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every xml response.", + "OptionSaveMetadataAsHidden": "Save metadata and images as hidden files" } diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index f795eb8b3..d67404794 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -189,7 +189,7 @@ namespace MediaBrowser.XbmcMetadata.Savers stream.CopyTo(filestream); } - if (wasHidden) + if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden) { file.Refresh(); diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 894c87ec2..92ab7937b 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common.Internal</id> - <version>3.0.430</version> + <version>3.0.431</version> <title>MediaBrowser.Common.Internal</title> <authors>Luke</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.430" /> + <dependency id="MediaBrowser.Common" version="3.0.431" /> <dependency id="NLog" version="3.1.0.0" /> <dependency id="SimpleInjector" version="2.5.2" /> <dependency id="sharpcompress" version="0.10.2" /> diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index ad8ea4a5a..8a48a2f59 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>MediaBrowser.Common</id> - <version>3.0.430</version> + <version>3.0.431</version> <title>MediaBrowser.Common</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index df5f65a53..eec5cbff6 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Model.Signed</id> - <version>3.0.430</version> + <version>3.0.431</version> <title>MediaBrowser.Model - Signed Edition</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 279765be8..e087aedb8 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Server.Core</id> - <version>3.0.430</version> + <version>3.0.431</version> <title>Media Browser.Server.Core</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains core components required to build plugins for Media Browser Server.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.430" /> + <dependency id="MediaBrowser.Common" version="3.0.431" /> </dependencies> </metadata> <files> |
