Commit 93256284 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

show direction of travel if available

parent c8f5ba24
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -458,6 +458,55 @@ sub render_train {
		)->wait;
	}

	# Same for stationinfo (direction of travel). If it's too late and
	# therefore missing, that's okay.
	$self->wagonorder->get_stationinfo_p( $result->station_uic )->then(
		sub {
			my ($station_info)    = @_;
			my ($platform_number) = ( $result->platform =~ m{(\d+)} );
			if ( not defined $platform_number ) {
				return;
			}
			my $platform_info = $station_info->{$platform_number};
			if ( not $platform_info ) {
				return;
			}
			my $prev_stop = ( $result->route_pre )[-1];
			my $next_stop = ( $result->route_post )[0];
			my $direction;

			if ( $platform_info->{kopfgleis} and $next_stop ) {
				$direction = $platform_info->{direction} eq 'r' ? 'l' : 'r';
			}
			elsif ( $platform_info->{kopfgleis} ) {
				$direction = $platform_info->{direction};
			}
			elsif ( $prev_stop
				and exists $platform_info->{direction_from}{$prev_stop} )
			{
				$direction = $platform_info->{direction_from}{$prev_stop};
			}
			elsif ( $next_stop
				and exists $platform_info->{direction_from}{$next_stop} )
			{
				$direction
				  = $platform_info->{direction_from}{$next_stop} eq 'r'
				  ? 'l'
				  : 'r';
			}

			if ($direction) {
				$departure->{direction} = $direction;
			}

			return;
		},
		sub {
			# errors don't matter here
			return;
		}
	)->wait;

	$self->hafas->get_route_timestamps_p( train => $result )->then(
		sub {
			my ( $route_ts, $route_info, $trainsearch ) = @_;
+39 −0
Original line number Diff line number Diff line
@@ -142,4 +142,43 @@ sub get_p {
	return $promise;
}

sub get_stationinfo_p {
	my ( $self, $eva ) = @_;

	my $url = "https://lib.finalrewind.org/dbdb/s/${eva}.json";

	my $cache   = $self->{main_cache};
	my $promise = Mojo::Promise->new;

	if ( my $content = $cache->thaw($url) ) {
		return $promise->resolve($content);
	}

	$self->{user_agent}->request_timeout(5)->get_p( $url => $self->{header} )
	  ->then(
		sub {
			my ($tx) = @_;

			if ( my $err = $tx->error ) {
				$cache->freeze( $url, {} );
				$promise->reject("HTTP $err->{code} $err->{message}");
				return;
			}

			my $json = $tx->result->json;
			$cache->freeze( $url, $json );
			$promise->resolve($json);
			return;
		}
	)->catch(
		sub {
			my ($err) = @_;
			$cache->freeze( $url, {} );
			$promise->reject($err);
			return;
		}
	)->wait;
	return $promise;
}

1;
+10 −2
Original line number Diff line number Diff line
@@ -66,12 +66,20 @@
      <span class="minfo">Fahrt fällt aus</span>
%   }
%   else {
%     my $left = '';
%     my $right = '';
%     if ($departure->{direction} and $departure->{direction} eq 'l') {
%       $left = '◀ ';
%     }
%     elsif ($departure->{direction} and $departure->{direction} eq 'r') {
%       $right = ' ▶';
%     }
%     if ($departure->{scheduled_platform} and $departure->{platform}
%         and $departure->{scheduled_platform} ne $departure->{platform}) {
        <span class="minfo">Gleis <%= $departure->{platform} %></span>
        <span class="minfo"><%= $left %>Gleis <%= $departure->{platform} %><%= $right %></span>
%     }
%     elsif ($departure->{scheduled_platform} or $departure->{platform}) {
        Gleis <%= $departure->{platform} // $departure->{scheduled_platform} %>
        <%= $left %>Gleis <%= $departure->{platform} // $departure->{scheduled_platform} %><%= $right %>
%     }
%   }
    </div>