Feature: All bussiness units get a tile
This commit is contained in:
@@ -148,18 +148,25 @@ public class RecordingService : IRecordingService, IDisposable
|
||||
public async Task<IReadOnlyList<PlayV3TvProgram>> GetUpcomingScheduleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var config = Plugin.Instance?.Configuration;
|
||||
var businessUnit = (config?.BusinessUnit ?? Configuration.BusinessUnit.SRF).ToString().ToLowerInvariant();
|
||||
var units = config?.ResolveEnabledUnits() ?? new[] { Configuration.BusinessUnit.SRF };
|
||||
|
||||
using var apiClient = _apiClientFactory.CreateClient();
|
||||
var livestreams = await apiClient.GetScheduledLivestreamsAsync(businessUnit, "SPORT", cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (livestreams == null)
|
||||
// Aggregate sport livestreams across every enabled business unit so the recordings
|
||||
// page shows events from all enabled languages.
|
||||
var all = new List<PlayV3TvProgram>();
|
||||
foreach (var unit in units)
|
||||
{
|
||||
return Array.Empty<PlayV3TvProgram>();
|
||||
var businessUnit = unit.ToString().ToLowerInvariant();
|
||||
var livestreams = await apiClient.GetScheduledLivestreamsAsync(businessUnit, "SPORT", cancellationToken).ConfigureAwait(false);
|
||||
if (livestreams != null)
|
||||
{
|
||||
all.AddRange(livestreams);
|
||||
}
|
||||
}
|
||||
|
||||
// Filter to only future/current livestreams that aren't blocked
|
||||
return livestreams
|
||||
return all
|
||||
.Where(ls => ls.Blocked != true && (ls.ValidTo == null || ls.ValidTo.Value.ToUniversalTime() > DateTime.UtcNow))
|
||||
.OrderBy(ls => ls.ValidFrom)
|
||||
.ToList();
|
||||
@@ -178,9 +185,11 @@ public class RecordingService : IRecordingService, IDisposable
|
||||
return existing;
|
||||
}
|
||||
|
||||
// Fetch metadata for the URN
|
||||
// Fetch metadata for the URN. The unit is encoded in the URN itself, so use that to
|
||||
// query the right schedule regardless of which units are enabled.
|
||||
var config = Plugin.Instance?.Configuration;
|
||||
var businessUnit = (config?.BusinessUnit ?? Configuration.BusinessUnit.SRF).ToString().ToLowerInvariant();
|
||||
var businessUnit = ParseBusinessUnitFromUrn(urn)
|
||||
?? (config?.BusinessUnit ?? Configuration.BusinessUnit.SRF).ToString().ToLowerInvariant();
|
||||
|
||||
using var apiClient = _apiClientFactory.CreateClient();
|
||||
var livestreams = await apiClient.GetScheduledLivestreamsAsync(businessUnit, "SPORT", cancellationToken).ConfigureAwait(false);
|
||||
@@ -190,6 +199,7 @@ public class RecordingService : IRecordingService, IDisposable
|
||||
{
|
||||
Id = Guid.NewGuid().ToString("N"),
|
||||
Urn = urn,
|
||||
BusinessUnit = ParseBusinessUnitFromUrn(urn) ?? businessUnit,
|
||||
Title = program?.Title ?? urn,
|
||||
Description = program?.Lead ?? program?.Description,
|
||||
ImageUrl = program?.ImageUrl,
|
||||
@@ -206,6 +216,24 @@ public class RecordingService : IRecordingService, IDisposable
|
||||
return entry;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extracts the business unit from an SRF URN of the form "urn:<bu>:<type>:...".
|
||||
/// </summary>
|
||||
/// <param name="urn">The URN.</param>
|
||||
/// <returns>The lowercase business unit, or null if it cannot be determined.</returns>
|
||||
private static string? ParseBusinessUnitFromUrn(string urn)
|
||||
{
|
||||
if (string.IsNullOrEmpty(urn))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var parts = urn.Split(':');
|
||||
return parts.Length >= 2 && !string.IsNullOrEmpty(parts[1])
|
||||
? parts[1].ToLowerInvariant()
|
||||
: null;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool CancelRecording(string recordingId)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user