Loading lib/Travelynx.pm +42 −3 Original line number Diff line number Diff line Loading @@ -646,6 +646,7 @@ sub startup { = $db->select( 'in_transit', '*', { user_id => $uid } )->hash; if ( $has_arrived or $force ) { delete $journey->{data}; $journey->{edited} = 0; $journey->{checkout_time} = $now; $db->insert( 'journeys', $journey ); Loading Loading @@ -1592,11 +1593,12 @@ sub startup { my $traininfo = { station => {}, messages => [], }; # <SDay text="... > ..."> is invalid HTML, but present in # regardless. As it is the last tag, we just throw it away. $body =~ s{<SDay .*}{</Journey>}s; $body =~ s{<SDay [^>]*/>}{}s; eval { $tree = XML::LibXML->load_xml( string => $body ) }; if ($@) { $self->app->log->warning("load_xml($url): $@"); Loading @@ -1615,6 +1617,21 @@ sub startup { }; } for my $message ( $tree->findnodes('/Journey/HIMMessage') ) { my $header = $message->getAttribute('header'); my $lead = $message->getAttribute('lead'); my $display = $message->getAttribute('display'); push( @{ $traininfo->{messages} }, { header => $header, lead => $lead, display => $display } ); } $cache->freeze( $url, $traininfo ); $promise->resolve($traininfo); } Loading Loading @@ -1655,6 +1672,14 @@ sub startup { $self->app->log->debug("add_route_timestamps"); my $extra_data = { delay_msg => [ map { [ $_->[0]->epoch, $_->[1] ] } $train->delay_messages ], qos_msg => [ map { [ $_->[0]->epoch, $_->[1] ] } $train->qos_messages ], }; my ( $trainlink, $route_data ); $self->get_hafas_json_p( Loading Loading @@ -1743,9 +1768,15 @@ sub startup { $station->[1] = $route_data->{ $station->[0] }; } $extra_data->{him_msg} = $traininfo2->{messages}; $db->update( 'in_transit', { route => JSON->new->encode($route) }, { route => JSON->new->encode($route), data => JSON->new->encode($extra_data) }, { user_id => $uid } ); } Loading Loading @@ -2139,6 +2170,7 @@ sub startup { arr_platform => $in_transit->{arr_platform}, route_after => \@route_after, messages => $in_transit->{messages}, extra_data => $in_transit->{data}, }; my @parsed_messages; Loading @@ -2148,6 +2180,13 @@ sub startup { } $ret->{messages} = [ reverse @parsed_messages ]; @parsed_messages = (); for my $message ( @{ $ret->{extra_data}{qos_msg} // [] } ) { my ( $ts, $msg ) = @{$message}; push( @parsed_messages, [ epoch_to_dt($ts), $msg ] ); } $ret->{extra_data}{qos_msg} = [@parsed_messages]; for my $station (@route_after) { if ( @{$station} > 1 ) { my $times = $station->[1]; Loading lib/Travelynx/Command/database.pm +30 −0 Original line number Diff line number Diff line Loading @@ -659,6 +659,36 @@ my @migrations = ( } ); }, # v14 -> v15 sub { my ($db) = @_; $db->query( qq{ alter table in_transit add column data jsonb; create or replace view in_transit_str as select user_id, train_type, train_line, train_no, train_id, extract(epoch from checkin_time) as checkin_ts, extract(epoch from sched_departure) as sched_dep_ts, extract(epoch from real_departure) as real_dep_ts, dep_stations.ds100 as dep_ds100, dep_stations.name as dep_name, extract(epoch from checkout_time) as checkout_ts, extract(epoch from sched_arrival) as sched_arr_ts, extract(epoch from real_arrival) as real_arr_ts, arr_stations.ds100 as arr_ds100, arr_stations.name as arr_name, cancelled, route, messages, dep_platform, arr_platform, data from in_transit join stations as dep_stations on dep_stations.id = checkin_station_id left join stations as arr_stations on arr_stations.id = checkout_station_id ; update schema_version set version = 15; } ); }, ); sub setup_db { Loading templates/_checked_in.html.ep +9 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ </div> </p> % } % if (@{$journey->{messages} // []} > 0 and $journey->{messages}[0]) { % if (@{$journey->{messages} // []} or @{$journey->{extra_data}{him_msg} // []} or @{$journey->{extra_data}{qos_msg} // []}) { <p style="margin-bottom: 2ex;"> <ul> % for my $message (reverse @{$journey->{messages} // []}) { Loading @@ -122,6 +122,14 @@ <li> <i class="material-icons tiny">warning</i> <%= $message->[0]->strftime('%H:%M') %>: <%= $message->[1] %></li> % } % } % if ($journey->{departure_countdown} > 0) { % for my $message (@{$journey->{extra_data}{qos_msg} // []}) { <li> <i class="material-icons tiny">info</i> <%= $message->[0]->strftime('%H:%M') %>: <%= $message->[1] %></li> % } % } % for my $message (@{$journey->{extra_data}{him_msg} // []}) { <li> <i class="material-icons tiny">info</i> <%= $message->{header} %> <%= $message->{lead} %></li> % } </ul> </p> % } Loading Loading
lib/Travelynx.pm +42 −3 Original line number Diff line number Diff line Loading @@ -646,6 +646,7 @@ sub startup { = $db->select( 'in_transit', '*', { user_id => $uid } )->hash; if ( $has_arrived or $force ) { delete $journey->{data}; $journey->{edited} = 0; $journey->{checkout_time} = $now; $db->insert( 'journeys', $journey ); Loading Loading @@ -1592,11 +1593,12 @@ sub startup { my $traininfo = { station => {}, messages => [], }; # <SDay text="... > ..."> is invalid HTML, but present in # regardless. As it is the last tag, we just throw it away. $body =~ s{<SDay .*}{</Journey>}s; $body =~ s{<SDay [^>]*/>}{}s; eval { $tree = XML::LibXML->load_xml( string => $body ) }; if ($@) { $self->app->log->warning("load_xml($url): $@"); Loading @@ -1615,6 +1617,21 @@ sub startup { }; } for my $message ( $tree->findnodes('/Journey/HIMMessage') ) { my $header = $message->getAttribute('header'); my $lead = $message->getAttribute('lead'); my $display = $message->getAttribute('display'); push( @{ $traininfo->{messages} }, { header => $header, lead => $lead, display => $display } ); } $cache->freeze( $url, $traininfo ); $promise->resolve($traininfo); } Loading Loading @@ -1655,6 +1672,14 @@ sub startup { $self->app->log->debug("add_route_timestamps"); my $extra_data = { delay_msg => [ map { [ $_->[0]->epoch, $_->[1] ] } $train->delay_messages ], qos_msg => [ map { [ $_->[0]->epoch, $_->[1] ] } $train->qos_messages ], }; my ( $trainlink, $route_data ); $self->get_hafas_json_p( Loading Loading @@ -1743,9 +1768,15 @@ sub startup { $station->[1] = $route_data->{ $station->[0] }; } $extra_data->{him_msg} = $traininfo2->{messages}; $db->update( 'in_transit', { route => JSON->new->encode($route) }, { route => JSON->new->encode($route), data => JSON->new->encode($extra_data) }, { user_id => $uid } ); } Loading Loading @@ -2139,6 +2170,7 @@ sub startup { arr_platform => $in_transit->{arr_platform}, route_after => \@route_after, messages => $in_transit->{messages}, extra_data => $in_transit->{data}, }; my @parsed_messages; Loading @@ -2148,6 +2180,13 @@ sub startup { } $ret->{messages} = [ reverse @parsed_messages ]; @parsed_messages = (); for my $message ( @{ $ret->{extra_data}{qos_msg} // [] } ) { my ( $ts, $msg ) = @{$message}; push( @parsed_messages, [ epoch_to_dt($ts), $msg ] ); } $ret->{extra_data}{qos_msg} = [@parsed_messages]; for my $station (@route_after) { if ( @{$station} > 1 ) { my $times = $station->[1]; Loading
lib/Travelynx/Command/database.pm +30 −0 Original line number Diff line number Diff line Loading @@ -659,6 +659,36 @@ my @migrations = ( } ); }, # v14 -> v15 sub { my ($db) = @_; $db->query( qq{ alter table in_transit add column data jsonb; create or replace view in_transit_str as select user_id, train_type, train_line, train_no, train_id, extract(epoch from checkin_time) as checkin_ts, extract(epoch from sched_departure) as sched_dep_ts, extract(epoch from real_departure) as real_dep_ts, dep_stations.ds100 as dep_ds100, dep_stations.name as dep_name, extract(epoch from checkout_time) as checkout_ts, extract(epoch from sched_arrival) as sched_arr_ts, extract(epoch from real_arrival) as real_arr_ts, arr_stations.ds100 as arr_ds100, arr_stations.name as arr_name, cancelled, route, messages, dep_platform, arr_platform, data from in_transit join stations as dep_stations on dep_stations.id = checkin_station_id left join stations as arr_stations on arr_stations.id = checkout_station_id ; update schema_version set version = 15; } ); }, ); sub setup_db { Loading
templates/_checked_in.html.ep +9 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ </div> </p> % } % if (@{$journey->{messages} // []} > 0 and $journey->{messages}[0]) { % if (@{$journey->{messages} // []} or @{$journey->{extra_data}{him_msg} // []} or @{$journey->{extra_data}{qos_msg} // []}) { <p style="margin-bottom: 2ex;"> <ul> % for my $message (reverse @{$journey->{messages} // []}) { Loading @@ -122,6 +122,14 @@ <li> <i class="material-icons tiny">warning</i> <%= $message->[0]->strftime('%H:%M') %>: <%= $message->[1] %></li> % } % } % if ($journey->{departure_countdown} > 0) { % for my $message (@{$journey->{extra_data}{qos_msg} // []}) { <li> <i class="material-icons tiny">info</i> <%= $message->[0]->strftime('%H:%M') %>: <%= $message->[1] %></li> % } % } % for my $message (@{$journey->{extra_data}{him_msg} // []}) { <li> <i class="material-icons tiny">info</i> <%= $message->{header} %> <%= $message->{lead} %></li> % } </ul> </p> % } Loading