show select past departures in checkin suggestion list
Previously, for each destination, up to two departures between now and now + 40 minutes were shown. When performing a fresh checkin (i.e., the has not logged a journey in the past few minutes and is not currently checked in), the departure list now additionally contains all departures between now - 5 minutes and now. When checking in from a train (i.e., the user has recently checked out at the station or is still checked in), it additionally contains all departures between arrival time and now. Closes #33
This commit is contained in:
parent
caf97d9cd0
commit
6826c03386
1 changed files with 14 additions and 5 deletions
|
@ -2703,7 +2703,7 @@ sub startup {
|
||||||
'get_connection_targets' => sub {
|
'get_connection_targets' => sub {
|
||||||
my ( $self, %opt ) = @_;
|
my ( $self, %opt ) = @_;
|
||||||
|
|
||||||
my $uid = $opt{uid} //= $self->current_user->{id};
|
my $uid = $opt{uid} //= $self->current_user->{id};
|
||||||
my $threshold = $opt{threshold}
|
my $threshold = $opt{threshold}
|
||||||
// DateTime->now( time_zone => 'Europe/Berlin' )
|
// DateTime->now( time_zone => 'Europe/Berlin' )
|
||||||
->subtract( months => 4 );
|
->subtract( months => 4 );
|
||||||
|
@ -2738,7 +2738,7 @@ sub startup {
|
||||||
);
|
);
|
||||||
my @destinations
|
my @destinations
|
||||||
= $res->hashes->grep( sub { shift->{count} >= $min_count } )
|
= $res->hashes->grep( sub { shift->{count} >= $min_count } )
|
||||||
->map( sub { shift->{dest} } )->each;
|
->map( sub { shift->{dest} } )->each;
|
||||||
@destinations
|
@destinations
|
||||||
= grep { $self->app->station_by_eva->{$_} } @destinations;
|
= grep { $self->app->station_by_eva->{$_} } @destinations;
|
||||||
@destinations
|
@destinations
|
||||||
|
@ -2755,6 +2755,7 @@ sub startup {
|
||||||
my $use_history = $self->account_use_history($uid);
|
my $use_history = $self->account_use_history($uid);
|
||||||
|
|
||||||
my ( $eva, $exclude_via, $exclude_train_id, $exclude_before );
|
my ( $eva, $exclude_via, $exclude_train_id, $exclude_before );
|
||||||
|
my $now = $self->now->epoch;
|
||||||
|
|
||||||
if ( $opt{eva} ) {
|
if ( $opt{eva} ) {
|
||||||
if ( $use_history & 0x01 ) {
|
if ( $use_history & 0x01 ) {
|
||||||
|
@ -2776,6 +2777,8 @@ sub startup {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$exclude_before //= $now - 300;
|
||||||
|
|
||||||
if ( not $eva ) {
|
if ( not $eva ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2790,13 +2793,13 @@ sub startup {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $stationboard = $self->get_departures( $eva, 0, 40, 1 );
|
my $stationboard = $self->get_departures( $eva, 10, 40, 1 );
|
||||||
if ( $stationboard->{errstr} ) {
|
if ( $stationboard->{errstr} ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@{ $stationboard->{results} } = map { $_->[0] }
|
@{ $stationboard->{results} } = map { $_->[0] }
|
||||||
sort { $a->[1] <=> $b->[1] }
|
sort { $a->[1] <=> $b->[1] }
|
||||||
map { [ $_, $_->departure ? $_->departure->epoch : 0 ] }
|
map { [ $_, $_->departure ? $_->departure->epoch : 0 ] }
|
||||||
@{ $stationboard->{results} };
|
@{ $stationboard->{results} };
|
||||||
my @results;
|
my @results;
|
||||||
my @cancellations;
|
my @cancellations;
|
||||||
|
@ -2850,7 +2853,13 @@ sub startup {
|
||||||
and List::Util::any { $_ eq $dest } @via )
|
and List::Util::any { $_ eq $dest } @via )
|
||||||
{
|
{
|
||||||
push( @results, [ $train, $dest ] );
|
push( @results, [ $train, $dest ] );
|
||||||
$via_count{$dest}++;
|
|
||||||
|
# Show all past and up to two future departures per destination
|
||||||
|
if ( not $train->departure
|
||||||
|
or $train->departure->epoch >= $now )
|
||||||
|
{
|
||||||
|
$via_count{$dest}++;
|
||||||
|
}
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue