Commit 7694e626 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

show journey distances as well

parent 6afef992
Loading
Loading
Loading
Loading
+47 −2
Original line number Diff line number Diff line
@@ -4,7 +4,9 @@ use Mojolicious::Lite;
use Cache::File;
use DateTime;
use DBI;
use Geo::Distance;
use List::Util qw(first);
use List::MoreUtils qw(after_incl before_incl);
use Travel::Status::DE::IRIS;
use Travel::Status::DE::IRIS::Stations;

@@ -233,6 +235,18 @@ sub get_departures {
	}
}

sub get_station {
	my ($station_name) = @_;

	my @candidates
	  = Travel::Status::DE::IRIS::Stations::get_station($station_name);

	if ( @candidates == 1 ) {
		return $candidates[0];
	}
	return undef;
}

helper 'checkin' => sub {
	my ( $self, $station, $train_id ) = @_;

@@ -450,7 +464,8 @@ helper 'get_user_travels' => sub {
					type            => $train_type,
					line            => $train_line,
					no              => $train_no,
					messages        => [ split( qr{|}, $raw_messages ) ],
					messages        => [ split( qr{[|]}, $raw_messages ) ],
					route           => [ split( qr{[|]}, $raw_route ) ],
					completed       => 0,
				}
			);
@@ -464,7 +479,7 @@ helper 'get_user_travels' => sub {
			if ($train_no) {
				$ref->{sched_arrival} = epoch_to_dt($raw_sched_ts),
				  $ref->{rt_arrival}  = epoch_to_dt($raw_real_ts),
				  $ref->{messages}    = [ split( qr{|}, $raw_messages ) ];
				  $ref->{messages}    = [ split( qr{[|]}, $raw_messages ) ];
			}
		}
	}
@@ -516,6 +531,36 @@ helper 'get_user_status' => sub {
	};
};

helper 'get_travel_distance' => sub {
	my ( $self, $from, $to, $route_ref ) = @_;

	my $distance = 0;
	my $geo      = Geo::Distance->new();
	my @route    = after_incl { $_ eq $from } @{$route_ref};
	@route = before_incl { $_ eq $to } @route;

	if ( @route < 2 ) {

		# I AM ERROR
		return 0;
	}

	my $prev_station = get_station( shift @route );
	if ( not $prev_station ) {
		return 0;
	}

	for my $station_name (@route) {
		if ( my $station = get_station($station_name) ) {
			$distance += $geo->distance( 'kilometer', $prev_station->[3],
				$prev_station->[4], $station->[3], $station->[4] );
			$prev_station = $station;
		}
	}

	return $distance;
};

helper 'navbar_class' => sub {
	my ( $self, $path ) = @_;

+6 −4
Original line number Diff line number Diff line
@@ -49,10 +49,12 @@
						<td><%= $travel->{type} %> <%= $travel->{line} // $travel->{no} %></td>
						<td><%= $travel->{from_name} %> → <%= $travel->{to_name} %></td>
						% if ($travel->{rt_arrival} and $travel->{rt_departure}) {
							<td><%= ($travel->{rt_arrival}->epoch - $travel->{rt_departure}->epoch) / 60 %> min</td>
						% }
						% else {
							<td>?</td>
							<td><%= ($travel->{rt_arrival}->epoch - $travel->{rt_departure}->epoch) / 60 %> min
							/
							<%= sprintf('%.f', $self->get_travel_distance($travel->{from_name}, $travel->{to_name}, $travel->{route})) %>km
							</td>
						% } else {
							<td><%= sprintf('%.f', $self->get_travel_distance($travel->{from_name}, $travel->{to_name}, $travel->{route})) %>km</td>
						% }
					</tr>
				% }