diff options
| author | Daniel Friesel <daniel.friesel@uos.de> | 2020-01-08 18:42:17 +0100 | 
|---|---|---|
| committer | Daniel Friesel <daniel.friesel@uos.de> | 2020-01-08 18:42:17 +0100 | 
| commit | e8b610f3e64a395864f50c8e798de08678bfb228 (patch) | |
| tree | a73b9bcd1e7cd47f6ff262a91397f64af3a113e3 | |
| parent | 172c8a3d0092c663faa8e008d90a23bb5ecdf76e (diff) | |
fetch trip ID when checked in
| -rwxr-xr-x | lib/Travelynx.pm | 84 | 
1 files changed, 83 insertions, 1 deletions
| diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index acf82e0..e71ad9e 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -1917,6 +1917,67 @@ sub startup {  	);  	$self->helper( +		'get_hafas_tripid_p' => sub { +			my ( $self, $train ) = @_; + +			my $promise = Mojo::Promise->new; +			my $cache   = $self->app->cache_iris_main; +			my $eva     = $train->station_uic; + +			my $dep_ts = DateTime->now( time_zone => 'Europe/Berlin' ); +			my $url +			  = "https://2.db.transport.rest/stations/${eva}/departures?duration=5&when=$dep_ts"; + +			if ( $train->sched_departure ) { +				$dep_ts = $train->sched_departure->epoch; +				$url +				  = "https://2.db.transport.rest/stations/${eva}/departures?duration=5&when=$dep_ts"; +			} +			elsif ( $train->sched_arrival ) { +				$dep_ts = $train->sched_arrival->epoch; +				$url +				  = "https://2.db.transport.rest/stations/${eva}/arrivals?duration=5&when=$dep_ts"; +			} + +			if ( my $content = $cache->get($url) ) { +				$promise->resolve($content); +				return $promise; +			} + +			$self->ua->request_timeout(5)->get_p( +				$url => { +					'User-Agent' => 'travelynx/' . $self->app->config->{version} +				} +			)->then( +				sub { +					my ($tx) = @_; +					my $body = decode( 'utf-8', $tx->res->body ); +					my $json = JSON->new->decode($body); + +					for my $result ( @{$json} ) { +						if (    $result->{line} +							and $result->{line}{fahrtNr} == $train->train_no ) +						{ +							my $trip_id = $result->{tripId}; +							$cache->set( $url, $trip_id ); +							$promise->resolve($trip_id); +							return; +						} +					} +					$promise->reject; +				} +			)->catch( +				sub { +					my ($err) = @_; +					$promise->reject($err); +				} +			)->wait; + +			return $promise; +		} +	); + +	$self->helper(  		'get_hafas_json_p' => sub {  			my ( $self, $url ) = @_; @@ -2035,7 +2096,7 @@ sub startup {  			my $journey = $db->select(  				'in_transit_str', -				[ 'arr_eva', 'dep_eva', 'route' ], +				[ 'arr_eva', 'dep_eva', 'route', 'data' ],  				{ user_id => $uid }  			)->expand->hash; @@ -2043,6 +2104,27 @@ sub startup {  				return;  			} +			if ( not $journey->{data}{trip_id} ) { +				$self->get_hafas_tripid_p($train)->then( +					sub { +						my ($trip_id) = @_; + +						my $res = $db->select( 'in_transit', ['data'], +							{ user_id => $uid } ); +						my $res_h = $res->expand->hash; +						my $data  = $res_h->{data} // {}; + +						$data->{trip_id} = $trip_id; + +						$db->update( +							'in_transit', +							{ data    => JSON->new->encode($data) }, +							{ user_id => $uid } +						); +					} +				)->wait; +			} +  			my ($platform) = ( ( $train->platform // 0 ) =~ m{(\d+)} );  			my $route = $journey->{route}; | 
