diff options
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/Travelynx.pm | 38 | ||||
| -rwxr-xr-x | lib/Travelynx/Controller/Profile.pm | 28 | ||||
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 15 | ||||
| -rw-r--r-- | lib/Travelynx/Model/InTransit.pm | 32 | 
4 files changed, 82 insertions, 31 deletions
| diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 521ea2c..f9723c1 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -1890,6 +1890,7 @@ sub startup {  				uid             => $uid,  				db              => $db,  				with_data       => 1, +				with_polyline   => 1,  				with_timestamps => 1,  				with_visibility => 1,  				postprocess     => 1, @@ -2320,12 +2321,12 @@ sub startup {  			my @stations = uniq_by { $_->{name} } map {  				{ -					name   => $_->{to_name}, -					latlon => $_->{to_latlon} +					name   => $_->{to_name}   // $_->{arr_name}, +					latlon => $_->{to_latlon} // $_->{arr_latlon},  				},  				  { -					name   => $_->{from_name}, -					latlon => $_->{from_latlon} +					name   => $_->{from_name}   // $_->{dep_name}, +					latlon => $_->{from_latlon} // $_->{dep_latlon}  				  }  			} @journeys; @@ -2350,8 +2351,8 @@ sub startup {  			for my $journey (@polyline_journeys) {  				my @polyline = @{ $journey->{polyline} }; -				my $from_eva = $journey->{from_eva}; -				my $to_eva   = $journey->{to_eva}; +				my $from_eva = $journey->{from_eva} // $journey->{dep_eva}; +				my $to_eva   = $journey->{to_eva}   // $journey->{arr_eva};  				my $from_index  				  = first_index { $_->[2] and $_->[2] == $from_eva } @polyline; @@ -2387,7 +2388,7 @@ sub startup {  					or $to_index == -1 )  				{  					# Fall back to route -					delete $journey->{polyline}; +					push( @beeline_journeys, $journey );  					next;  				} @@ -2422,13 +2423,19 @@ sub startup {  				my @route = @{ $journey->{route} };  				my $from_index = first_index { -					( $_->[1] and $_->[1] == $journey->{from_eva} ) -					  or $_->[0] eq $journey->{from_name} +					(         $_->[1] +						  and $_->[1] +						  == ( $journey->{from_eva} // $journey->{dep_eva} ) ) +					  or $_->[0] eq +					  ( $journey->{from_name} // $journey->{dep_name} )  				}  				@route;  				my $to_index = first_index { -					( $_->[1] and $_->[1] == $journey->{to_eva} ) -					  or $_->[0] eq $journey->{to_name} +					(         $_->[1] +						  and $_->[1] +						  == ( $journey->{to_eva} // $journey->{arr_eva} ) ) +					  or $_->[0] eq +					  ( $journey->{to_name} // $journey->{arr_name} )  				}  				@route; @@ -2436,15 +2443,15 @@ sub startup {  					my $rename = $self->app->renamed_station;  					$from_index = first_index {  						( $rename->{ $_->[0] } // $_->[0] ) eq -						  $journey->{from_name} +						  ( $journey->{from_name} // $journey->{dep_name} )  					}  					@route;  				}  				if ( $to_index == -1 ) {  					my $rename = $self->app->renamed_station;  					$to_index = first_index { -						( $rename->{ $_->[0] } // $_->[0] ) eq -						  $journey->{to_name} +						( $rename->{ $_->[0] }  // $_->[0] ) eq +						  ( $journey->{to_name} // $journey->{arr_name} )  					}  					@route;  				} @@ -2467,7 +2474,8 @@ sub startup {  				# and entered manually (-> beeline also shown on map, typically  				# significantly differs from detailed route) -- unless the user  				# sets include_manual, of course. -				if (    $journey->{edited} & 0x0010 +				if (    $journey->{edited} +					and $journey->{edited} & 0x0010  					and @route <= 2  					and not $include_manual )  				{ diff --git a/lib/Travelynx/Controller/Profile.pm b/lib/Travelynx/Controller/Profile.pm index c35642d..db30d36 100755 --- a/lib/Travelynx/Controller/Profile.pm +++ b/lib/Travelynx/Controller/Profile.pm @@ -111,6 +111,13 @@ sub profile {  		$status->{arr_name} = undef;  	} +	my $map_data = {}; +	if ( $status->{checked_in} ) { +		$map_data = $self->journeys_to_map_data( +			journeys => [$status], +		); +	} +  	my @journeys;  	if ( @@ -190,6 +197,8 @@ sub profile {  			: 0,  			journey  => $status,  			journeys => [@journeys], +			with_map => 1, +			%{$map_data},  		}  	);  } @@ -494,6 +503,13 @@ sub user_status {  		$og_data{description} = $tw_data{description} = q{};  	} +	my $map_data = {}; +	if ( $status->{checked_in} ) { +		$map_data = $self->journeys_to_map_data( +			journeys => [$status], +		); +	} +  	$self->respond_to(  		json => {  			json => { @@ -516,7 +532,9 @@ sub user_status {  			journey   => $status,  			twitter   => \%tw_data,  			opengraph => \%og_data, -			version   => $self->app->config->{version} // 'UNKNOWN', +			with_map  => 1, +			%{$map_data}, +			version => $self->app->config->{version} // 'UNKNOWN',  		},  	);  } @@ -555,6 +573,7 @@ sub status_card {  	my $status = $self->get_user_status( $user->{id} );  	my $visibility; +	my $map_data = {};  	if ( $status->{checked_in} or $status->{arr_name} ) {  		my $visibility = $status->{effective_visibility};  		if ( @@ -579,12 +598,19 @@ sub status_card {  		$status->{arr_name} = undef;  	} +	if ( $status->{checked_in} ) { +		$map_data = $self->journeys_to_map_data( +			journeys => [$status], +		); +	} +  	$self->render(  		'_public_status_card',  		name         => $name,  		privacy      => $user,  		journey      => $status,  		from_profile => $self->param('profile') ? 1 : 0, +		%{$map_data},  	);  } diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 4653043..0d89fb9 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -353,6 +353,9 @@ sub homepage {  		$self->stash( timeline => [@timeline] );  		my @recent_targets;  		if ( $status->{checked_in} ) { +			my $map_data = $self->journeys_to_map_data( +				journeys => [$status], +			);  			my $journey_visibility  			  = $self->compute_effective_visibility(  				$user->{default_visibility_str}, @@ -371,6 +374,8 @@ sub homepage {  							journey_visibility => $journey_visibility,  							connections_iris   => $connections_iris,  							connections_hafas  => $connections_hafas, +							with_map           => 1, +							%{$map_data},  						);  						$self->users->mark_seen( uid => $uid );  					} @@ -381,6 +386,8 @@ sub homepage {  							user               => $user,  							user_status        => $status,  							journey_visibility => $journey_visibility, +							with_map           => 1, +							%{$map_data},  						);  						$self->users->mark_seen( uid => $uid );  					} @@ -393,6 +400,8 @@ sub homepage {  					user               => $user,  					user_status        => $status,  					journey_visibility => $journey_visibility, +					with_map           => 1, +					%{$map_data},  				);  				$self->users->mark_seen( uid => $uid );  				return; @@ -431,6 +440,9 @@ sub status_card {  	$self->stash( timeline => [@timeline] );  	if ( $status->{checked_in} ) { +		my $map_data = $self->journeys_to_map_data( +			journeys => [$status], +		);  		my $journey_visibility  		  = $self->compute_effective_visibility(  			$self->current_user->{default_visibility_str}, @@ -448,6 +460,7 @@ sub status_card {  						journey_visibility => $journey_visibility,  						connections_iris   => $connections_iris,  						connections_hafas  => $connections_hafas, +						%{$map_data},  					);  				}  			)->catch( @@ -456,6 +469,7 @@ sub status_card {  						'_checked_in',  						journey            => $status,  						journey_visibility => $journey_visibility, +						%{$map_data},  					);  				}  			)->wait; @@ -465,6 +479,7 @@ sub status_card {  			'_checked_in',  			journey            => $status,  			journey_visibility => $journey_visibility, +			%{$map_data},  		);  	}  	elsif ( $status->{cancellation} ) { diff --git a/lib/Travelynx/Model/InTransit.pm b/lib/Travelynx/Model/InTransit.pm index b2be995..a90cd08 100644 --- a/lib/Travelynx/Model/InTransit.pm +++ b/lib/Travelynx/Model/InTransit.pm @@ -12,11 +12,12 @@ use DateTime;  use JSON;  my %visibility_itoa = ( -	100 => 'public', -	80  => 'travelynx', -	60  => 'followers', -	30  => 'unlisted', -	10  => 'private', +	100     => 'public', +	80      => 'travelynx', +	60      => 'followers', +	30      => 'unlisted', +	10      => 'private', +	default => 'default',  );  my %visibility_atoi = ( @@ -360,16 +361,14 @@ sub postprocess {  	$ret->{wagongroups}        = $ret->{user_data}{wagongroups};  	$ret->{platform_type} = 'Gleis'; -	if ( $ret->{train_type} =~ m{ ast | bus | ruf }ix ) { +	if ( $ret->{train_type} and $ret->{train_type} =~ m{ ast | bus | ruf }ix ) {  		$ret->{platform_type} = 'Steig';  	}  	$ret->{visibility_str} -	  = $ret->{visibility} -	  ? $visibility_itoa{ $ret->{visibility} } -	  : 'default'; +	  = $visibility_itoa{ $ret->{visibility} // 'default' };  	$ret->{effective_visibility_str} -	  = $visibility_itoa{ $ret->{effective_visibility} }; +	  = $visibility_itoa{ $ret->{effective_visibility} // 'default' };  	my @parsed_messages;  	for my $message ( @{ $ret->{messages} // [] } ) { @@ -461,7 +460,7 @@ sub get {  	my $table = 'in_transit'; -	if ( $opt{with_timestamps} ) { +	if ( $opt{with_timestamps} or $opt{with_polyline} ) {  		$table = 'in_transit_str';  	} @@ -475,13 +474,16 @@ sub get {  		$ret = $res->hash;  	} +	if ( $opt{with_polyline} and $ret ) { +		$ret->{dep_latlon} = [ $ret->{dep_lat}, $ret->{dep_lon} ]; +		$ret->{arr_latlon} = [ $ret->{arr_lat}, $ret->{arr_lon} ]; +	} +  	if ( $opt{with_visibility} and $ret ) {  		$ret->{visibility_str} -		  = $ret->{visibility} -		  ? $visibility_itoa{ $ret->{visibility} } -		  : 'default'; +		  = $visibility_itoa{ $ret->{visibility} // 'default' };  		$ret->{effective_visibility_str} -		  = $visibility_itoa{ $ret->{effective_visibility} }; +		  = $visibility_itoa{ $ret->{effective_visibility} // 'default' };  	}  	if ( $opt{postprocess} and $ret ) { | 
