diff options
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 33 | ||||
| -rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 13 | ||||
| -rw-r--r-- | templates/_suggestions_dbris.html.ep | 54 | ||||
| -rw-r--r-- | templates/departures.html.ep | 7 |
4 files changed, 101 insertions, 6 deletions
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 3b46775..7e5bc82 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -1203,6 +1203,8 @@ sub station { } } + my @suggestions; + my $promise; if ($dbris_service) { if ( $station !~ m{ [@] L = \d+ }x ) { @@ -1304,6 +1306,36 @@ sub station { if ( $station =~ m{ [@] O = (?<name> [^@]+ ) [@] }x ) { $status->{station_name} = $+{name}; } + + my ($eva) = ( $station =~ m{ [@] L = (\d+) }x ); + my $backend_id + = $self->stations->get_backend_id( dbris => $dbris_service ); + my @destinations = $self->journeys->get_connection_targets( + uid => $uid, + backend_id => $backend_id, + eva => $eva + ); + + for my $dep (@results) { + destination: for my $dest (@destinations) { + if ( $dep->destination + and $dep->destination eq $dest->{name} ) + { + push( @suggestions, [ $dep, $dest ] ); + next destination; + } + for my $via_name ( $dep->via ) { + if ( $via_name eq $dest->{name} ) { + push( @suggestions, [ $dep, $dest ] ); + next destination; + } + } + } + } + + @suggestions = map { $_->[0] } + sort { $a->[1] <=> $b->[1] } + map { [ $_, $_->[0]->dep->epoch ] } @suggestions; } elsif ($hafas_service) { @@ -1449,6 +1481,7 @@ sub station { related_stations => $status->{related_stations}, user_status => $user_status, can_check_out => $can_check_out, + suggestions => \@suggestions, title => "travelynx: $status->{station_name}", ); } diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index 77907cd..e0f1e83 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -2104,9 +2104,14 @@ sub get_connection_targets { my $uid = $opt{uid}; my $threshold = $opt{threshold} // DateTime->now( time_zone => 'Europe/Berlin' )->subtract( months => 4 ); - my $db = $opt{db} //= $self->{pg}->db; - my $min_count = $opt{min_count} // 3; - my $dest_id = $opt{eva}; + my $db = $opt{db} //= $self->{pg}->db; + my $min_count = $opt{min_count} // 3; + my $backend_id = $opt{backend_id}; + my $dest_id = $opt{eva}; + + $self->{log}->debug( +"get_connection_targets(uid => $uid, backend_id => $backend_id, dest_id => $dest_id)" + ); if ( $opt{destination_name} ) { return { @@ -2115,8 +2120,6 @@ sub get_connection_targets { }; } - my $backend_id = $opt{backend_id}; - if ( not $dest_id ) { ( $dest_id, $backend_id ) = $self->get_latest_dest_ids(%opt); } diff --git a/templates/_suggestions_dbris.html.ep b/templates/_suggestions_dbris.html.ep new file mode 100644 index 0000000..175a57b --- /dev/null +++ b/templates/_suggestions_dbris.html.ep @@ -0,0 +1,54 @@ +<ul class="collection departures connections"> + % for my $res (@{$suggestions}) { + % my ($dep, $dest) = @{$res}; + % my $row_class = ''; + % my $link_class = 'action-checkin'; + % if ($dep->is_cancelled) { + % $row_class = 'cancelled'; + % $link_class = 'action-cancelled-from'; + % } + % if ($checkin_from) { + <li class="collection-item <%= $row_class %> <%= $link_class %>" + data-dbris="<%= $dbris %>" + data-station="<%= $dep->stop_eva %>" + data-train="<%= $dep->id %>" + data-suffix="<%= $dep->maybe_line_no %>" + data-ts="<%= ($dep->sched_dep // $dep->dep)->epoch %>" + data-dest="<%= $dest->{name} %>"> + % } + % else { + <li class="collection-item <%= $row_class %>"> + % } + <a class="dep-time" href="#"> + % if ($dep->is_cancelled) { + %= $dep->sched_dep->strftime('%H:%M') + % } + % else { + %= $dep->dep->strftime('%H:%M') + % } + % if ($dep->delay) { + %= sprintf('(%+d)', $dep->delay) + % } + </a> + <span class="connect-platform-wrapper"> + % if ($dep->platform) { + <span> + % if (($dep->type // q{}) =~ m{ ast | bus | ruf }ix) { + Steig + % } + % else { + Gleis + % } + %= $dep->platform + </span> + % } + <span class="dep-line <%= $dep->type // q{} %>"> + %= $dep->line + </span> + </span> + <span class="dep-dest"> + %= $dest->{name} + </span> + </li> + % } +</ul> diff --git a/templates/departures.html.ep b/templates/departures.html.ep index 6df48a8..db12422 100644 --- a/templates/departures.html.ep +++ b/templates/departures.html.ep @@ -88,7 +88,7 @@ </div> </div> % } -% elsif (not param('train') and (@{stash('connections_iris') // []} or @{stash('connections_hafas') // []}) ) { +% elsif (not param('train') and (@{stash('connections_iris') // []} or @{stash('connections_hafas') // []} or @{stash('suggestions') // []}) ) { % $have_connections = 1; <div class="row"> <div class="col s12"> @@ -99,6 +99,11 @@ % if (@{stash('connections_hafas') // []}) { %= include '_connections_hafas', connections => stash('connections_hafas'), checkin_from => $eva; % } + % if (@{stash('suggestions') // []}) { + % if ($dbris) { + %= include '_suggestions_dbris', suggestions => stash('suggestions'), checkin_from => $eva; + % } + % } </div> </div> % } |
