瀏覽代碼

update connect

Luke Pulverenti 10 年之前
父節點
當前提交
7990f9ca50

+ 6 - 0
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -1768,6 +1768,12 @@ namespace MediaBrowser.Api.Playback
                 state.InputAudioSync = "1";
             }
 
+            if (string.Equals(mediaSource.Container, "wma", StringComparison.OrdinalIgnoreCase))
+            {
+                // Seeing some stuttering when transcoding wma to audio-only HLS
+                state.InputAudioSync = "1";
+            }
+
             var mediaStreams = mediaSource.MediaStreams;
 
             if (videoRequest != null)

+ 1 - 0
MediaBrowser.Controller/LiveTv/ILiveTvItem.cs

@@ -5,5 +5,6 @@ namespace MediaBrowser.Controller.LiveTv
     public interface ILiveTvItem : IHasId
     {
         string ServiceName { get; set; }
+        string ExternalId { get; set; }
     }
 }

+ 1 - 1
MediaBrowser.Providers/Music/FanArtArtistProvider.cs

@@ -8,6 +8,7 @@ using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Providers;
+using MediaBrowser.Providers.TV;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
@@ -17,7 +18,6 @@ using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Xml;
-using MediaBrowser.Providers.TV;
 
 namespace MediaBrowser.Providers.Music
 {

+ 1 - 1
MediaBrowser.Providers/TV/FanArtTvUpdatesPostScanTask.cs

@@ -130,7 +130,7 @@ namespace MediaBrowser.Providers.TV
                 {
                     var json = await reader.ReadToEndAsync().ConfigureAwait(false);
 
-                    if (string.Equals(json, "null", StringComparison.OrdinalIgnoreCase))
+                    if (string.Equals(json, "null", StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(json))
                     {
                         return new List<string>();
                     }

+ 26 - 19
MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Configuration;
+using System.Linq;
+using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Controller.Connect;
 using MediaBrowser.Controller.Plugins;
@@ -38,34 +39,40 @@ namespace MediaBrowser.Server.Implementations.Connect
             _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromHours(3));
         }
 
+        private readonly string[] _ipLookups = { "http://bot.whatismyipaddress.com", "https://connect.mediabrowser.tv/service/ip" };
+
         private async void TimerCallback(object state)
         {
-            try
+            foreach (var ipLookupUrl in _ipLookups)
             {
-                using (var stream = await _httpClient.Get(new HttpRequestOptions
-                {
-                    Url = "http://bot.whatismyipaddress.com/"
-
-                }).ConfigureAwait(false))
+                try
                 {
-                    using (var reader = new StreamReader(stream))
+                    using (var stream = await _httpClient.Get(new HttpRequestOptions
                     {
-                        var address = await reader.ReadToEndAsync().ConfigureAwait(false);
+                        Url = ipLookupUrl
 
-                        if (IsValid(address))
+                    }).ConfigureAwait(false))
+                    {
+                        using (var reader = new StreamReader(stream))
                         {
-                            ((ConnectManager)_connectManager).OnWanAddressResolved(address);
-                            CacheAddress(address);
+                            var address = await reader.ReadToEndAsync().ConfigureAwait(false);
+
+                            if (IsValid(address))
+                            {
+                                ((ConnectManager)_connectManager).OnWanAddressResolved(address);
+                                CacheAddress(address);
+                                return;
+                            }
                         }
                     }
                 }
-            }
-            catch (HttpException)
-            {
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error getting connection info", ex);
+                catch (HttpException)
+                {
+                }
+                catch (Exception ex)
+                {
+                    _logger.ErrorException("Error getting connection info", ex);
+                }
             }
         }
 

+ 2 - 0
MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -664,6 +664,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
 
             var recording = (ILiveTvRecording)item;
 
+            recording.ExternalId = info.Id;
+
             recording.ProgramId = _tvDtoService.GetInternalProgramId(serviceName, info.ProgramId).ToString("N");
             recording.Audio = info.Audio;
             recording.ChannelType = info.ChannelType;

+ 2 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json

@@ -800,5 +800,6 @@
     "HeaderYouSaid": "You Said...",
     "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.",
     "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.",
-    "MessageNoItemsFound": "No items found."
+    "MessageNoItemsFound": "No items found.",
+    "ButtonManageServer": "Manage Server"
 }

+ 6 - 0
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -90,6 +90,9 @@
     <Content Include="dashboard-ui\css\images\clients\androidtv-tile.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="dashboard-ui\css\images\clients\chromecast.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\css\images\empty.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
@@ -123,6 +126,9 @@
     <Content Include="dashboard-ui\thirdparty\cordova\android\localassetmanager.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="dashboard-ui\thirdparty\velocity.min.js">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\voice\voice.css">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>