aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-07-21 00:22:46 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-07-21 00:22:46 -0400
commit9457ff7ce87e4752a7f51381b309604ee08f030e (patch)
tree96aeb98304c3d9080cdbb1820ca832c9c96cad4f
parent20b990dc9a01f00e561181ad48ae73d62bcb2427 (diff)
completed tuner hosts
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs49
-rw-r--r--MediaBrowser.Controller/LiveTv/IListingsProvider.cs7
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvServiceStatusInfo.cs8
-rw-r--r--MediaBrowser.Model/LiveTv/LiveTvOptions.cs1
-rw-r--r--MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs5
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs4
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs16
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs1
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun.cs29
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json3
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/server.json9
-rw-r--r--MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj1
12 files changed, 123 insertions, 10 deletions
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index c474642d5..49ba001ce 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Dto;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Net;
@@ -330,15 +331,31 @@ namespace MediaBrowser.Api.LiveTv
public string UserId { get; set; }
}
+ [Route("/LiveTv/TunerHosts", "POST", Summary = "Adds a tuner host")]
+ [Authenticated]
+ public class AddTunerHost : TunerHostInfo, IReturnVoid
+ {
+ }
+
+ [Route("/LiveTv/TunerHosts", "DELETE", Summary = "Deletes a tuner host")]
+ [Authenticated]
+ public class DeleteTunerHost : IReturnVoid
+ {
+ [ApiMember(Name = "Id", Description = "Tuner host id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "DELETE")]
+ public string Id { get; set; }
+ }
+
public class LiveTvService : BaseApiService
{
private readonly ILiveTvManager _liveTvManager;
private readonly IUserManager _userManager;
+ private readonly IConfigurationManager _config;
- public LiveTvService(ILiveTvManager liveTvManager, IUserManager userManager)
+ public LiveTvService(ILiveTvManager liveTvManager, IUserManager userManager, IConfigurationManager config)
{
_liveTvManager = liveTvManager;
_userManager = userManager;
+ _config = config;
}
private void AssertUserCanManageLiveTv()
@@ -356,6 +373,34 @@ namespace MediaBrowser.Api.LiveTv
}
}
+ public void Post(AddTunerHost request)
+ {
+ var config = GetConfiguration();
+
+ config.TunerHosts.Add(new TunerHostInfo
+ {
+ Id = Guid.NewGuid().ToString("N"),
+ Url = request.Url,
+ Type = request.Type
+ });
+
+ _config.SaveConfiguration("livetv", config);
+ }
+
+ public void Delete(DeleteTunerHost request)
+ {
+ var config = GetConfiguration();
+
+ config.TunerHosts = config.TunerHosts.Where(i => !string.Equals(request.Id, i.Id, StringComparison.OrdinalIgnoreCase)).ToList();
+
+ _config.SaveConfiguration("livetv", config);
+ }
+
+ private LiveTvOptions GetConfiguration()
+ {
+ return _config.GetConfiguration<LiveTvOptions>("livetv");
+ }
+
public async Task<object> Get(GetLiveTvInfo request)
{
var info = await _liveTvManager.GetLiveTvInfo(CancellationToken.None).ConfigureAwait(false);
diff --git a/MediaBrowser.Controller/LiveTv/IListingsProvider.cs b/MediaBrowser.Controller/LiveTv/IListingsProvider.cs
index 2cef455e8..75ca7e0dc 100644
--- a/MediaBrowser.Controller/LiveTv/IListingsProvider.cs
+++ b/MediaBrowser.Controller/LiveTv/IListingsProvider.cs
@@ -1,7 +1,12 @@
-
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
namespace MediaBrowser.Controller.LiveTv
{
public interface IListingsProvider
{
+ Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ChannelInfo channel, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
}
}
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvServiceStatusInfo.cs b/MediaBrowser.Controller/LiveTv/LiveTvServiceStatusInfo.cs
index 0cb064aba..4da238acf 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvServiceStatusInfo.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvServiceStatusInfo.cs
@@ -34,10 +34,16 @@ namespace MediaBrowser.Controller.LiveTv
/// </summary>
/// <value>The tuners.</value>
public List<LiveTvTunerInfo> Tuners { get; set; }
-
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is visible.
+ /// </summary>
+ /// <value><c>true</c> if this instance is visible; otherwise, <c>false</c>.</value>
+ public bool IsVisible { get; set; }
+
public LiveTvServiceStatusInfo()
{
Tuners = new List<LiveTvTunerInfo>();
+ IsVisible = true;
}
}
}
diff --git a/MediaBrowser.Model/LiveTv/LiveTvOptions.cs b/MediaBrowser.Model/LiveTv/LiveTvOptions.cs
index 303b12af7..2ca7397c1 100644
--- a/MediaBrowser.Model/LiveTv/LiveTvOptions.cs
+++ b/MediaBrowser.Model/LiveTv/LiveTvOptions.cs
@@ -18,6 +18,7 @@ namespace MediaBrowser.Model.LiveTv
public class TunerHostInfo
{
+ public string Id { get; set; }
public string Url { get; set; }
public string Type { get; set; }
}
diff --git a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs
index 264870ffb..25d3b289f 100644
--- a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs
+++ b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs
@@ -42,6 +42,11 @@ namespace MediaBrowser.Model.LiveTv
/// </summary>
/// <value><c>true</c> if this instance has update available; otherwise, <c>false</c>.</value>
public bool HasUpdateAvailable { get; set; }
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is visible.
+ /// </summary>
+ /// <value><c>true</c> if this instance is visible; otherwise, <c>false</c>.</value>
+ public bool IsVisible { get; set; }
public List<LiveTvTunerInfoDto> Tuners { get; set; }
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index d0a271260..b71d62f43 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -20,6 +20,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{
public class EmbyTV : ILiveTvService, IDisposable
{
+ private readonly IApplicationHost _appHpst;
private readonly ILogger _logger;
private readonly IHttpClient _httpClient;
private readonly IConfigurationManager _config;
@@ -32,6 +33,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
public EmbyTV(IApplicationHost appHost, ILogger logger, IJsonSerializer jsonSerializer, IHttpClient httpClient, IConfigurationManager config)
{
+ _appHpst = appHost;
_logger = logger;
_httpClient = httpClient;
_config = config;
@@ -90,6 +92,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
status.Tuners = list;
status.Status = LiveTvServiceStatus.Ok;
+ status.Version = _appHpst.ApplicationVersion.ToString();
+ status.IsVisible = false;
return status;
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
new file mode 100644
index 000000000..7070c5a5f
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
@@ -0,0 +1,16 @@
+using MediaBrowser.Controller.LiveTv;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings
+{
+ public class SchedulesDirect : IListingsProvider
+ {
+ public Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ChannelInfo channel, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 80ec2a036..05bc276b8 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -2057,6 +2057,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
info.Version = statusInfo.Version;
info.HasUpdateAvailable = statusInfo.HasUpdateAvailable;
info.HomePageUrl = service.HomePageUrl;
+ info.IsVisible = statusInfo.IsVisible;
info.Tuners = statusInfo.Tuners.Select(i =>
{
diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun.cs
index cadbe7bc3..b5b588682 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Common.Net;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo;
@@ -14,6 +15,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Server.Implementations.LiveTv.EmbyTV;
namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
{
@@ -70,12 +72,31 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
public async Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken)
{
- var httpOptions = new HttpRequestOptions()
+ string model = null;
+
+ using (var stream = await _httpClient.Get(new HttpRequestOptions()
+ {
+ Url = string.Format("{0}/", GetApiUrl(info)),
+ CancellationToken = cancellationToken
+ }))
+ {
+ using (var sr = new StreamReader(stream, System.Text.Encoding.UTF8))
+ {
+ while (!sr.EndOfStream)
+ {
+ string line = StripXML(sr.ReadLine());
+ if (line.StartsWith("Model:")) { model = line.Replace("Model: ", ""); }
+ //if (line.StartsWith("Device ID:")) { deviceID = line.Replace("Device ID: ", ""); }
+ //if (line.StartsWith("Firmware:")) { firmware = line.Replace("Firmware: ", ""); }
+ }
+ }
+ }
+
+ using (var stream = await _httpClient.Get(new HttpRequestOptions()
{
Url = string.Format("{0}/tuners.html", GetApiUrl(info)),
CancellationToken = cancellationToken
- };
- using (var stream = await _httpClient.Get(httpOptions))
+ }))
{
var tuners = new List<LiveTvTunerInfo>();
using (var sr = new StreamReader(stream, System.Text.Encoding.UTF8))
@@ -93,7 +114,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
tuners.Add(new LiveTvTunerInfo()
{
Name = name,
- SourceType = Name,
+ SourceType = string.IsNullOrWhiteSpace(model) ? Name : model,
ProgramName = currentChannel,
Status = status
});
diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
index 2d56e9656..89ff3a984 100644
--- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
+++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
@@ -816,5 +816,6 @@
"ButtonShareHelp": "Share a web page containing media information with social media. Media files are never shared publicly.",
"ButtonShare": "Share",
"HeaderConfirm": "Confirm",
- "ButtonAdvancedRefresh": "Advanced Refresh"
+ "ButtonAdvancedRefresh": "Advanced Refresh",
+ "MessageConfirmDeleteTunerDevice": "Are you sure you wish to delete this device?"
}
diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json
index 5a1d9f29e..b6c1321fa 100644
--- a/MediaBrowser.Server.Implementations/Localization/Server/server.json
+++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json
@@ -1473,5 +1473,12 @@
"HeaderShortOverview": "Short Overview",
"HeaderType": "Type",
"HeaderSeverity": "Severity",
- "OptionReportActivities": "Activities Log"
+ "OptionReportActivities": "Activities Log",
+ "HeaderTunerDevices": "Tuner Devices",
+ "ButtonAddDevice": "Add Device",
+ "HeaderAddDevice": "Add Device",
+ "HeaderExternalServices": "External Services",
+ "LabelIpAddressPath": "IP Address / Path:",
+ "TabExternalServices": "External Services",
+ "TabTuners": "Tuners"
}
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index bc1d07426..dc149318b 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -221,6 +221,7 @@
<Compile Include="LiveTv\EmbyTV\RecordingHelper.cs" />
<Compile Include="LiveTv\EmbyTV\SeriesTimerManager.cs" />
<Compile Include="LiveTv\EmbyTV\TimerManager.cs" />
+ <Compile Include="LiveTv\Listings\SchedulesDirect.cs" />
<Compile Include="LiveTv\LiveTvConfigurationFactory.cs" />
<Compile Include="LiveTv\LiveTvDtoService.cs" />
<Compile Include="LiveTv\LiveTvManager.cs" />