Commit bdfd43c8 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

parse info and delay messages

parent 6a8f2dcb
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -108,18 +108,18 @@ sub display_result {
		die("Nothing to show\n");
	}

	for my $i ( 0 .. 4 ) {
	for my $i ( 0 .. 5 ) {
		$line_length[$i] = max map { length( $_->[$i] ) } @lines;
	}

	for my $line (@lines) {
		printf(
			join( q{  }, ( map { "%-${_}s" } @line_length ) ) . "\n",
			@{$line}[ 0 .. 4 ]
			@{$line}[ 0 .. 5 ]
		);

		if ($show_full_route) {
			print "\n" . $line->[5] . "\n\n\n";
			print "\n" . $line->[6] . "\n\n\n";
		}
	}

@@ -145,12 +145,22 @@ for my $d ( $status->results() ) {
		next;
	}

	my $delay = q{};

	if ( $d->delay ) {
		$delay = ' +' . $d->delay;
	}

	push(
		@output,
		[
			$d->time, $d->train,
			$d->time . $delay,
			$d->train,
			$arrivals ? q{} : join( q{  }, $d->route_interesting ),
			$d->route_end, $d->platform, join( "\n", $d->route ),
			$d->route_end,
			$d->platform,
			join( ' -- ', $d->info ),
			join( "\n",   $d->route ),
		]
	);
}
+16 −0
Original line number Diff line number Diff line
@@ -150,6 +150,9 @@ sub get_realtime {
		my $e_tl = ( $s->findnodes('./tl') )[0];
		my $e_ar = ( $s->findnodes('./ar') )[0];
		my $e_dp = ( $s->findnodes('./dp') )[0];
		my @e_ms = $s->findnodes('.//m');

		my %messages;

		my $result = first { $_->raw_id eq $id } $self->results;

@@ -159,6 +162,19 @@ sub get_realtime {

		$result->add_realtime($s);

		for my $e_m (@e_ms) {
			my $type  = $e_m->getAttribute('t');
			my $value = $e_m->getAttribute('c');
			my $id    = $e_m->getAttribute('id');
			my $ts    = $e_m->getAttribute('ts');

			if ($value) {
				$messages{$id} = [ $ts, $type, $value ];
			}
		}

		$result->add_messages(%messages);

		if ($e_tl) {
			$result->add_tl(
				class     => $e_tl->getAttribute('f'),    # D N S F
+74 −1
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ package Travel::Status::DE::IRIS::Result;
use strict;
use warnings;
use 5.010;
use utf8;

no if $] >= 5.018, warnings => "experimental::smartmatch";

@@ -10,9 +11,64 @@ use parent 'Class::Accessor';
use Carp qw(cluck);
use DateTime;
use DateTime::Format::Strptime;
use List::MoreUtils qw(uniq);

our $VERSION = '0.00';

sub translate_msg {
	my ( $self, $msg ) = @_;

	my %translation = (
		2  => 'Polizeiliche Ermittlung',
		3  => 'Feuerwehreinsatz neben der Strecke',
		5  => 'Ärztliche Versorgung eines Fahrgastes',
		7  => 'Personen im Gleis',
		8  => 'Notarzteinsatz am Gleis',
		10 => 'Ausgebrochene Tiere im Gleis',
		11 => 'Unwetter',
		15 => 'Beeinträchtigung durch Vandalismus',
		16 => 'Entschärfung einer Fliegerbombe',
		17 => 'Beschädigung einer Brücke',
		18 => 'Umgestürzter Baum im Gleis',
		19 => 'Unfall an einem Bahnübergang',
		20 => 'Tiere im Gleis',
		21 => 'Warten auf weitere Reisende',
		22 => 'Witterungsbedingte Störung',
		23 => 'Feuerwehreinsatz auf Bahngelände',
		24 => 'Verspätung aus dem Ausland',
		25 => 'Warten auf verspätete Zugteile',
		28 => 'Gegenstände im Gleis',
		31 => 'Bauarbeiten',
		32 => 'Verzögerung beim Ein-/Ausstieg',
		33 => 'Oberleitungsstörung',
		34 => 'Signalstörung',
		35 => 'Streckensperrung',
		36 => 'Technische Störung am Zug',
		38 => 'Technische Störung an der Strecke',
		39 => 'Anhängen von zusätzlichen Wagen',
		40 => 'Stellwerksstörung/-ausfall',
		41 => 'Störung an einem Bahnübergang',
		42 => 'Außerplanmäßige Geschwindigkeitsbeschränkung',
		43 => 'Verspätung eines vorausfahrenden Zuges',
		44 => 'Warten auf einen entgegenkommenden Zug',
		45 => 'Überholung durch anderen Zug',
		46 => 'Warten auf freie Einfahrt',
		47 => 'Verspätete Bereitstellung',
		48 => 'Verspätung aus vorheriger Fahrt',
		80 => 'Abweichende Wagenreihung',
		83 => 'Fehlender Zugteil',
		86 => 'Keine Reservierungsanzeige',
		90 => 'Kein Bordrestaurant/Bordbistro',
		91 => 'Keine Fahrradmitnahme',
		92 => 'Rollstuhlgerechtes WC in einem Wagen ausgefallen',
		93 => 'Kein rollstuhlgerechtes WC',
		98 => 'Kein rollstuhlgerechter Wagen',
		99 => 'Verzögerungen im Betriebsablauf',
	);

	return $translation{$msg} // "?($msg)";
}

Travel::Status::DE::IRIS::Result->mk_ro_accessors(
	qw(arrival date datetime delay departure line_no platform raw_id
	  realtime_xml route_start route_end
@@ -102,6 +158,12 @@ sub add_dp {
	}
}

sub add_messages {
	my ( $self, %messages ) = @_;

	$self->{messages} = \%messages;
}

sub add_realtime {
	my ( $self, $xmlobj ) = @_;

@@ -128,6 +190,17 @@ sub destination {
	return $self->route_end;
}

sub info {
	my ($self) = @_;

	my @messages = sort keys %{ $self->{messages} };
	my @ids = uniq( map { $self->{messages}{$_}->[2] } @messages );

	my @info = map { $self->translate_msg($_) } @ids;

	return @info;
}

sub line {
	my ($self) = @_;