diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 143 | 
1 files changed, 86 insertions, 57 deletions
| diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 475b4fb..66c938c 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -1491,8 +1491,14 @@ sub handle_result {  		}  		if ( $template eq 'json' ) { -			my @json_route = $self->json_route_diff( [ $result->route ], -				[ $result->sched_route ] ); +			my @json_route; +			if ( $result->can('sched_route') ) { +				@json_route = $self->json_route_diff( [ $result->route ], +					[ $result->sched_route ] ); +			} +			else { +				@json_route = map { $_->TO_JSON } $result->route; +			}  			if ( $apiver eq '1' or $apiver eq '2' ) { @@ -1508,63 +1514,86 @@ sub handle_result {  				return;  			}  			else {    # apiver == 3 -				my ( $delay_arr, $delay_dep, $sched_arr, $sched_dep ); -				if ( $result->arrival ) { -					$delay_arr = $result->arrival->subtract_datetime( -						$result->sched_arrival )->in_units('minutes'); -				} -				if ( $result->departure ) { -					$delay_dep = $result->departure->subtract_datetime( -						$result->sched_departure )->in_units('minutes'); -				} -				if ( $result->sched_arrival ) { -					$sched_arr = $result->sched_arrival->strftime('%H:%M'); +				if ( $result->isa('Travel::Status::DE::IRIS::Result') ) { +					my ( $delay_arr, $delay_dep, $sched_arr, $sched_dep ); +					if ( $result->arrival ) { +						$delay_arr = $result->arrival->subtract_datetime( +							$result->sched_arrival )->in_units('minutes'); +					} +					if ( $result->departure ) { +						$delay_dep = $result->departure->subtract_datetime( +							$result->sched_departure )->in_units('minutes'); +					} +					if ( $result->sched_arrival ) { +						$sched_arr = $result->sched_arrival->strftime('%H:%M'); +					} +					if ( $result->sched_departure ) { +						$sched_dep +						  = $result->sched_departure->strftime('%H:%M'); +					} +					push( +						@departures, +						{ +							delayArrival   => $delay_arr, +							delayDeparture => $delay_dep, +							destination    => $result->destination, +							isCancelled    => $result->is_cancelled, +							messages       => { +								delay => [ +									map { +										{ +											timestamp => $_->[0], +											text      => $_->[1] +										} +									} $result->delay_messages +								], +								qos => [ +									map { +										{ +											timestamp => $_->[0], +											text      => $_->[1] +										} +									} $result->qos_messages +								], +							}, +							missingRealtime => ( +								( +									not $result->has_realtime +									  and $result->start < $now +								) ? \1 : \0 +							), +							platform           => $result->platform, +							route              => \@json_route, +							scheduledPlatform  => $result->sched_platform, +							scheduledArrival   => $sched_arr, +							scheduledDeparture => $sched_dep, +							train              => $result->train, +							trainClasses       => [ $result->classes ], +							trainNumber        => $result->train_no, +							via => [ $result->route_interesting(3) ], +						} +					);  				} -				if ( $result->sched_departure ) { -					$sched_dep = $result->sched_departure->strftime('%H:%M'); +				else { +					push( +						@departures, +						{ +							delay             => $result->delay, +							direction         => $result->direction, +							destination       => $result->destination, +							isCancelled       => $result->is_cancelled, +							messages          => [ $result->messages ], +							platform          => $result->platform, +							route             => \@json_route, +							scheduledPlatform => $result->sched_platform, +							scheduledTime     => $result->sched_datetime->epoch, +							time              => $result->datetime->epoch, +							train             => $result->line, +							trainNumber       => $result->number, +							via => [ $result->route_interesting(3) ], +						} +					);  				} -				push( -					@departures, -					{ -						delayArrival   => $delay_arr, -						delayDeparture => $delay_dep, -						destination    => $result->destination, -						isCancelled    => $result->is_cancelled, -						messages       => { -							delay => [ -								map { -									{ -										timestamp => $_->[0], -										text      => $_->[1] -									} -								} $result->delay_messages -							], -							qos => [ -								map { -									{ -										timestamp => $_->[0], -										text      => $_->[1] -									} -								} $result->qos_messages -							], -						}, -						missingRealtime => ( -							( -								not $result->has_realtime -								  and $result->start < $now -							) ? \1 : \0 -						), -						platform           => $result->platform, -						route              => \@json_route, -						scheduledPlatform  => $result->sched_platform, -						scheduledArrival   => $sched_arr, -						scheduledDeparture => $sched_dep, -						train              => $result->train, -						trainClasses       => [ $result->classes ], -						trainNumber        => $result->train_no, -						via                => [ $result->route_interesting(3) ], -					} -				);  			}  		}  		elsif ( $template eq 'text' ) { | 
