Unverified Commit 4a3feb4c authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

mgate: add message support

parent 5c2e9295
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -185,10 +185,10 @@ sub display_result {
					print "\n";
					$first_message = 0;
				}
				printf( "# %s\n", $msg->header );
				if ( $msg->lead ) {
					printf( "# %s\n", $msg->lead );
				if ( $msg->short ) {
					printf( "# %s\n", $msg->short );
				}
				printf( "# %s\n", $msg->text );
			}
		}

@@ -219,7 +219,12 @@ 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 );
		if ( $m->short ) {
			printf( "# (%d) %s\n# %s\n\n", $m->{id}, $m->short, $m->text );
		}
		else {
			printf( "# (%d) %s\n\n", $m->{id}, $m->text );
		}
	}
}

+38 −0
Original line number Diff line number Diff line
@@ -497,6 +497,32 @@ sub similar_stops {
	return;
}

sub add_message {
	my ( $self, $json ) = @_;

	my $short = $json->{txtS};
	my $text  = $json->{txtN};
	my $code  = $json->{code};
	my $prio  = $json->{prio};

	for my $message ( @{ $self->{messages} } ) {
		if ( $code eq $message->{code} and $text eq $message->{text} ) {
			$message->{ref_count}++;
			return $message;
		}
	}

	my $message = Travel::Status::DE::HAFAS::Message->new(
		short     => $short,
		text      => $text,
		code      => $code,
		prio      => $prio,
		ref_count => 1,
	);
	push( @{ $self->{messages} }, $message );
	return $message;
}

sub add_message_node {
	my ( $self, $node ) = @_;

@@ -623,6 +649,7 @@ sub parse_mgate {
	my @prodL = @{ $self->{raw_json}{svcResL}[0]{res}{common}{prodL} // [] };
	my @opL   = @{ $self->{raw_json}{svcResL}[0]{res}{common}{opL}   // [] };
	my @icoL  = @{ $self->{raw_json}{svcResL}[0]{res}{common}{icoL}  // [] };
	my @remL  = @{ $self->{raw_json}{svcResL}[0]{res}{common}{remL}  // [] };
	my @jnyL  = @{ $self->{raw_json}{svcResL}[0]{res}{jnyL}          // [] };

	for my $result (@jnyL) {
@@ -660,6 +687,16 @@ sub parse_mgate {
			}
		}

		my @messages;
		for my $msg ( @{ $result->{msgL} // [] } ) {
			if ( $msg->{type} eq 'REM' and defined $msg->{remX} ) {
				push( @messages, $self->add_message( $remL[ $msg->{remX} ] ) );
			}
			else {
				say "Unknown message type $msg->{type}";
			}
		}

		push(
			@{ $self->{results} },
			Travel::Status::DE::HAFAS::Result->new(
@@ -674,6 +711,7 @@ sub parse_mgate {
				route_end      => $destination,
				platform       => $platform,
				new_platform   => $new_platform,
				messages       => \@messages,
			)
		);
	}
+2 −1
Original line number Diff line number Diff line
@@ -8,7 +8,8 @@ use parent 'Class::Accessor';

our $VERSION = '3.01';

Travel::Status::DE::HAFAS::Message->mk_ro_accessors(qw(header lead ref_count));
Travel::Status::DE::HAFAS::Message->mk_ro_accessors(
	qw(short text code prio ref_count));

sub new {
	my ( $obj, %conf ) = @_;