diff options
-rwxr-xr-x | bin/hafas-m | 14 | ||||
-rw-r--r-- | lib/Travel/Status/DE/HAFAS/Journey.pm | 27 |
2 files changed, 28 insertions, 13 deletions
diff --git a/bin/hafas-m b/bin/hafas-m index 4676c49..c32f747 100755 --- a/bin/hafas-m +++ b/bin/hafas-m @@ -439,18 +439,10 @@ elsif ( $opt{journey} ) { $delay_fmt = $delay_len + 3; } - if ( @prods == 1 ) { - if ( $prev_prod->operator ) { - printf( "Betrieb: %s\n", $prev_prod->operator ); - } - } - else { - printf( - "Betrieb: %s\n", - join( q{, }, - uniq map { $_->operator } grep { $_->operator } @prods ) - ); + if ( $result->operators ) { + printf( "Betrieb: %s\n", join( q{, }, $result->operators ) ); } + $prev_prod = 0; my $desc = Travel::Status::DE::HAFAS::get_service($service) // {}; diff --git a/lib/Travel/Status/DE/HAFAS/Journey.pm b/lib/Travel/Status/DE/HAFAS/Journey.pm index afdea48..986582a 100644 --- a/lib/Travel/Status/DE/HAFAS/Journey.pm +++ b/lib/Travel/Status/DE/HAFAS/Journey.pm @@ -8,7 +8,7 @@ use 5.014; use parent 'Class::Accessor'; use DateTime::Format::Strptime; -use List::Util qw(any); +use List::Util qw(any uniq); use Travel::Status::DE::HAFAS::Stop; our $VERSION = '6.00'; @@ -270,6 +270,23 @@ sub messages { return; } +sub operators { + my ($self) = @_; + + if ( $self->{operators} ) { + return @{ $self->{operators} }; + } + + $self->{operators} = [ + uniq map { ( $_->prod_arr // $_->prod_dep )->operator } grep { + ( $_->prod_arr or $_->prod_dep ) + and ( $_->prod_arr // $_->prod_dep )->operator + } $self->route + ]; + + return @{ $self->{operators} }; +} + sub polyline { my ($self) = @_; @@ -549,7 +566,13 @@ detailed delay reasons (e.g. "switch damage between X and Y, expect delays"). =item $journey->operator The operator responsible for this journey. Returns undef -if the backend does not provide an operator. +if the backend does not provide an operator. Note that the operator may +change along the journey -- in this case, the returned operator depends on +the backend and appears to be the first one in most cases. + +=item $journey->operators + +List of all operators observed along the journey. =item $journey->station (station only) |