fixes #914 - Add option to save metadata hidden

This commit is contained in:
Luke Pulverenti 2014-09-06 00:21:23 -04:00
parent 195391aba0
commit 58eb500956
42 changed files with 511 additions and 182 deletions

View File

@ -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);

View File

@ -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";

View File

@ -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;

View File

@ -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);

View File

@ -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)
{

View File

@ -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
};
}
}

View File

@ -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; }

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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)

View File

@ -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)

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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();

View File

@ -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>

View File

@ -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>

View File

@ -1265,5 +1265,32 @@ namespace MediaBrowser.Model.ApiClient
/// <param name="query">The query.</param>
/// <returns>Task&lt;QueryResult&lt;BaseItemDto&gt;&gt;.</returns>
Task<QueryResult<BaseItemDto>> GetPlaylistItems(PlaylistItemQuery query);
/// <summary>
/// Gets the url needed to stream an audio file
/// </summary>
/// <param name="options">The options.</param>
/// <returns>System.String.</returns>
/// <exception cref="ArgumentNullException">options</exception>
[Obsolete]
string GetAudioStreamUrl(StreamOptions options);
/// <summary>
/// Gets the url needed to stream a video file
/// </summary>
/// <param name="options">The options.</param>
/// <returns>System.String.</returns>
/// <exception cref="ArgumentNullException">options</exception>
[Obsolete]
string GetVideoStreamUrl(VideoStreamOptions options);
/// <summary>
/// Formulates a url for streaming video using the HLS protocol
/// </summary>
/// <param name="options">The options.</param>
/// <returns>System.String.</returns>
/// <exception cref="ArgumentNullException">options</exception>
[Obsolete]
string GetHlsVideoStreamUrl(VideoStreamOptions options);
}
}

View File

@ -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"
};

View File

@ -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; }
}
}

View File

@ -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";

View File

@ -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" />

View File

@ -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));
}
}
}

View File

@ -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
{

View File

@ -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,

View File

@ -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;
}

View File

@ -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,

View File

@ -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()

View File

@ -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)
{

View File

@ -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);

View File

@ -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"
}

View File

@ -189,7 +189,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
stream.CopyTo(filestream);
}
if (wasHidden)
if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden)
{
file.Refresh();

View File

@ -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" />

View File

@ -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>

View File

@ -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>

View File

@ -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>