Loading lib/DBInfoscreen/Controller/Stationboard.pm +49 −0 Original line number Diff line number Diff line Loading @@ -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 ) = @_; Loading lib/DBInfoscreen/Helper/Wagonorder.pm +39 −0 Original line number Diff line number Diff line Loading @@ -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; templates/_train_details.html.ep +10 −2 Original line number Diff line number Diff line Loading @@ -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> Loading Loading
lib/DBInfoscreen/Controller/Stationboard.pm +49 −0 Original line number Diff line number Diff line Loading @@ -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 ) = @_; Loading
lib/DBInfoscreen/Helper/Wagonorder.pm +39 −0 Original line number Diff line number Diff line Loading @@ -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;
templates/_train_details.html.ep +10 −2 Original line number Diff line number Diff line Loading @@ -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> Loading