Unverified Commit 7477ab8a authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Handle HAFAS backend in JSON API

Note: API output is not proper / stable yet

Ref: #17
parent ea80109a
Loading
Loading
Loading
Loading
+86 −57
Original line number Original line Diff line number Diff line
@@ -1491,8 +1491,14 @@ sub handle_result {
		}
		}


		if ( $template eq 'json' ) {
		if ( $template eq 'json' ) {
			my @json_route = $self->json_route_diff( [ $result->route ],
			my @json_route;
				[ $result->sched_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' ) {
			if ( $apiver eq '1' or $apiver eq '2' ) {


@@ -1508,63 +1514,86 @@ sub handle_result {
				return;
				return;
			}
			}
			else {    # apiver == 3
			else {    # apiver == 3
				my ( $delay_arr, $delay_dep, $sched_arr, $sched_dep );
				if ( $result->isa('Travel::Status::DE::IRIS::Result') ) {
				if ( $result->arrival ) {
					my ( $delay_arr, $delay_dep, $sched_arr, $sched_dep );
					$delay_arr = $result->arrival->subtract_datetime(
					if ( $result->arrival ) {
						$result->sched_arrival )->in_units('minutes');
						$delay_arr = $result->arrival->subtract_datetime(
				}
							$result->sched_arrival )->in_units('minutes');
				if ( $result->departure ) {
					}
					$delay_dep = $result->departure->subtract_datetime(
					if ( $result->departure ) {
						$result->sched_departure )->in_units('minutes');
						$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_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 ) {
				else {
					$sched_dep = $result->sched_departure->strftime('%H:%M');
					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' ) {
		elsif ( $template eq 'text' ) {