mirror of https://github.com/jellyfin/jellyfin.git
fixes #914 - Add option to save metadata hidden
This commit is contained in:
parent
195391aba0
commit
58eb500956
|
@ -138,7 +138,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
case CollectionType.GameFavorites:
|
case CollectionType.GameFavorites:
|
||||||
return GetFavoriteGames(parent, user, query);
|
return GetFavoriteGames(parent, user, query);
|
||||||
|
|
||||||
case CollectionType.TvSeries:
|
case CollectionType.ViewTypeTvShowSeries:
|
||||||
return GetTvSeries(parent, user, query);
|
return GetTvSeries(parent, user, query);
|
||||||
|
|
||||||
case CollectionType.TvGenres:
|
case CollectionType.TvGenres:
|
||||||
|
@ -183,6 +183,12 @@ namespace MediaBrowser.Controller.Entities
|
||||||
case CollectionType.MusicArtists:
|
case CollectionType.MusicArtists:
|
||||||
return GetMusicArtists(parent, user, query);
|
return GetMusicArtists(parent, user, query);
|
||||||
|
|
||||||
|
case CollectionType.TvFavoriteEpisodes:
|
||||||
|
return GetFavoriteEpisodes(parent, user, query);
|
||||||
|
|
||||||
|
case CollectionType.TvFavoriteSeries:
|
||||||
|
return GetFavoriteSeries(parent, user, query);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return GetResult(GetMediaFolders(user).SelectMany(i => i.GetChildren(user, true)), query);
|
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);
|
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)
|
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);
|
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.TvResume, user, "0", parent).ConfigureAwait(false));
|
||||||
list.Add(await GetUserView(category, CollectionType.TvNextUp, user, "1", 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.TvLatest, user, "2", parent).ConfigureAwait(false));
|
||||||
list.Add(await GetUserView(category, CollectionType.TvSeries, user, "3", parent).ConfigureAwait(false));
|
list.Add(await GetUserView(category, CollectionType.ViewTypeTvShowSeries, user, "3", parent).ConfigureAwait(false));
|
||||||
//list.Add(await GetUserView(CollectionType.TvFavorites, user, "4", 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));
|
//list.Add(await GetUserView(CollectionType.TvGenres, user, "5", parent).ConfigureAwait(false));
|
||||||
|
|
||||||
return GetResult(list, query);
|
return GetResult(list, query);
|
||||||
|
|
|
@ -503,6 +503,9 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
|
|
||||||
private XmlElement CreateObjectClass(XmlDocument result, BaseItem item)
|
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);
|
var objectClass = result.CreateElement("upnp", "class", NS_UPNP);
|
||||||
|
|
||||||
if (item.IsFolder)
|
if (item.IsFolder)
|
||||||
|
@ -527,6 +530,10 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
{
|
{
|
||||||
classType = "object.container.playlistContainer";
|
classType = "object.container.playlistContainer";
|
||||||
}
|
}
|
||||||
|
else if (item is PhotoAlbum)
|
||||||
|
{
|
||||||
|
classType = "object.container.album.photoAlbum";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
objectClass.InnerText = classType ?? "object.container.storageFolder";
|
objectClass.InnerText = classType ?? "object.container.storageFolder";
|
||||||
|
@ -545,11 +552,23 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
{
|
{
|
||||||
objectClass.InnerText = "object.item.videoItem.movie";
|
objectClass.InnerText = "object.item.videoItem.movie";
|
||||||
}
|
}
|
||||||
|
else if (!_profile.RequiresPlainVideoItems && item is MusicVideo)
|
||||||
|
{
|
||||||
|
objectClass.InnerText = "object.item.videoItem.musicVideoClip";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
objectClass.InnerText = "object.item.videoItem";
|
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
|
else
|
||||||
{
|
{
|
||||||
objectClass.InnerText = "object.item";
|
objectClass.InnerText = "object.item";
|
||||||
|
|
|
@ -8,8 +8,8 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
{
|
{
|
||||||
public class Datagram
|
public class Datagram
|
||||||
{
|
{
|
||||||
public IPEndPoint ToEndPoint { get; private set; }
|
public EndPoint ToEndPoint { get; private set; }
|
||||||
public IPEndPoint FromEndPoint { get; private set; }
|
public EndPoint FromEndPoint { get; private set; }
|
||||||
public string Message { get; private set; }
|
public string Message { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -24,7 +24,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
private readonly ILogger _logger;
|
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;
|
Message = message;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
|
|
@ -87,13 +87,13 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//var ip = _networkManager.GetLocalIpAddresses().FirstOrDefault();
|
var ip = _networkManager.GetLocalIpAddresses().FirstOrDefault();
|
||||||
|
|
||||||
//if (ip != null)
|
if (ip != null)
|
||||||
//{
|
{
|
||||||
// e.LocalIp = IPAddress.Parse(ip);
|
e.LocalIp = IPAddress.Parse(ip);
|
||||||
// TryCreateDevice(e);
|
TryCreateDevice(e);
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
|
@ -140,7 +140,8 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
if (receivedBytes > 0)
|
if (receivedBytes > 0)
|
||||||
{
|
{
|
||||||
var args = SsdpHelper.ParseSsdpResponse(receiveBuffer, endPoint);
|
var args = SsdpHelper.ParseSsdpResponse(receiveBuffer);
|
||||||
|
args.EndPoint = endPoint;
|
||||||
args.LocalIp = localIp;
|
args.LocalIp = localIp;
|
||||||
|
|
||||||
TryCreateDevice(args);
|
TryCreateDevice(args);
|
||||||
|
|
|
@ -101,7 +101,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
ReloadAliveNotifier();
|
ReloadAliveNotifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendSearchMessage(IPEndPoint localIp)
|
public void SendSearchMessage(EndPoint localIp)
|
||||||
{
|
{
|
||||||
var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
public void SendDatagram(string header,
|
public void SendDatagram(string header,
|
||||||
Dictionary<string, string> values,
|
Dictionary<string, string> values,
|
||||||
IPEndPoint localAddress,
|
EndPoint localAddress,
|
||||||
int sendCount = 1)
|
int sendCount = 1)
|
||||||
{
|
{
|
||||||
SendDatagram(header, values, _ssdpEndp, localAddress, sendCount);
|
SendDatagram(header, values, _ssdpEndp, localAddress, sendCount);
|
||||||
|
@ -129,8 +129,8 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
|
|
||||||
public void SendDatagram(string header,
|
public void SendDatagram(string header,
|
||||||
Dictionary<string, string> values,
|
Dictionary<string, string> values,
|
||||||
IPEndPoint endpoint,
|
EndPoint endpoint,
|
||||||
IPEndPoint localAddress,
|
EndPoint localAddress,
|
||||||
int sendCount = 1)
|
int sendCount = 1)
|
||||||
{
|
{
|
||||||
var msg = new SsdpMessageBuilder().BuildMessage(header, values);
|
var msg = new SsdpMessageBuilder().BuildMessage(header, values);
|
||||||
|
@ -147,7 +147,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
StartQueueTimer();
|
StartQueueTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RespondToSearch(IPEndPoint endpoint, string deviceType)
|
private void RespondToSearch(EndPoint endpoint, string deviceType)
|
||||||
{
|
{
|
||||||
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +267,8 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
_logger.Debug(Encoding.ASCII.GetString(received));
|
_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)
|
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Ssdp
|
namespace MediaBrowser.Dlna.Ssdp
|
||||||
{
|
{
|
||||||
public class SsdpHelper
|
public class SsdpHelper
|
||||||
{
|
{
|
||||||
public static SsdpMessageEventArgs ParseSsdpResponse(byte[] data, IPEndPoint endpoint)
|
public static SsdpMessageEventArgs ParseSsdpResponse(byte[] data)
|
||||||
{
|
{
|
||||||
using (var ms = new MemoryStream(data))
|
using (var ms = new MemoryStream(data))
|
||||||
{
|
{
|
||||||
|
@ -35,8 +34,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
return new SsdpMessageEventArgs
|
return new SsdpMessageEventArgs
|
||||||
{
|
{
|
||||||
Method = method,
|
Method = method,
|
||||||
Headers = headers,
|
Headers = headers
|
||||||
EndPoint = endpoint
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
{
|
{
|
||||||
public string Method { get; set; }
|
public string Method { get; set; }
|
||||||
|
|
||||||
public IPEndPoint EndPoint { get; set; }
|
public EndPoint EndPoint { get; set; }
|
||||||
|
|
||||||
public Dictionary<string, string> Headers { get; set; }
|
public Dictionary<string, string> Headers { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
using System.Collections.Generic;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public AlbumXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -52,7 +60,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
var xmlFilePath = GetSavePath(item);
|
var xmlFilePath = GetSavePath(item);
|
||||||
|
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
using System.Collections.Generic;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public ArtistXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -52,7 +60,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
var xmlFilePath = GetSavePath(item);
|
var xmlFilePath = GetSavePath(item);
|
||||||
|
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
using System.Collections.Generic;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public BoxSetXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -52,7 +60,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
var xmlFilePath = GetSavePath(item);
|
var xmlFilePath = GetSavePath(item);
|
||||||
|
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
using System.Collections.Generic;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.LiveTv;
|
using MediaBrowser.Controller.LiveTv;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -13,6 +14,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ChannelXmlSaver : IMetadataFileSaver
|
public class ChannelXmlSaver : IMetadataFileSaver
|
||||||
{
|
{
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public ChannelXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -57,7 +65,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||||
{
|
{
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Persistence;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -16,10 +17,12 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
private readonly IItemRepository _itemRepository;
|
private readonly IItemRepository _itemRepository;
|
||||||
|
|
||||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
public EpisodeXmlSaver(IItemRepository itemRepository)
|
public EpisodeXmlSaver(IItemRepository itemRepository, IServerConfigurationManager config)
|
||||||
{
|
{
|
||||||
_itemRepository = itemRepository;
|
_itemRepository = itemRepository;
|
||||||
|
_config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -133,7 +136,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
"DVD_episodenumber",
|
"DVD_episodenumber",
|
||||||
"DVD_season",
|
"DVD_season",
|
||||||
"absolute_number"
|
"absolute_number"
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.Audio;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
|
@ -21,6 +22,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public FolderXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -66,7 +74,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
var xmlFilePath = GetSavePath(item);
|
var xmlFilePath = GetSavePath(item);
|
||||||
|
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public GameSystemXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -59,7 +67,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
var xmlFilePath = GetSavePath(item);
|
var xmlFilePath = GetSavePath(item);
|
||||||
|
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { }, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -23,6 +24,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public GameXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -91,7 +99,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
"GameSystem",
|
"GameSystem",
|
||||||
"NesBox",
|
"NesBox",
|
||||||
"NesBoxRom"
|
"NesBoxRom"
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetSavePath(IHasMetadata item)
|
public string GetSavePath(IHasMetadata item)
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
using System.Collections.Generic;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using System.IO;
|
|
||||||
using System.Security;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Persistence;
|
using MediaBrowser.Controller.Persistence;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Security;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -17,10 +18,12 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
public class MovieXmlSaver : IMetadataFileSaver
|
public class MovieXmlSaver : IMetadataFileSaver
|
||||||
{
|
{
|
||||||
private readonly IItemRepository _itemRepository;
|
private readonly IItemRepository _itemRepository;
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
public MovieXmlSaver(IItemRepository itemRepository)
|
public MovieXmlSaver(IItemRepository itemRepository, IServerConfigurationManager config)
|
||||||
{
|
{
|
||||||
_itemRepository = itemRepository;
|
_itemRepository = itemRepository;
|
||||||
|
_config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name
|
public string Name
|
||||||
|
@ -112,7 +115,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
"Artist",
|
"Artist",
|
||||||
"Album",
|
"Album",
|
||||||
"TmdbCollectionName"
|
"TmdbCollectionName"
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetSavePath(IHasMetadata item)
|
public string GetSavePath(IHasMetadata item)
|
||||||
|
|
|
@ -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.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -21,6 +22,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public PersonXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -65,7 +73,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||||
{
|
{
|
||||||
"PlaceOfBirth"
|
"PlaceOfBirth"
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
using System.Security;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Playlists;
|
using MediaBrowser.Controller.Playlists;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
|
@ -19,6 +20,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public PlaylistXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -70,7 +78,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
"OwnerUserId",
|
"OwnerUserId",
|
||||||
"PlaylistMediaType"
|
"PlaylistMediaType"
|
||||||
|
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -20,6 +21,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public SeasonXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether [is enabled for] [the specified item].
|
/// Determines whether [is enabled for] [the specified item].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -71,7 +79,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||||
{
|
{
|
||||||
"SeasonNumber"
|
"SeasonNumber"
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
public class SeriesXmlSaver : IMetadataFileSaver
|
public class SeriesXmlSaver : IMetadataFileSaver
|
||||||
{
|
{
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
|
public SeriesXmlSaver(IServerConfigurationManager config)
|
||||||
|
{
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
public string Name
|
public string Name
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -119,7 +127,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
|
|
||||||
// Deprecated. No longer saving in this field.
|
// Deprecated. No longer saving in this field.
|
||||||
"AnimeSeriesIndex"
|
"AnimeSeriesIndex"
|
||||||
});
|
}, _config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -6,12 +13,6 @@ using System.Linq;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
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
|
namespace MediaBrowser.LocalMetadata.Savers
|
||||||
{
|
{
|
||||||
|
@ -126,7 +127,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
/// <param name="xml">The XML.</param>
|
/// <param name="xml">The XML.</param>
|
||||||
/// <param name="path">The path.</param>
|
/// <param name="path">The path.</param>
|
||||||
/// <param name="xmlTagsUsed">The XML tags used.</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))
|
if (File.Exists(path))
|
||||||
{
|
{
|
||||||
|
@ -165,7 +166,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wasHidden)
|
if (wasHidden || config.Configuration.SaveMetadataHidden)
|
||||||
{
|
{
|
||||||
file.Refresh();
|
file.Refresh();
|
||||||
|
|
||||||
|
|
|
@ -158,14 +158,14 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||||
|
|
||||||
var fileInfo = await GetReadableFile(mediaSource.Path, inputFiles, mediaSource.Protocol, subtitleStream, cancellationToken).ConfigureAwait(false);
|
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);
|
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);
|
var charset = GetSubtitleFileCharacterSet(path, language);
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||||
return File.OpenRead(path);
|
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,
|
string[] inputFiles,
|
||||||
MediaProtocol protocol,
|
MediaProtocol protocol,
|
||||||
MediaStream subtitleStream,
|
MediaStream subtitleStream,
|
||||||
|
@ -225,7 +225,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||||
await ExtractTextSubtitle(inputFiles, protocol, subtitleStream.Index, outputCodec, outputPath, cancellationToken)
|
await ExtractTextSubtitle(inputFiles, protocol, subtitleStream.Index, outputCodec, outputPath, cancellationToken)
|
||||||
.ConfigureAwait(false);
|
.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)
|
var currentFormat = (Path.GetExtension(subtitleStream.Path) ?? subtitleStream.Codec)
|
||||||
|
@ -239,10 +239,10 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||||
await ConvertTextSubtitleToSrt(subtitleStream.Path, outputPath, subtitleStream.Language, cancellationToken)
|
await ConvertTextSubtitleToSrt(subtitleStream.Path, outputPath, subtitleStream.Language, cancellationToken)
|
||||||
.ConfigureAwait(false);
|
.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,
|
private async Task<SubtitleTrackInfo> GetTrackInfo(Stream stream,
|
||||||
|
@ -647,8 +647,11 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||||
_logger.Info(msg);
|
_logger.Info(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.Equals(outputCodec, "ass", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
await SetAssFont(outputPath).ConfigureAwait(false);
|
await SetAssFont(outputPath).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets the ass font.
|
/// Sets the ass font.
|
||||||
|
|
|
@ -341,6 +341,9 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Dto\RecommendationType.cs">
|
<Compile Include="..\MediaBrowser.Model\Dto\RecommendationType.cs">
|
||||||
<Link>Dto\RecommendationType.cs</Link>
|
<Link>Dto\RecommendationType.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dto\StreamOptions.cs">
|
||||||
|
<Link>Dto\StreamOptions.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Dto\StudioDto.cs">
|
<Compile Include="..\MediaBrowser.Model\Dto\StudioDto.cs">
|
||||||
<Link>Dto\StudioDto.cs</Link>
|
<Link>Dto\StudioDto.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -1265,5 +1265,32 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
/// <param name="query">The query.</param>
|
/// <param name="query">The query.</param>
|
||||||
/// <returns>Task<QueryResult<BaseItemDto>>.</returns>
|
/// <returns>Task<QueryResult<BaseItemDto>>.</returns>
|
||||||
Task<QueryResult<BaseItemDto>> GetPlaylistItems(PlaylistItemQuery query);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -160,7 +160,6 @@ namespace MediaBrowser.Model.Configuration
|
||||||
public bool EnableAutomaticRestart { get; set; }
|
public bool EnableAutomaticRestart { get; set; }
|
||||||
|
|
||||||
public TvFileOrganizationOptions TvFileOrganizationOptions { get; set; }
|
public TvFileOrganizationOptions TvFileOrganizationOptions { get; set; }
|
||||||
public LiveTvOptions LiveTvOptions { get; set; }
|
|
||||||
|
|
||||||
public bool EnableRealtimeMonitor { get; set; }
|
public bool EnableRealtimeMonitor { get; set; }
|
||||||
public PathSubstitution[] PathSubstitutions { get; set; }
|
public PathSubstitution[] PathSubstitutions { get; set; }
|
||||||
|
@ -178,7 +177,9 @@ namespace MediaBrowser.Model.Configuration
|
||||||
|
|
||||||
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
|
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
|
||||||
|
|
||||||
public string[] SecureApps { get; set; }
|
public string[] SecureApps1 { get; set; }
|
||||||
|
|
||||||
|
public bool SaveMetadataHidden { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
|
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
|
||||||
|
@ -205,7 +206,7 @@ namespace MediaBrowser.Model.Configuration
|
||||||
|
|
||||||
RealtimeMonitorDelay = 30;
|
RealtimeMonitorDelay = 30;
|
||||||
|
|
||||||
EnableInternetProviders = true; //initial installs will need these
|
EnableInternetProviders = true;
|
||||||
|
|
||||||
PathSubstitutions = new PathSubstitution[] { };
|
PathSubstitutions = new PathSubstitution[] { };
|
||||||
|
|
||||||
|
@ -224,14 +225,14 @@ namespace MediaBrowser.Model.Configuration
|
||||||
|
|
||||||
PeopleMetadataOptions = new PeopleMetadataOptions();
|
PeopleMetadataOptions = new PeopleMetadataOptions();
|
||||||
|
|
||||||
SecureApps = new[]
|
SecureApps1 = new[]
|
||||||
{
|
{
|
||||||
"Dashboard",
|
"Dashboard",
|
||||||
"Chrome Companion",
|
|
||||||
"MBKinect",
|
"MBKinect",
|
||||||
"NuVue",
|
"NuVue",
|
||||||
"Media Browser Theater",
|
"Media Browser Theater",
|
||||||
|
|
||||||
|
//"Chrome Companion",
|
||||||
//"MB-Classic"
|
//"MB-Classic"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,12 +30,13 @@
|
||||||
public const string LiveTvChannels = "LiveTvChannels";
|
public const string LiveTvChannels = "LiveTvChannels";
|
||||||
public const string LiveTvRecordingGroups = "LiveTvRecordingGroups";
|
public const string LiveTvRecordingGroups = "LiveTvRecordingGroups";
|
||||||
|
|
||||||
public const string TvSeries = "TvSeries";
|
public const string ViewTypeTvShowSeries = "ViewTypeTvShowSeries";
|
||||||
public const string TvGenres = "TvGenres";
|
public const string TvGenres = "TvGenres";
|
||||||
public const string TvLatest = "TvLatest";
|
public const string TvLatest = "TvLatest";
|
||||||
public const string TvNextUp = "TvNextUp";
|
public const string TvNextUp = "TvNextUp";
|
||||||
public const string TvResume = "TvResume";
|
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 MovieLatest = "MovieLatest";
|
||||||
public const string MovieResume = "MovieResume";
|
public const string MovieResume = "MovieResume";
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
<Compile Include="Configuration\XbmcMetadataOptions.cs" />
|
<Compile Include="Configuration\XbmcMetadataOptions.cs" />
|
||||||
<Compile Include="Configuration\SubtitlePlaybackMode.cs" />
|
<Compile Include="Configuration\SubtitlePlaybackMode.cs" />
|
||||||
<Compile Include="Drawing\ImageOrientation.cs" />
|
<Compile Include="Drawing\ImageOrientation.cs" />
|
||||||
|
<Compile Include="Dto\StreamOptions.cs" />
|
||||||
<Compile Include="FileOrganization\AutoOrganizeOptions.cs" />
|
<Compile Include="FileOrganization\AutoOrganizeOptions.cs" />
|
||||||
<Compile Include="FileOrganization\TvFileOrganizationOptions.cs" />
|
<Compile Include="FileOrganization\TvFileOrganizationOptions.cs" />
|
||||||
<Compile Include="Configuration\BaseApplicationConfiguration.cs" />
|
<Compile Include="Configuration\BaseApplicationConfiguration.cs" />
|
||||||
|
|
|
@ -7,12 +7,13 @@ using MediaBrowser.Model.Providers;
|
||||||
using MediaBrowser.Providers.Genres;
|
using MediaBrowser.Providers.Genres;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.Providers.FolderImages
|
namespace MediaBrowser.Providers.FolderImages
|
||||||
{
|
{
|
||||||
public class DefaultImageProvider : IRemoteImageProvider
|
public class DefaultImageProvider : IRemoteImageProvider, IHasChangeMonitor
|
||||||
{
|
{
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
|
|
||||||
|
@ -130,5 +131,10 @@ namespace MediaBrowser.Providers.FolderImages
|
||||||
ResourcePool = GenreImageProvider.ImageDownloadResourcePool
|
ResourcePool = GenreImageProvider.ImageDownloadResourcePool
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
|
||||||
|
{
|
||||||
|
return GetSupportedImages(item).Any(i => !item.HasImage(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,6 +216,14 @@ namespace MediaBrowser.Providers.Manager
|
||||||
{
|
{
|
||||||
await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
|
await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_config.Configuration.SaveMetadataHidden)
|
||||||
|
{
|
||||||
|
file.Refresh();
|
||||||
|
|
||||||
|
// Add back the attribute
|
||||||
|
file.Attributes |= FileAttributes.Hidden;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
|
@ -501,8 +501,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
var downloadedLanguages = await new SubtitleDownloader(_logger,
|
var downloadedLanguages = await new SubtitleDownloader(_logger,
|
||||||
_subtitleManager)
|
_subtitleManager)
|
||||||
.DownloadSubtitles(video,
|
.DownloadSubtitles(video,
|
||||||
currentStreams,
|
currentStreams.Concat(externalSubtitleStreams).ToList(),
|
||||||
externalSubtitleStreams,
|
|
||||||
subtitleOptions.SkipIfGraphicalSubtitlesPresent,
|
subtitleOptions.SkipIfGraphicalSubtitlesPresent,
|
||||||
subtitleOptions.SkipIfAudioTrackMatches,
|
subtitleOptions.SkipIfAudioTrackMatches,
|
||||||
subtitleOptions.DownloadLanguages,
|
subtitleOptions.DownloadLanguages,
|
||||||
|
|
|
@ -25,8 +25,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<string>> DownloadSubtitles(Video video,
|
public async Task<List<string>> DownloadSubtitles(Video video,
|
||||||
List<MediaStream> internalMediaStreams,
|
List<MediaStream> mediaStreams,
|
||||||
List<MediaStream> externalSubtitleStreams,
|
|
||||||
bool skipIfGraphicalSubtitlesPresent,
|
bool skipIfGraphicalSubtitlesPresent,
|
||||||
bool skipIfAudioTrackMatches,
|
bool skipIfAudioTrackMatches,
|
||||||
IEnumerable<string> languages,
|
IEnumerable<string> languages,
|
||||||
|
@ -60,7 +59,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
{
|
{
|
||||||
try
|
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);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
if (downloaded)
|
if (downloaded)
|
||||||
|
@ -78,8 +77,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<bool> DownloadSubtitles(Video video,
|
private async Task<bool> DownloadSubtitles(Video video,
|
||||||
List<MediaStream> internalMediaStreams,
|
List<MediaStream> mediaStreams,
|
||||||
IEnumerable<MediaStream> externalSubtitleStreams,
|
|
||||||
bool skipIfGraphicalSubtitlesPresent,
|
bool skipIfGraphicalSubtitlesPresent,
|
||||||
bool skipIfAudioTrackMatches,
|
bool skipIfAudioTrackMatches,
|
||||||
string language,
|
string language,
|
||||||
|
@ -87,12 +85,12 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// There's already subtitles for this language
|
// 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;
|
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();
|
var defaultAudioStreams = audioStreams.Where(i => i.IsDefault).ToList();
|
||||||
|
|
||||||
// If none are marked as default, just take a guess
|
// 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
|
// There's an internal subtitle stream for this language
|
||||||
if (skipIfGraphicalSubtitlesPresent &&
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,14 +105,10 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
{
|
{
|
||||||
var mediaStreams = video.GetMediaSources(false).First().MediaStreams;
|
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,
|
var downloadedLanguages = await new SubtitleDownloader(_logger,
|
||||||
_subtitleManager)
|
_subtitleManager)
|
||||||
.DownloadSubtitles(video,
|
.DownloadSubtitles(video,
|
||||||
currentStreams,
|
mediaStreams,
|
||||||
externalSubtitleStreams,
|
|
||||||
options.SkipIfGraphicalSubtitlesPresent,
|
options.SkipIfGraphicalSubtitlesPresent,
|
||||||
options.SkipIfAudioTrackMatches,
|
options.SkipIfAudioTrackMatches,
|
||||||
options.DownloadLanguages,
|
options.DownloadLanguages,
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Net;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Configuration;
|
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
@ -12,6 +11,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -77,7 +77,7 @@ namespace MediaBrowser.Server.Implementations.Connect
|
||||||
{
|
{
|
||||||
WanIpAddress = address;
|
WanIpAddress = address;
|
||||||
|
|
||||||
UpdateConnectInfo();
|
//UpdateConnectInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void UpdateConnectInfo()
|
private async void UpdateConnectInfo()
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
|
||||||
var auth = AuthorizationContext.GetAuthorizationInfo(req);
|
var auth = AuthorizationContext.GetAuthorizationInfo(req);
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(auth.Token)
|
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)
|
if (!allowLocal || !req.IsLocal)
|
||||||
{
|
{
|
||||||
|
|
|
@ -861,13 +861,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
|
|
||||||
if (!fileInfo.Exists)
|
if (!fileInfo.Exists)
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(path);
|
fileInfo = Directory.CreateDirectory(path);
|
||||||
fileInfo = new DirectoryInfo(path);
|
|
||||||
|
|
||||||
if (!fileInfo.Exists)
|
|
||||||
{
|
|
||||||
throw new IOException("Path not created: " + path);
|
|
||||||
}
|
|
||||||
|
|
||||||
isNew = true;
|
isNew = true;
|
||||||
}
|
}
|
||||||
|
@ -1470,20 +1464,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
return collectionTypes.Count == 1 ? collectionTypes[0] : null;
|
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)
|
public Task<UserView> GetNamedView(string name, string type, string sortName, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return GetNamedView(name, null, type, sortName, cancellationToken);
|
return GetNamedView(name, null, type, sortName, cancellationToken);
|
||||||
|
|
|
@ -850,9 +850,10 @@
|
||||||
"ViewTypeTvResume": "Resume",
|
"ViewTypeTvResume": "Resume",
|
||||||
"ViewTypeTvNextUp": "Next Up",
|
"ViewTypeTvNextUp": "Next Up",
|
||||||
"ViewTypeTvLatest": "Latest",
|
"ViewTypeTvLatest": "Latest",
|
||||||
"ViewTypeTvSeries": "Series",
|
"ViewTypeTvShowSeries": "Series",
|
||||||
"ViewTypeTvGenres": "Genres",
|
"ViewTypeTvGenres": "Genres",
|
||||||
"ViewTypeTvFavorites": "Favorites",
|
"ViewTypeTvFavoriteSeries": "Favorite Series",
|
||||||
|
"ViewTypeTvFavoriteEpisodes": "Favorite Episodes",
|
||||||
"ViewTypeMovieResume": "Resume",
|
"ViewTypeMovieResume": "Resume",
|
||||||
"ViewTypeMovieLatest": "Latest",
|
"ViewTypeMovieLatest": "Latest",
|
||||||
"ViewTypeMovieMovies": "Movies",
|
"ViewTypeMovieMovies": "Movies",
|
||||||
|
@ -1143,5 +1144,10 @@
|
||||||
"HeaderDeveloperInfo": "Developer Info",
|
"HeaderDeveloperInfo": "Developer Info",
|
||||||
"HeaderRevisionHistory": "Revision History",
|
"HeaderRevisionHistory": "Revision History",
|
||||||
"ButtonViewWebsite": "View website",
|
"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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
||||||
stream.CopyTo(filestream);
|
stream.CopyTo(filestream);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wasHidden)
|
if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden)
|
||||||
{
|
{
|
||||||
file.Refresh();
|
file.Refresh();
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.430</version>
|
<version>3.0.431</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<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>
|
<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>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<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="NLog" version="3.1.0.0" />
|
||||||
<dependency id="SimpleInjector" version="2.5.2" />
|
<dependency id="SimpleInjector" version="2.5.2" />
|
||||||
<dependency id="sharpcompress" version="0.10.2" />
|
<dependency id="sharpcompress" version="0.10.2" />
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.430</version>
|
<version>3.0.431</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Model.Signed</id>
|
<id>MediaBrowser.Model.Signed</id>
|
||||||
<version>3.0.430</version>
|
<version>3.0.431</version>
|
||||||
<title>MediaBrowser.Model - Signed Edition</title>
|
<title>MediaBrowser.Model - Signed Edition</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.430</version>
|
<version>3.0.431</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.430" />
|
<dependency id="MediaBrowser.Common" version="3.0.431" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
Loading…
Reference in New Issue