diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/DBInfoscreen.pm | 7 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 121 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Helper/HAFAS.pm | 2 | 
3 files changed, 126 insertions, 4 deletions
| diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm index bf18be2..4445d7f 100644 --- a/lib/DBInfoscreen.pm +++ b/lib/DBInfoscreen.pm @@ -40,8 +40,8 @@ sub startup {  			workers => $ENV{DBFAKEDISPLAY_WORKERS} // 2,  		},  		source_url => 'https://github.com/derf/db-fakedisplay', -		issue_url => 'https://github.com/derf/db-fakedisplay/issues', -		version => $ENV{DBFAKEDISPLAY_VERSION} // qx{git describe --dirty} +		issue_url  => 'https://github.com/derf/db-fakedisplay/issues', +		version    => $ENV{DBFAKEDISPLAY_VERSION} // qx{git describe --dirty}  		  // '???',  	); @@ -364,7 +364,8 @@ sub startup {  	$r->get('/_ajax_mapinfo/:tripid/:lineno')->to('map#ajax_route');  	$r->get('/map/:tripid/:lineno')->to('map#route');  	$r->get('/intersection/:trips')->to('map#intersection'); -	$r->get('/z/:train/:station')->to('stationboard#train_details'); +	$r->get('/z/:train/:station')->to('stationboard#station_train_details'); +	$r->get('/z/:train')->to('stationboard#train_details');  	$r->get('/map')->to('map#search_form');  	$r->get('/_trainsearch')->to('map#search'); diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 1abe998..0ea6c37 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -824,7 +824,7 @@ sub render_train {  	)->wait;  } -sub train_details { +sub station_train_details {  	my ($self)   = @_;  	my $train_no = $self->stash('train');  	my $station  = $self->stash('station'); @@ -919,6 +919,125 @@ sub train_details {  	);  } +sub train_details { +	my ($self) = @_; +	my $train = $self->stash('train'); + +	my ( $train_type, $train_no ) = ( $train =~ m{ ^ (\S+) \s+ (.*) $ }x ); + +	# TODO error handling + +	if ( $self->param('ajax') ) { +		delete $self->stash->{layout}; +	} + +	my $api_version = $Travel::Status::DE::IRIS::VERSION; + +	$self->stash( departures => [] ); +	$self->stash( title      => 'DBF' ); +	$self->stash( version    => $self->config->{version} ); + +	my $res = { +		train_type      => $train_type, +		train_line      => undef, +		train_no        => $train_no, +		route_pre_diff  => [], +		route_post_diff => [], +		moreinfo        => [], +		replaced_by     => [], +		replacement_for => [], +	}; + +	$self->stash( title     => "${train_type} ${train_no}" ); +	$self->stash( hide_opts => 1 ); + +	$self->render_later; + +	my $linetype = 'bahn'; + +	$self->hafas->get_route_timestamps_p( train_no => $train_no )->then( +		sub { +			my ( $route_ts, $route_info, $trainsearch ) = @_; + +			$res->{trip_id} = $trainsearch->{trip_id}; + +			if ( not defined $trainsearch->{trainClass} ) { +				$linetype = 'ext'; +			} +			elsif ( $trainsearch->{trainClass} <= 2 ) { +				$linetype = 'fern'; +			} +			elsif ( $trainsearch->{trainClass} <= 8 ) { +				$linetype = 'bahn'; +			} +			elsif ( $trainsearch->{trainClass} <= 16 ) { +				$linetype = 'sbahn'; +			} + +			$res->{origin}      = $route_info->{stations}[0]; +			$res->{destination} = $route_info->{stations}[-1]; + +			$res->{route_post_diff} +			  = [ map { { name => $_ } } @{ $route_info->{stations} } ]; + +			if ($route_ts) { +				for my $elem ( @{ $res->{route_post_diff} } ) { +					for my $key ( keys %{ $route_ts->{ $elem->{name} } // {} } ) +					{ +						$elem->{$key} = $route_ts->{ $elem->{name} }{$key}; +					} +				} +			} + +			if ( $route_info and @{ $route_info->{messages} // [] } ) { +				my $him = $route_info->{messages}; +				my @him_messages; +				for my $message ( @{$him} ) { +					if ( $message->{display} ) { +						push( @him_messages, +							[ $message->{header}, $message->{lead} ] ); +						if ( $message->{lead} =~ m{zuginfo.nrw/?\?msg=(\d+)} ) { +							push( +								@{ $res->{links} }, +								[ +									"Großstörung", +									"https://zuginfo.nrw/?msg=$1" +								] +							); +						} +					} +				} +				$res->{moreinfo} = [@him_messages]; +			} + +			$self->render( +				$self->param('ajax') ? '_train_details' : 'train_details', +				departure => $res, +				linetype  => $linetype, +				icetype   => $self->app->ice_type_map->{ $res->{train_no} }, +				details => {},    #$departure->{composition} // {}, +				dt_now => DateTime->now( time_zone => 'Europe/Berlin' ), + +				#station_name => "FIXME",#$station_name, +			); +		} +	)->catch( +		sub { +			my ($e) = @_; +			if ($e) { +				$self->render( +					'exception', +					exception => $e, +					snapshot  => {} +				); +			} +			else { +				$self->render('not_found'); +			} +		} +	)->wait; +} +  sub handle_result {  	my ( $self, $data ) = @_; diff --git a/lib/DBInfoscreen/Helper/HAFAS.pm b/lib/DBInfoscreen/Helper/HAFAS.pm index 2b8172e..bfc8ed4 100644 --- a/lib/DBInfoscreen/Helper/HAFAS.pm +++ b/lib/DBInfoscreen/Helper/HAFAS.pm @@ -321,6 +321,8 @@ sub get_route_timestamps_p {  				$promise->reject;  				return;  			} +			$trainsearch_result->{trainClass} +			  = $traininfo->{suggestions}[0]{trainClass};  			my $ret = {};  			my $strp = DateTime::Format::Strptime->new( | 
