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:
|
||||
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);
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -1265,5 +1265,32 @@ namespace MediaBrowser.Model.ApiClient
|
|||
/// <param name="query">The query.</param>
|
||||
/// <returns>Task<QueryResult<BaseItemDto>>.</returns>
|
||||
Task<QueryResult<BaseItemDto>> GetPlaylistItems(PlaylistItemQuery query);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the url needed to stream an audio file
|
||||
/// </summary>
|
||||
/// <param name="options">The options.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
/// <exception cref="ArgumentNullException">options</exception>
|
||||
[Obsolete]
|
||||
string GetAudioStreamUrl(StreamOptions options);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the url needed to stream a video file
|
||||
/// </summary>
|
||||
/// <param name="options">The options.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
/// <exception cref="ArgumentNullException">options</exception>
|
||||
[Obsolete]
|
||||
string GetVideoStreamUrl(VideoStreamOptions options);
|
||||
|
||||
/// <summary>
|
||||
/// Formulates a url for streaming video using the HLS protocol
|
||||
/// </summary>
|
||||
/// <param name="options">The options.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
/// <exception cref="ArgumentNullException">options</exception>
|
||||
[Obsolete]
|
||||
string GetHlsVideoStreamUrl(VideoStreamOptions options);
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
};
|
||||
|
||||
|
|
|
@ -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 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";
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -189,7 +189,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
stream.CopyTo(filestream);
|
||||
}
|
||||
|
||||
if (wasHidden)
|
||||
if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden)
|
||||
{
|
||||
file.Refresh();
|
||||
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue