aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/LiveTv
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-08-10 13:37:50 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-08-10 13:37:50 -0400
commit1936d6db43e10cc6f45fa72fde4b1628e06b8abd (patch)
treead1afffae72558c9f2d2be471d00bdd729325f1d /MediaBrowser.Server.Implementations/LiveTv
parent3a309db3c53542be3b2d3854b077cfd125f1f435 (diff)
update search hints
Diffstat (limited to 'MediaBrowser.Server.Implementations/LiveTv')
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListings.cs59
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs144
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/IEmbyListingProvider.cs18
3 files changed, 221 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListings.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListings.cs
new file mode 100644
index 000000000..5edebb393
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListings.cs
@@ -0,0 +1,59 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.LiveTv;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Model.Serialization;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby
+{
+ public class EmbyGuide : IListingsProvider
+ {
+ private readonly IHttpClient _httpClient;
+ private readonly IJsonSerializer _jsonSerializer;
+
+ public EmbyGuide(IHttpClient httpClient, IJsonSerializer jsonSerializer)
+ {
+ _httpClient = httpClient;
+ _jsonSerializer = jsonSerializer;
+ }
+
+ public string Name
+ {
+ get { return "Emby Guide"; }
+ }
+
+ public string Type
+ {
+ get { return "emby"; }
+ }
+
+ public Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+ {
+ return GetListingsProvider(info.Country).GetProgramsAsync(info, channelNumber, startDateUtc, endDateUtc, cancellationToken);
+ }
+
+ public Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken)
+ {
+ return GetListingsProvider(info.Country).AddMetadata(info, channels, cancellationToken);
+ }
+
+ public Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings)
+ {
+ return GetListingsProvider(info.Country).Validate(info, validateLogin, validateListings);
+ }
+
+ public Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location)
+ {
+ return GetListingsProvider(country).GetLineups(info, country, location);
+ }
+
+ private IEmbyListingProvider GetListingsProvider(string country)
+ {
+ return new EmbyListingsNorthAmerica(_httpClient, _jsonSerializer);
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs
new file mode 100644
index 000000000..99bd5325e
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs
@@ -0,0 +1,144 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.LiveTv;
+using MediaBrowser.Model.Serialization;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby
+{
+ public class EmbyListingsNorthAmerica : IEmbyListingProvider
+ {
+ private readonly IHttpClient _httpClient;
+ private readonly IJsonSerializer _jsonSerializer;
+
+ public EmbyListingsNorthAmerica(IHttpClient httpClient, IJsonSerializer jsonSerializer)
+ {
+ _httpClient = httpClient;
+ _jsonSerializer = jsonSerializer;
+ }
+
+ public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+ {
+ return new List<ProgramInfo>();
+ }
+
+ public async Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken)
+ {
+ var response = await GetResponse<LineupDetailResponse>("https://data.emby.media/service/lineups?id=" + info.ListingsId).ConfigureAwait(false);
+
+ foreach (var channel in channels)
+ {
+
+ }
+ }
+
+ public Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings)
+ {
+ return Task.FromResult(true);
+ }
+
+ public async Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location)
+ {
+ var response = await GetResponse<LineupInfo[]>("https://data.emby.media/service/lineups?id=" + location).ConfigureAwait(false);
+
+ return response.Select(i => new NameIdPair
+ {
+
+ Name = GetName(i),
+ Id = i.lineupID
+
+ }).ToList();
+ }
+
+ private string GetName(LineupInfo info)
+ {
+ var name = info.lineupName;
+
+ if (string.Equals(info.lineupType, "cab", StringComparison.OrdinalIgnoreCase))
+ {
+ name += " - Cable";
+ }
+ else if (string.Equals(info.lineupType, "sat", StringComparison.OrdinalIgnoreCase))
+ {
+ name += " - SAT";
+ }
+ else if (string.Equals(info.lineupType, "ota", StringComparison.OrdinalIgnoreCase))
+ {
+ name += " - OTA";
+ }
+
+ return name;
+ }
+
+ private async Task<T> GetResponse<T>(string url)
+ where T : class
+ {
+ using (var stream = await _httpClient.Get(new HttpRequestOptions
+ {
+ Url = url
+
+ }).ConfigureAwait(false))
+ {
+ using (var reader = new StreamReader(stream))
+ {
+ var path = await reader.ReadToEndAsync().ConfigureAwait(false);
+
+ // location = zip code
+ using (var secondStream = await _httpClient.Get(new HttpRequestOptions
+ {
+ Url = "https://data.emby.media" + path
+
+ }).ConfigureAwait(false))
+ {
+ return _jsonSerializer.DeserializeFromStream<T>(secondStream);
+ }
+ }
+ }
+ }
+
+ private class LineupInfo
+ {
+ public string lineupID { get; set; }
+ public string lineupName { get; set; }
+ public string lineupType { get; set; }
+ public string providerID { get; set; }
+ public string providerName { get; set; }
+ public string serviceArea { get; set; }
+ public string country { get; set; }
+ }
+
+ private class Station
+ {
+ public string number { get; set; }
+ public int channelNumber { get; set; }
+ public int subChannelNumber { get; set; }
+ public int stationID { get; set; }
+ public string name { get; set; }
+ public string callsign { get; set; }
+ public string network { get; set; }
+ public string stationType { get; set; }
+ public int NTSC_TSID { get; set; }
+ public int DTV_TSID { get; set; }
+ public string webLink { get; set; }
+ public string logoFilename { get; set; }
+ }
+
+ private class LineupDetailResponse
+ {
+ public string lineupID { get; set; }
+ public string lineupName { get; set; }
+ public string lineupType { get; set; }
+ public string providerID { get; set; }
+ public string providerName { get; set; }
+ public string serviceArea { get; set; }
+ public string country { get; set; }
+ public List<Station> stations { get; set; }
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/IEmbyListingProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/IEmbyListingProvider.cs
new file mode 100644
index 000000000..83477acfc
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/IEmbyListingProvider.cs
@@ -0,0 +1,18 @@
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.LiveTv;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby
+{
+ public interface IEmbyListingProvider
+ {
+ Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
+ Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken);
+ Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings);
+ Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location);
+ }
+}