aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs63
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs25
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs16
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs13
4 files changed, 65 insertions, 52 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index f4a6385a41..46b10703a4 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -117,14 +117,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
try
{
var channels = await hostInstance.Item1.GetChannels(hostInstance.Item2, cancellationToken).ConfigureAwait(false);
- var newChannels = channels.ToList();
- foreach (var channel in newChannels)
- {
- channel.Id = hostInstance.Item1.Type.GetMD5().ToString("N") + "-" + channel.Id;
- }
-
- list.AddRange(newChannels);
+ list.AddRange(channels);
}
catch (Exception ex)
{
@@ -310,18 +304,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
return Task.FromResult((IEnumerable<SeriesTimerInfo>)_seriesTimerProvider.GetAll());
}
- private string GetOriginalChannelId(string channelId)
- {
- var parts = channelId.Split('-');
-
- return string.Join("-", parts.Skip(1).ToArray());
- }
-
public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
{
foreach (var provider in GetListingProviders())
{
- var programs = await provider.Item1.GetProgramsAsync(provider.Item2, GetOriginalChannelId(channelId), startDateUtc, endDateUtc, cancellationToken)
+ var programs = await provider.Item1.GetProgramsAsync(provider.Item2, channelId, startDateUtc, endDateUtc, cancellationToken)
.ConfigureAwait(false);
var list = programs.ToList();
@@ -364,15 +351,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{
_logger.Info("Streaming Channel " + channelId);
- var configurationId = channelId.Split('-')[0];
-
foreach (var hostInstance in GetTunerHosts())
{
- if (!string.Equals(configurationId, hostInstance.Item1.Type.GetMD5().ToString("N"), StringComparison.OrdinalIgnoreCase))
- {
- continue;
- }
-
if (!string.IsNullOrWhiteSpace(streamId))
{
var originalStreamId = string.Join("-", streamId.Split('-').Skip(1).ToArray());
@@ -386,16 +366,18 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
MediaSourceInfo mediaSourceInfo = null;
try
{
- mediaSourceInfo = await hostInstance.Item1.GetChannelStream(hostInstance.Item2, GetOriginalChannelId(channelId), streamId, cancellationToken).ConfigureAwait(false);
+ mediaSourceInfo = await hostInstance.Item1.GetChannelStream(hostInstance.Item2, channelId, streamId, cancellationToken).ConfigureAwait(false);
}
- catch (ApplicationException e)
+ catch (Exception e)
{
- _logger.Info(e.Message);
- continue;
+ _logger.ErrorException("Error getting channel stream", e);
}
- mediaSourceInfo.Id = Guid.NewGuid().ToString("N");
- return mediaSourceInfo;
+ if (mediaSourceInfo != null)
+ {
+ mediaSourceInfo.Id = Guid.NewGuid().ToString("N");
+ return mediaSourceInfo;
+ }
}
throw new ApplicationException("Tuner not found.");
@@ -403,20 +385,25 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
public async Task<List<MediaSourceInfo>> GetChannelStreamMediaSources(string channelId, CancellationToken cancellationToken)
{
- var configurationId = channelId.Split('-')[0];
-
foreach (var hostInstance in GetTunerHosts())
{
- if (string.Equals(configurationId, hostInstance.Item1.Type.GetMD5().ToString("N"), StringComparison.OrdinalIgnoreCase))
+ try
{
- var sources = await hostInstance.Item1.GetChannelStreamMediaSources(hostInstance.Item2, GetOriginalChannelId(channelId), cancellationToken).ConfigureAwait(false);
+ var sources = await hostInstance.Item1.GetChannelStreamMediaSources(hostInstance.Item2, channelId, cancellationToken).ConfigureAwait(false);
foreach (var source in sources)
{
source.Id = hostInstance.Item2.Id + "-" + source.Id;
}
- return sources;
+ if (sources.Count > 0)
+ {
+ return sources;
+ }
+ }
+ catch (NotImplementedException)
+ {
+
}
}
@@ -636,7 +623,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
var recordingShowIds = currentRecordings.Select(i => i.ShowId).ToList();
- allPrograms = allPrograms.Where(epg => !recordingShowIds.Contains(epg.ShowId, StringComparer.OrdinalIgnoreCase));
+ allPrograms = allPrograms.Where(epg => !recordingShowIds.Contains(epg.ShowId, StringComparer.OrdinalIgnoreCase));
return allPrograms.Select(i => RecordingHelper.CreateTimer(i, seriesTimer));
}
@@ -650,7 +637,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
if (seriesTimer.RecordNewOnly)
{
- allPrograms = allPrograms.Where(epg => !epg.IsRepeat);
+ allPrograms = allPrograms.Where(epg => !epg.IsRepeat);
}
if (!seriesTimer.RecordAnyChannel)
@@ -660,6 +647,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
allPrograms = allPrograms.Where(i => seriesTimer.Days.Contains(i.StartDate.DayOfWeek));
+ if (string.IsNullOrWhiteSpace(seriesTimer.SeriesId))
+ {
+ _logger.Error("seriesTimer.SeriesId is null. Cannot find programs for series");
+ return new List<ProgramInfo>();
+ }
+
return allPrograms.Where(i => string.Equals(i.SeriesId, seriesTimer.SeriesId, StringComparison.OrdinalIgnoreCase));
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
index 8650d4bc45..c536d0e83f 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs
@@ -307,6 +307,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
imageLink = details.images;
}
+ var showType = details.showType ?? string.Empty;
+
var info = new ProgramInfo
{
ChannelId = channel,
@@ -315,32 +317,29 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
StartDate = startAt,
EndDate = endAt,
Name = details.titles[0].title120 ?? "Unkown",
- OfficialRating = "0",
+ OfficialRating = null,
CommunityRating = null,
EpisodeTitle = episodeTitle,
Audio = audioType,
IsHD = hdtv,
IsRepeat = repeat,
- IsSeries =
- ((details.showType ?? "No ShowType") == "Series") ||
- (details.showType ?? "No ShowType") == "Miniseries",
+ IsSeries = showType.IndexOf("series", StringComparison.OrdinalIgnoreCase) != -1,
ImageUrl = imageLink,
HasImage = details.hasImageArtwork,
IsNews = false,
IsKids = false,
- IsSports =
- ((details.showType ?? "No ShowType") == "Sports non-event") ||
- (details.showType ?? "No ShowType") == "Sports event",
+ IsSports = showType.IndexOf("sports", StringComparison.OrdinalIgnoreCase) != -1,
IsLive = false,
- IsMovie =
- (details.showType ?? "No ShowType") == "Feature Film" ||
- (details.showType ?? "No ShowType") == "TV Movie" ||
- (details.showType ?? "No ShowType") == "Short Film",
+ IsMovie = showType.IndexOf("movie", StringComparison.OrdinalIgnoreCase) != -1 || showType.IndexOf("film", StringComparison.OrdinalIgnoreCase) != -1,
IsPremiere = false,
- ShowId = programInfo.programID,
- SeriesId = programInfo.programID.Substring(0, 10)
+ ShowId = programInfo.programID
};
+ if (info.IsSeries)
+ {
+ info.SeriesId = programInfo.programID.Substring(0, 10);
+ }
+
if (!string.IsNullOrWhiteSpace(details.originalAirDate))
{
info.OriginalAirDate = DateTime.Parse(details.originalAirDate);
diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
index c01eb63abb..b09f8cfef5 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
@@ -47,6 +47,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
get { return "hdhomerun"; }
}
+ private const string ChannelIdPrefix = "hdhr_";
+
public async Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo info, CancellationToken cancellationToken)
{
var options = new HttpRequestOptions
@@ -64,7 +66,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
{
Name = i.GuideName,
Number = i.GuideNumber.ToString(CultureInfo.InvariantCulture),
- Id = i.GuideNumber.ToString(CultureInfo.InvariantCulture),
+ Id = ChannelIdPrefix + i.GuideNumber.ToString(CultureInfo.InvariantCulture),
IsFavorite = i.Favorite
});
@@ -320,6 +322,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
{
var list = new List<MediaSourceInfo>();
+ if (!channelId.StartsWith(ChannelIdPrefix, StringComparison.OrdinalIgnoreCase))
+ {
+ return list;
+ }
+
list.Add(GetMediaSource(info, channelId, "native"));
try
@@ -339,7 +346,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
}
catch (Exception ex)
{
-
+
}
return list;
@@ -347,6 +354,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
public async Task<MediaSourceInfo> GetChannelStream(TunerHostInfo info, string channelId, string streamId, CancellationToken cancellationToken)
{
+ if (!channelId.StartsWith(ChannelIdPrefix, StringComparison.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
return GetMediaSource(info, channelId, streamId);
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs
index bb31390f23..0755d2a39a 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs
@@ -35,6 +35,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
public Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo info, CancellationToken cancellationToken)
{
+ var urlHash = info.Url.GetMD5().ToString("N");
+
int position = 0;
string line;
// Read the file and display it line by line.
@@ -87,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
switch (list[0])
{
case "tvg-id":
- channels.Last().Id = list[1];
+ channels.Last().Id = urlHash + list[1];
channels.Last().Number = list[1];
break;
case "tvg-name":
@@ -126,6 +128,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
public async Task<MediaSourceInfo> GetChannelStream(TunerHostInfo info, string channelId, string streamId, CancellationToken cancellationToken)
{
+ var urlHash = info.Url.GetMD5().ToString("N");
+ if (!channelId.StartsWith(urlHash, StringComparison.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
+ channelId = channelId.Substring(urlHash.Length);
+
var channels = await GetChannels(info, cancellationToken).ConfigureAwait(false);
var m3uchannels = channels.Cast<M3UChannel>();
var channel = m3uchannels.FirstOrDefault(c => c.Id == channelId);
@@ -191,7 +201,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
}
}
-
public Task<List<MediaSourceInfo>> GetChannelStreamMediaSources(TunerHostInfo info, string channelId, CancellationToken cancellationToken)
{
throw new NotImplementedException();