diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 8d661d2..4195001 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -419,21 +419,6 @@ sub startup { } ); - $self->helper( - 'grep_unknown_stations' => sub { - my ( $self, @stations ) = @_; - - my @unknown_stations; - for my $station (@stations) { - my $station_info = $self->stations->get_by_name($station); - if ( not $station_info ) { - push( @unknown_stations, $station ); - } - } - return @unknown_stations; - } - ); - $self->helper( 'load_icon' => sub { my ( $self, $load ) = @_; @@ -750,7 +735,7 @@ sub startup { $has_arrived = $train->arrival->epoch < $now->epoch ? 1 : 0; if ($has_arrived) { my @unknown_stations - = $self->grep_unknown_stations( $train->route ); + = $self->stations->grep_unknown( $train->route ); if (@unknown_stations) { $self->app->log->warn( sprintf( diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index d9e17f0..2bbc0bc 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -34,19 +34,6 @@ sub epoch_to_dt { ); } -sub grep_unknown_stations { - my ( $self, @stations ) = @_; - - my @unknown_stations; - for my $station (@stations) { - my $station_info = $self->{stations}->get_by_name($station); - if ( not $station_info ) { - push( @unknown_stations, $station ); - } - } - return @unknown_stations; -} - sub new { my ( $class, %opt ) = @_; @@ -917,8 +904,8 @@ sub sanity_check { } if ( $journey->{edited} & 0x0010 and not $lax ) { my @unknown_stations - = $self->grep_unknown_stations( map { $_->[0] } - @{ $journey->{route} } ); + = $self->{stations} + ->grep_unknown( map { $_->[0] } @{ $journey->{route} } ); if (@unknown_stations) { return 'Unbekannte Station(en): ' . join( ', ', @unknown_stations ); } diff --git a/lib/Travelynx/Model/Stations.pm b/lib/Travelynx/Model/Stations.pm index 6c898b1..62504d3 100644 --- a/lib/Travelynx/Model/Stations.pm +++ b/lib/Travelynx/Model/Stations.pm @@ -61,6 +61,16 @@ sub get_by_name { ->hash; } +# Slow +sub get_by_names { + my ( $self, @names ) = @_; + + my @ret + = $self->{pg}->db->select( 'stations', '*', { name => { '=', \@names } } ) + ->hashes->each; + return @ret; +} + # Slow sub get_by_ds100 { my ( $self, $ds100, %opt ) = @_; @@ -85,4 +95,14 @@ sub search { // $self->get_by_name( $identifier, %opt ); } +# Slow +sub grep_unknown { + my ( $self, @stations ) = @_; + + my %station = map { $_->{name} => 1 } $self->get_by_names(@stations); + my @unknown_stations = grep { not $station{$_} } @stations; + + return @unknown_stations; +} + 1;