From 0a62c66685b08c48300d558e2d4a896aff42f8eb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 8 May 2015 23:48:43 -0400 Subject: [PATCH 1/3] add requirejs --- .../BaseProgressiveStreamingService.cs | 17 ++++++++++++----- MediaBrowser.WebDashboard/Api/PackageCreator.cs | 15 ++++----------- .../MediaBrowser.WebDashboard.csproj | 6 ++++++ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index 835f3357eb..041b4ea41d 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.IO; +using System.Globalization; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Devices; @@ -287,7 +288,9 @@ namespace MediaBrowser.Api.Playback.Progressive var contentType = state.GetMimeType(outputPath); - var contentLength = state.EstimateContentLength ? GetEstimatedContentLength(state) : null; + // TODO: The isHeadRequest is only here because ServiceStack will add Content-Length=0 to the response + // What we really want to do is hunt that down and remove that + var contentLength = state.EstimateContentLength || isHeadRequest ? GetEstimatedContentLength(state) : null; if (contentLength.HasValue) { @@ -299,10 +302,14 @@ namespace MediaBrowser.Api.Playback.Progressive { var streamResult = ResultFactory.GetResult(new byte[] { }, contentType, responseHeaders); - if (!contentLength.HasValue) + var hasOptions = streamResult as IHasOptions; + if (hasOptions != null) { - var hasOptions = streamResult as IHasOptions; - if (hasOptions != null) + if (contentLength.HasValue) + { + hasOptions.Options["Content-Length"] = contentLength.Value.ToString(CultureInfo.InvariantCulture); + } + else { if (hasOptions.Options.ContainsKey("Content-Length")) { diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs index 89ae4a9b61..5c6228193e 100644 --- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs +++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs @@ -220,9 +220,7 @@ namespace MediaBrowser.WebDashboard.Api var files = new[] { "thirdparty/jquerymobile-1.4.5/jquery.mobile-1.4.5.min.css", - "thirdparty/swipebox-master/css/swipebox.min.css" + versionString, "thirdparty/fontawesome/css/font-awesome.min.css" + versionString, - "thirdparty/jstree3.0.8/themes/default/style.min.css", "css/all.css" + versionString }; @@ -245,8 +243,7 @@ namespace MediaBrowser.WebDashboard.Api var files = new List { - "scripts/all.js" + versionString, - "thirdparty/swipebox-master/js/jquery.swipebox.min.js" + versionString + "scripts/all.js" + versionString }; if (string.Equals(mode, "cordova", StringComparison.OrdinalIgnoreCase)) @@ -274,16 +271,12 @@ namespace MediaBrowser.WebDashboard.Api await AppendResource(memoryStream, "thirdparty/jquery-2.1.1.min.js", newLineBytes).ConfigureAwait(false); await AppendResource(memoryStream, "thirdparty/jquerymobile-1.4.5/jquery.mobile-1.4.5.min.js", newLineBytes).ConfigureAwait(false); - await AppendResource(memoryStream, "thirdparty/jquery.unveil-custom.js", newLineBytes).ConfigureAwait(false); - - await AppendResource(memoryStream, "thirdparty/cast_sender.js", newLineBytes).ConfigureAwait(false); await AppendResource(memoryStream, "thirdparty/browser.js", newLineBytes).ConfigureAwait(false); - await AppendResource(memoryStream, "thirdparty/jstree3.0.8/jstree.js", newLineBytes).ConfigureAwait(false); + await AppendResource(memoryStream, "thirdparty/require.js", newLineBytes).ConfigureAwait(false); + + await AppendResource(memoryStream, "thirdparty/jquery.unveil-custom.js", newLineBytes).ConfigureAwait(false); - await AppendResource(memoryStream, "thirdparty/fastclick.js", newLineBytes).ConfigureAwait(false); - await AppendResource(memoryStream, "thirdparty/headroom.js", newLineBytes).ConfigureAwait(false); - await AppendLocalization(memoryStream, culture).ConfigureAwait(false); await memoryStream.WriteAsync(newLineBytes, 0, newLineBytes.Length).ConfigureAwait(false); diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 3d6d2c8d91..ce2e2d4229 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -1665,6 +1665,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest From 1e7b3af9c2087ac7854aa33d7f4f5aca299aba53 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 10 May 2015 00:29:04 -0400 Subject: [PATCH 2/3] update naming project --- MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs | 1 + MediaBrowser.Dlna/Ssdp/SsdpHandler.cs | 69 +++++++++++++++++-- .../Probing/ProbeResultNormalizer.cs | 6 +- MediaBrowser.Model/Dlna/DeviceProfile.cs | 1 + .../MediaInfo/FFProbeAudioInfo.cs | 2 +- .../Channels/ChannelDownloadScheduledTask.cs | 1 - ...MediaBrowser.Server.Implementations.csproj | 5 +- .../packages.config | 2 +- SharedVersion.cs | 4 +- 9 files changed, 76 insertions(+), 15 deletions(-) diff --git a/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs b/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs index ab8d5ea72f..a26c439113 100644 --- a/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs +++ b/MediaBrowser.Dlna/Profiles/WdtvLiveProfile.cs @@ -11,6 +11,7 @@ namespace MediaBrowser.Dlna.Profiles Name = "WDTV Live"; TimelineOffsetSeconds = 5; + IgnoreTranscodeByteRangeRequests = true; Identification = new DeviceIdentification { diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs index 28ea5ad6c9..19c567a33e 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs @@ -118,10 +118,7 @@ namespace MediaBrowser.Dlna.Ssdp public void Start() { - _socket = CreateMulticastSocket(); - - _logger.Info("SSDP service started"); - Receive(); + RestartSocketListener(); ReloadAliveNotifier(); } @@ -289,6 +286,56 @@ namespace MediaBrowser.Dlna.Ssdp } } + private void RestartSocketListener() + { + if (_isDisposed) + { + StopSocketRetryTimer(); + return; + } + + try + { + _socket = CreateMulticastSocket(); + + _logger.Info("MultiCast socket created"); + + StopSocketRetryTimer(); + + Receive(); + } + catch (Exception ex) + { + _logger.ErrorException("Error creating MultiCast socket", ex); + //StartSocketRetryTimer(); + } + } + + private Timer _socketRetryTimer; + private readonly object _socketRetryLock = new object(); + private void StartSocketRetryTimer() + { + lock (_socketRetryLock) + { + if (_socketRetryTimer == null) + { + _socketRetryTimer = new Timer(s => RestartSocketListener(), null, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30)); + } + } + } + + private void StopSocketRetryTimer() + { + lock (_socketRetryLock) + { + if (_socketRetryTimer != null) + { + _socketRetryTimer.Dispose(); + _socketRetryTimer = null; + } + } + } + private void Receive() { try @@ -297,10 +344,15 @@ namespace MediaBrowser.Dlna.Ssdp EndPoint endpoint = new IPEndPoint(IPAddress.Any, SSDPPort); - _socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref endpoint, ReceiveCallback, buffer); + _socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref endpoint, ReceiveCallback, + buffer); } catch (ObjectDisposedException) { + if (!_isDisposed) + { + //StartSocketRetryTimer(); + } } catch (Exception ex) { @@ -348,6 +400,13 @@ namespace MediaBrowser.Dlna.Ssdp OnMessageReceived(args); } + catch (ObjectDisposedException) + { + if (!_isDisposed) + { + //StartSocketRetryTimer(); + } + } catch (Exception ex) { _logger.ErrorException("Failed to read SSDP message", ex); diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 2cd855e966..4c34b5a95a 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -38,7 +38,7 @@ namespace MediaBrowser.MediaEncoding.Probing var internalStreams = data.streams ?? new MediaStreamInfo[] { }; - info.MediaStreams = internalStreams.Select(s => GetMediaStream(s, data.format)) + info.MediaStreams = internalStreams.Select(s => GetMediaStream(isAudio, s, data.format)) .Where(i => i != null) .ToList(); @@ -94,7 +94,7 @@ namespace MediaBrowser.MediaEncoding.Probing /// The stream info. /// The format info. /// MediaStream. - private MediaStream GetMediaStream(MediaStreamInfo streamInfo, MediaFormatInfo formatInfo) + private MediaStream GetMediaStream(bool isAudio, MediaStreamInfo streamInfo, MediaFormatInfo formatInfo) { var stream = new MediaStream { @@ -129,7 +129,7 @@ namespace MediaBrowser.MediaEncoding.Probing } else if (string.Equals(streamInfo.codec_type, "video", StringComparison.OrdinalIgnoreCase)) { - stream.Type = (streamInfo.codec_name ?? string.Empty).IndexOf("mjpeg", StringComparison.OrdinalIgnoreCase) != -1 + stream.Type = isAudio ? MediaStreamType.EmbeddedImage : MediaStreamType.Video; diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 752b4d1798..2b0df9778c 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -76,6 +76,7 @@ namespace MediaBrowser.Model.Dlna public bool RequiresPlainFolders { get; set; } public bool EnableMSMediaReceiverRegistrar { get; set; } + public bool IgnoreTranscodeByteRangeRequests { get; set; } public XmlAttribute[] XmlRootAttributes { get; set; } diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs index d78f1b48e6..33f35450df 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs @@ -52,7 +52,7 @@ namespace MediaBrowser.Providers.MediaInfo return ItemUpdateType.MetadataImport; } - private const string SchemaVersion = "2"; + private const string SchemaVersion = "3"; private async Task GetMediaInfo(BaseItem item, CancellationToken cancellationToken) { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs index 6514893477..18711c61e2 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs @@ -17,7 +17,6 @@ using MediaBrowser.Model.Querying; using MoreLinq; using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using System.Threading; diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 4fb0569965..e7372ce377 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -48,8 +48,9 @@ ..\packages\Interfaces.IO.1.0.0.5\lib\portable-net45+sl4+wp71+win8+wpa81\Interfaces.IO.dll - - ..\packages\MediaBrowser.Naming.1.0.0.35\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll + + False + ..\packages\MediaBrowser.Naming.1.0.0.36\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll False diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index 0b81c1866d..fa7511143d 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,7 +1,7 @@  - + diff --git a/SharedVersion.cs b/SharedVersion.cs index 3f171bdf8e..ce554da96d 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; -//[assembly: AssemblyVersion("3.0.*")] -[assembly: AssemblyVersion("3.0.5607.0")] +[assembly: AssemblyVersion("3.0.*")] +//[assembly: AssemblyVersion("3.0.5607.0")] From 3d574df6f0410036a417c66ff9df24e91e668aa3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 10 May 2015 09:06:12 -0400 Subject: [PATCH 3/3] 3.0.5607.1 --- .../Photos/PhotoAlbumImageProvider.cs | 39 +++++++++++++------ SharedVersion.cs | 4 +- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs index f04c0bf770..b5ecc94a29 100644 --- a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs @@ -1,27 +1,44 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Photos { - //public class PhotoAlbumImageProvider : BaseDynamicImageProvider + //public class PhotoAlbumImageProvider : IDynamicImageProvider //{ - // public PhotoAlbumImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) - // : base(fileSystem, providerManager, applicationPaths, imageProcessor) + // public IEnumerable GetSupportedImages(IHasImages item) // { + // return new List { ImageType.Primary }; // } - // protected override Task> GetItemsWithImages(IHasImages item) + // public Task GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) // { - // var photoAlbum = (PhotoAlbum)item; - // var items = GetFinalItems(photoAlbum.Children.ToList()); + // var album = (PhotoAlbum)item; - // return Task.FromResult(items); + // var image = album.Children + // .OfType() + // .Select(i => i.GetImagePath(type)) + // .FirstOrDefault(i => !string.IsNullOrEmpty(i)); + + // return Task.FromResult(new DynamicImageResponse + // { + // Path = image, + // HasImage = !string.IsNullOrEmpty(image) + // }); + // } + + // public string Name + // { + // get { return "Image Extractor"; } + // } + + // public bool Supports(IHasImages item) + // { + // return item is PhotoAlbum; // } //} } diff --git a/SharedVersion.cs b/SharedVersion.cs index ce554da96d..e4ebaa224e 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.0.*")] -//[assembly: AssemblyVersion("3.0.5607.0")] +//[assembly: AssemblyVersion("3.0.*")] +[assembly: AssemblyVersion("3.0.5607.1")]