Преглед изворни кода

handle HDHR's with older firmware

Luke Pulverenti пре 9 година
родитељ
комит
9fdc9faba2

+ 43 - 16
MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -17,6 +17,7 @@ using System.Threading.Tasks;
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Net;
 
 
 namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 {
 {
@@ -106,18 +107,31 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 
 
         private async Task<string> GetModelInfo(TunerHostInfo info, CancellationToken cancellationToken)
         private async Task<string> GetModelInfo(TunerHostInfo info, CancellationToken cancellationToken)
         {
         {
-            using (var stream = await _httpClient.Get(new HttpRequestOptions()
+            try
             {
             {
-                Url = string.Format("{0}/discover.json", GetApiUrl(info, false)),
-                CancellationToken = cancellationToken,
-                CacheLength = TimeSpan.FromDays(1),
-                CacheMode = CacheMode.Unconditional,
-                TimeoutMs = Convert.ToInt32(TimeSpan.FromSeconds(5).TotalMilliseconds)
-            }))
+                using (var stream = await _httpClient.Get(new HttpRequestOptions()
+                {
+                    Url = string.Format("{0}/discover.json", GetApiUrl(info, false)),
+                    CancellationToken = cancellationToken,
+                    CacheLength = TimeSpan.FromDays(1),
+                    CacheMode = CacheMode.Unconditional,
+                    TimeoutMs = Convert.ToInt32(TimeSpan.FromSeconds(5).TotalMilliseconds)
+                }))
+                {
+                    var response = JsonSerializer.DeserializeFromStream<DiscoverResponse>(stream);
+
+                    return response.ModelNumber;
+                }
+            }
+            catch (HttpException ex)
             {
             {
-                var response = JsonSerializer.DeserializeFromStream<DiscoverResponse>(stream);
+                if (ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound)
+                {
+                    // HDHR4 doesn't have this api
+                    return "HDHR";
+                }
 
 
-                return response.ModelNumber;
+                throw;
             }
             }
         }
         }
 
 
@@ -455,16 +469,29 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
                 return;
                 return;
             }
             }
 
 
-            // Test it by pulling down the lineup
-            using (var stream = await _httpClient.Get(new HttpRequestOptions
+            try
             {
             {
-                Url = string.Format("{0}/discover.json", GetApiUrl(info, false)),
-                CancellationToken = CancellationToken.None
-            }))
+                // Test it by pulling down the lineup
+                using (var stream = await _httpClient.Get(new HttpRequestOptions
+                {
+                    Url = string.Format("{0}/discover.json", GetApiUrl(info, false)),
+                    CancellationToken = CancellationToken.None
+                }))
+                {
+                    var response = JsonSerializer.DeserializeFromStream<DiscoverResponse>(stream);
+
+                    info.DeviceId = response.DeviceID;
+                }
+            }
+            catch (HttpException ex)
             {
             {
-                var response = JsonSerializer.DeserializeFromStream<DiscoverResponse>(stream);
+                if (ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.NotFound)
+                {
+                    // HDHR4 doesn't have this api
+                    return;
+                }
 
 
-                info.DeviceId = response.DeviceID;
+                throw;
             }
             }
         }
         }