Loading bin/hafas-m +26 −6 Original line number Diff line number Diff line Loading @@ -147,9 +147,13 @@ sub display_result { for my $line (@lines) { my $d = $line->[6]; if ( $d->messages ) { print "\n"; my $first_message = 1; for my $msg ( $d->messages ) { if ( $msg->{ref_count} == 1 ) { if ($first_message) { print "\n"; $first_message = 0; } printf( "# %s\n", $msg ); } } Loading @@ -175,12 +179,28 @@ if ( my $err = $status->errstr ) { exit 2; } for my $d ( $status->results() ) { my $message_id = 1; for my $m ( $status->messages ) { if ( $m->{ref_count} > 1 ) { $m->{id} = $message_id++; printf( "# (%d) %s\n# %s\n\n", $m->{id}, $m->{header}, $m->{lead} ); } } for my $d ( $status->results ) { if ( $ignore_late and $d->delay ) { next; } my $info_line = $d->info // q{}; for my $message ( $d->messages ) { if ( $message->{ref_count} > 1 ) { $info_line = sprintf( '(%d) %s', $message->{id}, $info_line ); } } push( @output, [ Loading @@ -191,7 +211,7 @@ for my $d ( $status->results() ) { $d->train, $d->route_end, ( $d->platform // q{} ) . ( $d->is_changed_platform ? ' !' : q{} ), $d->info, $info_line, $d ] ); Loading lib/Travel/Status/DE/HAFAS.pm +35 −9 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ no if $] >= 5.018, warnings => 'experimental::smartmatch'; use Carp qw(confess); use DateTime; use DateTime::Format::Strptime; use List::Util qw(any); use LWP::UserAgent; use POSIX qw(strftime); use Travel::Status::DE::HAFAS::Result; Loading Loading @@ -124,6 +125,8 @@ sub new { developer_mode => $conf{developer_mode}, exclusive_mots => $conf{exclusive_mots}, excluded_mots => $conf{excluded_mots}, messages => [], results => [], station => $conf{station}, ua => $ua, post => { Loading Loading @@ -171,10 +174,6 @@ sub new { # errors in delay="...") when setting the language to dutch/italian. # No, I don't know why. if ( $ref->{developer_mode} ) { say $ref->{raw_xml}; } $ref->{tree} = XML::LibXML->load_xml( string => $ref->{raw_xml}, ); Loading @@ -184,6 +183,7 @@ sub new { } $ref->check_input_error; $ref->prepare_results; return $ref; } Loading Loading @@ -282,16 +282,39 @@ sub similar_stops { return; } sub results { sub add_message_node { my ( $self, $node ) = @_; my $header = $node->getAttribute('header'); my $lead = $node->getAttribute('lead'); for my $message ( @{ $self->{messages} } ) { if ( $header eq $message->{header} and $lead eq $message->{lead} ) { $message->{ref_count}++; return $message; } } my $message = { header => $header, lead => $lead, ref_count => 1, }; push( @{ $self->{messages} }, $message ); return $message; } sub messages { my ($self) = @_; return @{ $self->{messages} }; } sub prepare_results { my ($self) = @_; my $mode = $self->{post}->{boardType}; my $xp_element = XML::LibXML::XPathExpression->new('//Journey'); my $xp_msg = XML::LibXML::XPathExpression->new('./HIMMessage'); if ( defined $self->{results} ) { return @{ $self->{results} }; } if ( not defined $self->{tree} ) { return; } Loading Loading @@ -326,7 +349,7 @@ sub results { } for my $n (@message_nodes) { push( @messages, $n->getAttribute('header') ); push( @messages, $self->add_message_node($n) ); } # Some backends report dd.mm.yy, some report dd.mm.yyyy Loading Loading @@ -369,7 +392,10 @@ sub results { ) ); } } sub results { my ($self) = @_; return @{ $self->{results} }; } Loading Loading
bin/hafas-m +26 −6 Original line number Diff line number Diff line Loading @@ -147,9 +147,13 @@ sub display_result { for my $line (@lines) { my $d = $line->[6]; if ( $d->messages ) { print "\n"; my $first_message = 1; for my $msg ( $d->messages ) { if ( $msg->{ref_count} == 1 ) { if ($first_message) { print "\n"; $first_message = 0; } printf( "# %s\n", $msg ); } } Loading @@ -175,12 +179,28 @@ if ( my $err = $status->errstr ) { exit 2; } for my $d ( $status->results() ) { my $message_id = 1; for my $m ( $status->messages ) { if ( $m->{ref_count} > 1 ) { $m->{id} = $message_id++; printf( "# (%d) %s\n# %s\n\n", $m->{id}, $m->{header}, $m->{lead} ); } } for my $d ( $status->results ) { if ( $ignore_late and $d->delay ) { next; } my $info_line = $d->info // q{}; for my $message ( $d->messages ) { if ( $message->{ref_count} > 1 ) { $info_line = sprintf( '(%d) %s', $message->{id}, $info_line ); } } push( @output, [ Loading @@ -191,7 +211,7 @@ for my $d ( $status->results() ) { $d->train, $d->route_end, ( $d->platform // q{} ) . ( $d->is_changed_platform ? ' !' : q{} ), $d->info, $info_line, $d ] ); Loading
lib/Travel/Status/DE/HAFAS.pm +35 −9 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ no if $] >= 5.018, warnings => 'experimental::smartmatch'; use Carp qw(confess); use DateTime; use DateTime::Format::Strptime; use List::Util qw(any); use LWP::UserAgent; use POSIX qw(strftime); use Travel::Status::DE::HAFAS::Result; Loading Loading @@ -124,6 +125,8 @@ sub new { developer_mode => $conf{developer_mode}, exclusive_mots => $conf{exclusive_mots}, excluded_mots => $conf{excluded_mots}, messages => [], results => [], station => $conf{station}, ua => $ua, post => { Loading Loading @@ -171,10 +174,6 @@ sub new { # errors in delay="...") when setting the language to dutch/italian. # No, I don't know why. if ( $ref->{developer_mode} ) { say $ref->{raw_xml}; } $ref->{tree} = XML::LibXML->load_xml( string => $ref->{raw_xml}, ); Loading @@ -184,6 +183,7 @@ sub new { } $ref->check_input_error; $ref->prepare_results; return $ref; } Loading Loading @@ -282,16 +282,39 @@ sub similar_stops { return; } sub results { sub add_message_node { my ( $self, $node ) = @_; my $header = $node->getAttribute('header'); my $lead = $node->getAttribute('lead'); for my $message ( @{ $self->{messages} } ) { if ( $header eq $message->{header} and $lead eq $message->{lead} ) { $message->{ref_count}++; return $message; } } my $message = { header => $header, lead => $lead, ref_count => 1, }; push( @{ $self->{messages} }, $message ); return $message; } sub messages { my ($self) = @_; return @{ $self->{messages} }; } sub prepare_results { my ($self) = @_; my $mode = $self->{post}->{boardType}; my $xp_element = XML::LibXML::XPathExpression->new('//Journey'); my $xp_msg = XML::LibXML::XPathExpression->new('./HIMMessage'); if ( defined $self->{results} ) { return @{ $self->{results} }; } if ( not defined $self->{tree} ) { return; } Loading Loading @@ -326,7 +349,7 @@ sub results { } for my $n (@message_nodes) { push( @messages, $n->getAttribute('header') ); push( @messages, $self->add_message_node($n) ); } # Some backends report dd.mm.yy, some report dd.mm.yyyy Loading Loading @@ -369,7 +392,10 @@ sub results { ) ); } } sub results { my ($self) = @_; return @{ $self->{results} }; } Loading