@ -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 ) )
{
_l ogger . 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 )
{
_l ogger . 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 )
{
_l ogger . 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 )
{
_l ogger . 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 ( ) ;
}
}