diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2019-10-04 23:27:45 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2019-10-04 23:27:45 +0200 | 
| commit | 6d45533c14a45b548080077bd154ee06af571bf3 (patch) | |
| tree | 4f197d2e1d47bd3c7e14d22832d637dd455b9e5b /lib | |
| parent | 3582ba317bdb736b6dc65e32d84fe09e7929ed8f (diff) | |
mark cancelled stops in checkin view
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/Travelynx.pm | 53 | ||||
| -rw-r--r-- | lib/Travelynx/Command/work.pm | 4 | 
2 files changed, 53 insertions, 4 deletions
| diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 860ba87..ad4fd33 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -399,7 +399,7 @@ sub startup {  								sched_departure => $train->sched_departure,  								real_departure  => $train->departure,  								route           => $json->encode( -									[ map { [$_] } $train->route ] +									[ $self->route_diff($train) ]  								),  								messages => $json->encode(  									[ @@ -636,7 +636,7 @@ sub startup {  							real_arrival  => $train->arrival,  							cancelled => $train->arrival_is_cancelled ? 1 : 0,  							route => -							  $json->encode( [ map { [$_] } $train->route ] ), +							  $json->encode( [ $self->route_diff($train) ] ),  							messages => $json->encode(  								[  									map { [ $_->[0]->epoch, $_->[1] ] } @@ -1575,6 +1575,55 @@ sub startup {  	);  	$self->helper( +		'route_diff' => sub { +			my ( $self, $train ) = @_; +			my @json_route; +			my @route       = $train->route; +			my @sched_route = $train->sched_route; + +			say "real  is " . join( " - ", @route ); +			say "sched is " . join( " - ", @sched_route ); + +			my $route_idx = 0; +			my $sched_idx = 0; + +			while ( $route_idx <= $#route and $sched_idx <= $#sched_route ) { +				if ( $route[$route_idx] eq $sched_route[$sched_idx] ) { +					push( @json_route, [ $route[$route_idx], {}, undef ] ); +					$route_idx++; +					$sched_idx++; +				} + +				# this branch is inefficient, but won't be taken frequently +				elsif ( not( grep { $_ eq $route[$route_idx] } @sched_route ) ) +				{ +					push( @json_route, +						[ $route[$route_idx], {}, 'additional' ], +					); +					$route_idx++; +				} +				else { +					push( @json_route, +						[ $sched_route[$sched_idx], {}, 'cancelled' ], +					); +					$sched_idx++; +				} +			} +			while ( $route_idx <= $#route ) { +				push( @json_route, [ $route[$route_idx], {}, 'additional' ], ); +				$route_idx++; +			} +			while ( $sched_idx <= $#sched_route ) { +				push( @json_route, +					[ $sched_route[$sched_idx], {}, 'cancelled' ], +				); +				$sched_idx++; +			} +			return @json_route; +		} +	); + +	$self->helper(  		'get_dbdb_station_p' => sub {  			my ( $self, $ds100 ) = @_; diff --git a/lib/Travelynx/Command/work.pm b/lib/Travelynx/Command/work.pm index 6970918..b9a8520 100644 --- a/lib/Travelynx/Command/work.pm +++ b/lib/Travelynx/Command/work.pm @@ -56,7 +56,7 @@ sub run {  						dep_platform   => $train->platform,  						real_departure => $train->departure,  						route => -						  $json->encode( [ map { [$_] } $train->route ] ), +						  $json->encode( [ $self->app->route_diff($train) ] ),  						messages => $json->encode(  							[  								map { [ $_->[0]->epoch, $_->[1] ] } @@ -103,7 +103,7 @@ sub run {  						sched_arrival => $train->sched_arrival,  						real_arrival  => $train->arrival,  						route => -						  $json->encode( [ map { [$_] } $train->route ] ), +						  $json->encode( [ $self->app->route_diff($train) ] ),  						messages => $json->encode(  							[  								map { [ $_->[0]->epoch, $_->[1] ] } | 
