aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs27
-rw-r--r--MediaBrowser.Dlna/Didl/DidlBuilder.cs19
-rw-r--r--MediaBrowser.Dlna/Ssdp/Datagram.cs6
-rw-r--r--MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs15
-rw-r--r--MediaBrowser.Dlna/Ssdp/SsdpHandler.cs13
-rw-r--r--MediaBrowser.Dlna/Ssdp/SsdpHelper.cs6
-rw-r--r--MediaBrowser.Dlna/Ssdp/SsdpMessageEventArgs.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Savers/AlbumXmlSaver.cs18
-rw-r--r--MediaBrowser.LocalMetadata/Savers/ArtistXmlSaver.cs18
-rw-r--r--MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs18
-rw-r--r--MediaBrowser.LocalMetadata/Savers/ChannelXmlSaver.cs18
-rw-r--r--MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs17
-rw-r--r--MediaBrowser.LocalMetadata/Savers/FolderXmlSaver.cs12
-rw-r--r--MediaBrowser.LocalMetadata/Savers/GameSystemXmlSaver.cs16
-rw-r--r--MediaBrowser.LocalMetadata/Savers/GameXmlSaver.cs18
-rw-r--r--MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs17
-rw-r--r--MediaBrowser.LocalMetadata/Savers/PersonXmlSaver.cs16
-rw-r--r--MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs12
-rw-r--r--MediaBrowser.LocalMetadata/Savers/SeasonXmlSaver.cs20
-rw-r--r--MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs22
-rw-r--r--MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs19
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs21
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj3
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs27
-rw-r--r--MediaBrowser.Model/Configuration/ServerConfiguration.cs11
-rw-r--r--MediaBrowser.Model/Dto/StreamOptions.cs165
-rw-r--r--MediaBrowser.Model/Entities/CollectionType.cs5
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj1
-rw-r--r--MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs8
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs3
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs14
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs6
-rw-r--r--MediaBrowser.Server.Implementations/Connect/ConnectManager.cs6
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs22
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/server.json48
-rw-r--r--MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs2
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
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&lt;QueryResult&lt;BaseItemDto&gt;&gt;.</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>