diff --git a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs index d4be1b2f4e..75f1579ac4 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs @@ -67,7 +67,8 @@ namespace MediaBrowser.Dlna.ContentDirectory _dlna.GetDefaultProfile(); var serverAddress = request.RequestedUrl.Substring(0, request.RequestedUrl.IndexOf("/dlna", StringComparison.OrdinalIgnoreCase)); - + string accessToken = null; + var user = GetUser(profile); return new ControlHandler( @@ -75,6 +76,7 @@ namespace MediaBrowser.Dlna.ContentDirectory _libraryManager, profile, serverAddress, + accessToken, _imageProcessor, _userDataManager, user, diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs index e480326e9b..5d6ee5c73e 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs @@ -45,7 +45,7 @@ namespace MediaBrowser.Dlna.ContentDirectory private readonly DeviceProfile _profile; - public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager) + public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, string accessToken, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager) : base(config, logger) { _libraryManager = libraryManager; @@ -55,7 +55,7 @@ namespace MediaBrowser.Dlna.ContentDirectory _channelManager = channelManager; _profile = profile; - _didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, userDataManager, localization); + _didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, accessToken, userDataManager, localization); } protected override IEnumerable> GetResult(string methodName, Headers methodParams) diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index 59dcbdecbb..af7c8dbed0 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -33,17 +33,19 @@ namespace MediaBrowser.Dlna.Didl private readonly DeviceProfile _profile; private readonly IImageProcessor _imageProcessor; private readonly string _serverAddress; + private readonly string _accessToken; private readonly User _user; private readonly IUserDataManager _userDataManager; private readonly ILocalizationManager _localization; - public DidlBuilder(DeviceProfile profile, User user, IImageProcessor imageProcessor, string serverAddress, IUserDataManager userDataManager, ILocalizationManager localization) + public DidlBuilder(DeviceProfile profile, User user, IImageProcessor imageProcessor, string serverAddress, string accessToken, IUserDataManager userDataManager, ILocalizationManager localization) { _profile = profile; _imageProcessor = imageProcessor; _serverAddress = serverAddress; _userDataManager = userDataManager; _localization = localization; + _accessToken = accessToken; _user = user; } @@ -161,7 +163,7 @@ namespace MediaBrowser.Dlna.Didl AddVideoResource(container, video, deviceId, filter, contentFeature, streamInfo); } - foreach (var subtitle in streamInfo.GetExternalSubtitles(_serverAddress, false)) + foreach (var subtitle in streamInfo.GetExternalSubtitles(_serverAddress, _accessToken, false)) { AddSubtitleElement(container, subtitle); } @@ -206,7 +208,7 @@ namespace MediaBrowser.Dlna.Didl { var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL); - var url = streamInfo.ToDlnaUrl(_serverAddress); + var url = streamInfo.ToDlnaUrl(_serverAddress, _accessToken); res.InnerText = url; @@ -351,7 +353,7 @@ namespace MediaBrowser.Dlna.Didl }); } - var url = streamInfo.ToDlnaUrl(_serverAddress); + var url = streamInfo.ToDlnaUrl(_serverAddress, _accessToken); res.InnerText = url; diff --git a/MediaBrowser.Dlna/PlayTo/PlayToController.cs b/MediaBrowser.Dlna/PlayTo/PlayToController.cs index bd2b169ad9..5746231618 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToController.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToController.cs @@ -38,6 +38,7 @@ namespace MediaBrowser.Dlna.PlayTo private readonly DeviceDiscovery _deviceDiscovery; private readonly string _serverAddress; + private readonly string _accessToken; public bool IsSessionActive { @@ -54,7 +55,7 @@ namespace MediaBrowser.Dlna.PlayTo private Timer _updateTimer; - public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, DeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization) + public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, DeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization) { _session = session; _itemRepository = itemRepository; @@ -67,6 +68,7 @@ namespace MediaBrowser.Dlna.PlayTo _deviceDiscovery = deviceDiscovery; _userDataManager = userDataManager; _localization = localization; + _accessToken = accessToken; _logger = logger; } @@ -306,18 +308,16 @@ namespace MediaBrowser.Dlna.PlayTo var playlist = new List(); var isFirst = true; - var serverAddress = GetServerAddress(); - foreach (var item in items) { if (isFirst && command.StartPositionTicks.HasValue) { - playlist.Add(CreatePlaylistItem(item, user, command.StartPositionTicks.Value, serverAddress)); + playlist.Add(CreatePlaylistItem(item, user, command.StartPositionTicks.Value)); isFirst = false; } else { - playlist.Add(CreatePlaylistItem(item, user, 0, serverAddress)); + playlist.Add(CreatePlaylistItem(item, user, 0)); } } @@ -381,7 +381,7 @@ namespace MediaBrowser.Dlna.PlayTo if (info.Item != null && !info.IsDirectStream) { var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null; - var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, info.AudioStreamIndex, info.SubtitleStreamIndex); + var newItem = CreatePlaylistItem(info.Item, user, newPosition, info.MediaSourceId, info.AudioStreamIndex, info.SubtitleStreamIndex); await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false); @@ -458,12 +458,12 @@ namespace MediaBrowser.Dlna.PlayTo } } - private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks, string serverAddress) + private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks) { - return CreatePlaylistItem(item, user, startPostionTicks, serverAddress, null, null, null); + return CreatePlaylistItem(item, user, startPostionTicks, null, null, null); } - private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks, string serverAddress, string mediaSourceId, int? audioStreamIndex, int? subtitleStreamIndex) + private PlaylistItem CreatePlaylistItem(BaseItem item, User user, long startPostionTicks, string mediaSourceId, int? audioStreamIndex, int? subtitleStreamIndex) { var deviceInfo = _device.Properties; @@ -478,9 +478,9 @@ namespace MediaBrowser.Dlna.PlayTo var playlistItem = GetPlaylistItem(item, mediaSources, profile, _session.DeviceId, mediaSourceId, audioStreamIndex, subtitleStreamIndex); playlistItem.StreamInfo.StartPositionTicks = startPostionTicks; - playlistItem.StreamUrl = playlistItem.StreamInfo.ToUrl(serverAddress); + playlistItem.StreamUrl = playlistItem.StreamInfo.ToUrl(_serverAddress, _accessToken); - var itemXml = new DidlBuilder(profile, user, _imageProcessor, serverAddress, _userDataManager, _localization) + var itemXml = new DidlBuilder(profile, user, _imageProcessor, _serverAddress, _accessToken, _userDataManager, _localization) .GetItemDidl(item, null, _session.DeviceId, new Filter(), playlistItem.StreamInfo); playlistItem.Didl = itemXml; @@ -745,7 +745,7 @@ namespace MediaBrowser.Dlna.PlayTo var newPosition = progress.PositionTicks ?? 0; var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null; - var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, newIndex, info.SubtitleStreamIndex); + var newItem = CreatePlaylistItem(info.Item, user, newPosition, info.MediaSourceId, newIndex, info.SubtitleStreamIndex); await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false); @@ -771,7 +771,7 @@ namespace MediaBrowser.Dlna.PlayTo var newPosition = progress.PositionTicks ?? 0; var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null; - var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, info.AudioStreamIndex, newIndex); + var newItem = CreatePlaylistItem(info.Item, user, newPosition, info.MediaSourceId, info.AudioStreamIndex, newIndex); await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false); diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs index 7c73406b97..9a9a976d35 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs @@ -98,6 +98,7 @@ namespace MediaBrowser.Dlna.PlayTo if (controller == null) { var serverAddress = GetServerAddress(localIp); + string accessToken = null; sessionInfo.SessionController = controller = new PlayToController(sessionInfo, _sessionManager, @@ -108,6 +109,7 @@ namespace MediaBrowser.Dlna.PlayTo _userManager, _imageProcessor, serverAddress, + accessToken, _deviceDiscovery, _userDataManager, _localization); diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index ba3065bc9d..37057f2d74 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -110,6 +110,9 @@ ApiClient\IServerEvents.cs + + ApiClient\NetworkStatus.cs + ApiClient\RemoteLogoutReason.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 8d22f25a90..f38a8f597b 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -75,6 +75,9 @@ ApiClient\IServerEvents.cs + + ApiClient\NetworkStatus.cs + ApiClient\RemoteLogoutReason.cs diff --git a/MediaBrowser.Model/ApiClient/NetworkStatus.cs b/MediaBrowser.Model/ApiClient/NetworkStatus.cs new file mode 100644 index 0000000000..715087607e --- /dev/null +++ b/MediaBrowser.Model/ApiClient/NetworkStatus.cs @@ -0,0 +1,30 @@ + +namespace MediaBrowser.Model.ApiClient +{ + public class NetworkStatus + { + /// + /// Gets or sets a value indicating whether this instance is network available. + /// + /// true if this instance is network available; otherwise, false. + public bool IsNetworkAvailable { get; set; } + /// + /// Gets or sets a value indicating whether this instance is local network available. + /// + /// null if [is local network available] contains no value, true if [is local network available]; otherwise, false. + public bool? IsLocalNetworkAvailable { get; set; } + /// + /// Gets the is any local network available. + /// + /// true if XXXX, false otherwise. + public bool GetIsAnyLocalNetworkAvailable() + { + if (!IsLocalNetworkAvailable.HasValue) + { + return IsNetworkAvailable; + } + + return IsLocalNetworkAvailable.Value; + } + } +} diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index 3c2f39b745..57a3899d4d 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -85,12 +85,12 @@ namespace MediaBrowser.Model.Dlna } } - public string ToUrl(string baseUrl) + public string ToUrl(string baseUrl, string accessToken) { - return ToDlnaUrl(baseUrl); + return ToDlnaUrl(baseUrl, accessToken); } - public string ToDlnaUrl(string baseUrl) + public string ToDlnaUrl(string baseUrl, string accessToken) { if (PlayMethod == PlayMethod.DirectPlay) { @@ -152,7 +152,47 @@ namespace MediaBrowser.Model.Dlna return string.Format("Params={0}", string.Join(";", list.ToArray())); } - public List GetExternalSubtitles(string baseUrl, bool includeSelectedTrackOnly) + public List GetExternalSubtitles(bool includeSelectedTrackOnly) + { + List list = new List(); + + // First add the selected track + if (SubtitleStreamIndex.HasValue) + { + foreach (MediaStream stream in MediaSource.MediaStreams) + { + if (stream.Type == MediaStreamType.Subtitle && stream.Index == SubtitleStreamIndex.Value) + { + SubtitleStreamInfo info = GetSubtitleStreamInfo(stream); + + if (info != null) + { + list.Add(info); + } + } + } + } + + if (!includeSelectedTrackOnly) + { + foreach (MediaStream stream in MediaSource.MediaStreams) + { + if (stream.Type == MediaStreamType.Subtitle && (!SubtitleStreamIndex.HasValue || stream.Index != SubtitleStreamIndex.Value)) + { + SubtitleStreamInfo info = GetSubtitleStreamInfo(stream); + + if (info != null) + { + list.Add(info); + } + } + } + } + + return list; + } + + public List GetExternalSubtitles(string baseUrl, string accessToken, bool includeSelectedTrackOnly) { if (string.IsNullOrEmpty(baseUrl)) { @@ -173,7 +213,12 @@ namespace MediaBrowser.Model.Dlna { if (stream.Type == MediaStreamType.Subtitle && stream.Index == SubtitleStreamIndex.Value) { - AddSubtitle(list, stream, baseUrl, startPositionTicks); + SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks); + + if (info != null) + { + list.Add(info); + } } } } @@ -184,7 +229,12 @@ namespace MediaBrowser.Model.Dlna { if (stream.Type == MediaStreamType.Subtitle && (!SubtitleStreamIndex.HasValue || stream.Index != SubtitleStreamIndex.Value)) { - AddSubtitle(list, stream, baseUrl, startPositionTicks); + SubtitleStreamInfo info = GetSubtitleStreamInfo(stream, baseUrl, accessToken, startPositionTicks); + + if (info != null) + { + list.Add(info); + } } } } @@ -192,32 +242,41 @@ namespace MediaBrowser.Model.Dlna return list; } - private void AddSubtitle(List list, MediaStream stream, string baseUrl, long startPositionTicks) + private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream, string baseUrl, string accessToken, long startPositionTicks) { - var subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, DeviceProfile); + SubtitleStreamInfo info = GetSubtitleStreamInfo(stream); - if (subtitleProfile.Method != SubtitleDeliveryMethod.External) + if (info != null) { - return; + info.Url = string.Format("{0}/Videos/{1}/{2}/Subtitles/{3}/{4}/Stream.{5}", + baseUrl, + ItemId, + MediaSourceId, + StringHelper.ToStringCultureInvariant(stream.Index), + StringHelper.ToStringCultureInvariant(startPositionTicks), + SubtitleFormat); } - string url = string.Format("{0}/Videos/{1}/{2}/Subtitles/{3}/{4}/Stream.{5}", - baseUrl, - ItemId, - MediaSourceId, - StringHelper.ToStringCultureInvariant(stream.Index), - StringHelper.ToStringCultureInvariant(startPositionTicks), - SubtitleFormat); + return info; + } + + private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream) + { + SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, DeviceProfile); + + if (subtitleProfile.Method != SubtitleDeliveryMethod.External) + { + return null; + } - list.Add(new SubtitleStreamInfo + return new SubtitleStreamInfo { - Url = url, IsForced = stream.IsForced, Language = stream.Language, Name = stream.Language ?? "Unknown", Format = SubtitleFormat, Index = stream.Index - }); + }; } /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index c8e09dd826..9fd632cbd0 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -72,6 +72,7 @@ + diff --git a/MediaBrowser.Model/Querying/EpisodeQuery.cs b/MediaBrowser.Model/Querying/EpisodeQuery.cs index e2fc3220a1..78fe943e33 100644 --- a/MediaBrowser.Model/Querying/EpisodeQuery.cs +++ b/MediaBrowser.Model/Querying/EpisodeQuery.cs @@ -3,20 +3,57 @@ namespace MediaBrowser.Model.Querying { public class EpisodeQuery { + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. public string UserId { get; set; } - + /// + /// Gets or sets the season identifier. + /// + /// The season identifier. public string SeasonId { get; set; } - + /// + /// Gets or sets the series identifier. + /// + /// The series identifier. public string SeriesId { get; set; } - + /// + /// Gets or sets a value indicating whether this instance is missing. + /// + /// null if [is missing] contains no value, true if [is missing]; otherwise, false. public bool? IsMissing { get; set; } - + /// + /// Gets or sets a value indicating whether this instance is virtual unaired. + /// + /// null if [is virtual unaired] contains no value, true if [is virtual unaired]; otherwise, false. public bool? IsVirtualUnaired { get; set; } - + /// + /// Gets or sets the season number. + /// + /// The season number. public int? SeasonNumber { get; set; } - + /// + /// Gets or sets the fields. + /// + /// The fields. public ItemFields[] Fields { get; set; } - + /// + /// Gets or sets the start index. + /// + /// The start index. + public int? StartIndex { get; set; } + /// + /// Gets or sets the limit. + /// + /// The limit. + public int? Limit { get; set; } + /// + /// Gets or sets the start item identifier. + /// + /// The start item identifier. + public string StartItemId { get; set; } + public EpisodeQuery() { Fields = new ItemFields[] { }; diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs index 10e50e497b..7415fe092f 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs @@ -210,7 +210,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization try { - _fileSystem.DeleteFile(path); + DeleteLibraryFile(path); } catch (IOException ex) { @@ -224,6 +224,15 @@ namespace MediaBrowser.Server.Implementations.FileOrganization } } + private void DeleteLibraryFile(string path) + { + var filename = Path.GetFileNameWithoutExtension(path); + + _fileSystem.DeleteFile(path); + + // Now find other files + } + private List GetOtherDuplicatePaths(string targetPath, Series series, int seasonNumber, int episodeNumber, int? endingEpisodeNumber) { var episodePaths = series.GetRecursiveChildren() @@ -281,11 +290,11 @@ namespace MediaBrowser.Server.Implementations.FileOrganization Directory.CreateDirectory(Path.GetDirectoryName(result.TargetPath)); - var copy = File.Exists(result.TargetPath); + var targetAlreadyExists = File.Exists(result.TargetPath); try { - if (copy || options.CopyOriginalFile) + if (targetAlreadyExists || options.CopyOriginalFile) { File.Copy(result.OriginalPath, result.TargetPath, true); } @@ -312,7 +321,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization _libraryMonitor.ReportFileSystemChangeComplete(result.TargetPath, true); } - if (copy && !options.CopyOriginalFile) + if (targetAlreadyExists && !options.CopyOriginalFile) { try { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index a254d862cb..139d752fa5 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -483,7 +483,7 @@ namespace MediaBrowser.Server.Implementations.Sync // No sense creating external subs if we're already burning one into the video var externalSubs = streamInfo.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode ? new List() : - streamInfo.GetExternalSubtitles("dummy", false); + streamInfo.GetExternalSubtitles(false); // Mark as requiring conversion if transcoding the video, or if any subtitles need to be extracted var requiresVideoTranscoding = streamInfo.PlayMethod == PlayMethod.Transcode && job.Quality != SyncQuality.Original; diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs index 8bf0050219..92258bd075 100644 --- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs +++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs @@ -285,6 +285,9 @@ namespace MediaBrowser.WebDashboard.Api "thirdparty/apiclient/network.js", "thirdparty/apiclient/device.js", "thirdparty/apiclient/credentials.js", + "thirdparty/apiclient/ajax.js", + "thirdparty/apiclient/events.js", + "thirdparty/apiclient/deferred.js", "thirdparty/apiclient/mediabrowser.apiclient.js", "thirdparty/apiclient/connectservice.js", "thirdparty/apiclient/connectionmanager.js" diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index b3ee9b8814..1b0eb7120d 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -156,12 +156,24 @@ PreserveNewest + + PreserveNewest + PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index ac6db07dc2..8d1ffe32fa 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.568 + 3.0.571 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index bf09caecca..4fc02c0007 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.568 + 3.0.571 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index eafd3c6aa1..b2bbdb8d25 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.568 + 3.0.571 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 57ce825a0d..1c58f100a1 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.568 + 3.0.571 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - +