|
|
|
@ -92,10 +92,18 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider |
|
|
|
// must deserialize channel from json
|
|
|
|
// must deserialize channel from json
|
|
|
|
foreach (ExternalJsonChannel channel in maybeChannel) |
|
|
|
foreach (ExternalJsonChannel channel in maybeChannel) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// TODO: null start time should log and throw
|
|
|
|
if (string.IsNullOrWhiteSpace(channel.StartTime)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_logger.LogError( |
|
|
|
|
|
|
|
"External json channel in file {File} has no start time; unable to locate playout item", |
|
|
|
|
|
|
|
playout.ScheduleFile); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
throw new InvalidOperationException( |
|
|
|
|
|
|
|
$"External json channel in file {playout.ScheduleFile} has no start time"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
DateTimeOffset startTime = DateTimeOffset.Parse( |
|
|
|
DateTimeOffset startTime = DateTimeOffset.Parse( |
|
|
|
channel.StartTime ?? string.Empty, |
|
|
|
channel.StartTime, |
|
|
|
CultureInfo.InvariantCulture, |
|
|
|
CultureInfo.InvariantCulture, |
|
|
|
DateTimeStyles.AssumeUniversal).ToLocalTime(); |
|
|
|
DateTimeStyles.AssumeUniversal).ToLocalTime(); |
|
|
|
|
|
|
|
|
|
|
|
@ -207,14 +215,35 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider |
|
|
|
.Include(pms => pms.Connections) |
|
|
|
.Include(pms => pms.Connections) |
|
|
|
.SelectOneAsync(pms => pms.ServerName, pms => pms.ServerName == program.ServerKey, cancellationToken); |
|
|
|
.SelectOneAsync(pms => pms.ServerName, pms => pms.ServerName == program.ServerKey, cancellationToken); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (maybeServer.IsNone) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_logger.LogWarning( |
|
|
|
|
|
|
|
"Unable to stream remotely; no Plex server found with server name {ServerName}", |
|
|
|
|
|
|
|
program.ServerKey); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (PlexMediaSource server in maybeServer) |
|
|
|
foreach (PlexMediaSource server in maybeServer) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Option<PlexConnection> maybeConnection = server.Connections.SingleOrDefault(c => c.IsActive); |
|
|
|
Option<PlexConnection> maybeConnection = server.Connections.SingleOrDefault(c => c.IsActive); |
|
|
|
|
|
|
|
if (maybeConnection.IsNone) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_logger.LogWarning( |
|
|
|
|
|
|
|
"Unable to stream remotely; Plex server {ServerName} has no active connection", |
|
|
|
|
|
|
|
server.ServerName); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (PlexConnection connection in maybeConnection) |
|
|
|
foreach (PlexConnection connection in maybeConnection) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Option<PlexServerAuthToken> maybeToken = |
|
|
|
Option<PlexServerAuthToken> maybeToken = |
|
|
|
await _plexSecretStore.GetServerAuthToken(server.ClientIdentifier); |
|
|
|
await _plexSecretStore.GetServerAuthToken(server.ClientIdentifier); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (maybeToken.IsNone) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_logger.LogWarning( |
|
|
|
|
|
|
|
"Unable to stream remotely; Plex server {ServerName} has no auth token", |
|
|
|
|
|
|
|
server.ServerName); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (PlexServerAuthToken token in maybeToken) |
|
|
|
foreach (PlexServerAuthToken token in maybeToken) |
|
|
|
{ |
|
|
|
{ |
|
|
|
MediaItem mediaItem = program.Type switch |
|
|
|
MediaItem mediaItem = program.Type switch |
|
|
|
@ -230,7 +259,6 @@ public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// TODO: log errors?
|
|
|
|
|
|
|
|
return new UnableToLocatePlayoutItem(); |
|
|
|
return new UnableToLocatePlayoutItem(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|