diff --git a/index.pl b/index.pl index c86fe5b..90fb660 100755 --- a/index.pl +++ b/index.pl @@ -299,39 +299,17 @@ helper 'checkout' => sub { my $user = $self->get_user_status; my $train_id = $user->{train_id}; - if ( $status->{errstr} and not $force ) { - return $status->{errstr}; - } if ( not $user->{checked_in} ) { return 'You are not checked into any train'; } - else { - my ($train) - = first { $_->train_id eq $train_id } @{ $status->{results} }; - if ( not defined $train ) { - if ($force) { - my $success = $self->app->checkout_query->execute( - $self->get_user_id, - $self->get_station_id( - ds100 => $status->{station_ds100}, - name => $status->{station_name} - ), - DateTime->now( time_zone => 'Europe/Berlin' )->epoch, - undef, undef, undef, undef, undef, - undef, undef, undef - ); - if ( defined $success ) { - return; - } - else { - return 'INSERT failed'; - } - } - else { - return "Train ${train_id} not found"; - } - } - else { + if ( $status->{errstr} and not $force ) { + return $status->{errstr}; + } + + my ($train) + = first { $_->train_id eq $train_id } @{ $status->{results} }; + if ( not defined $train ) { + if ($force) { my $success = $self->app->checkout_query->execute( $self->get_user_id, $self->get_station_id( @@ -339,16 +317,8 @@ helper 'checkout' => sub { name => $status->{station_name} ), DateTime->now( time_zone => 'Europe/Berlin' )->epoch, - $train->type, - $train->line_no, - $train->train_no, - $train->train_id, - $train->sched_arrival ? $train->sched_arrival->epoch : undef, - $train->arrival ? $train->arrival->epoch : undef, - join( '|', $train->route ), - join( '|', - map { ( $_->[0] ? $_->[0]->epoch : q{} ) . ':' . $_->[1] } - $train->messages ) + undef, undef, undef, undef, undef, + undef, undef, undef ); if ( defined $success ) { return; @@ -357,6 +327,35 @@ helper 'checkout' => sub { return 'INSERT failed'; } } + else { + return "Train ${train_id} not found"; + } + } + else { + my $success = $self->app->checkout_query->execute( + $self->get_user_id, + $self->get_station_id( + ds100 => $status->{station_ds100}, + name => $status->{station_name} + ), + DateTime->now( time_zone => 'Europe/Berlin' )->epoch, + $train->type, + $train->line_no, + $train->train_no, + $train->train_id, + $train->sched_arrival ? $train->sched_arrival->epoch : undef, + $train->arrival ? $train->arrival->epoch : undef, + join( '|', $train->route ), + join( '|', + map { ( $_->[0] ? $_->[0]->epoch : q{} ) . ':' . $_->[1] } + $train->messages ) + ); + if ( defined $success ) { + return; + } + else { + return 'INSERT failed'; + } } }; diff --git a/public/static/js/travelynx-actions.js b/public/static/js/travelynx-actions.js index 7cec0cd..91953a6 100644 --- a/public/static/js/travelynx-actions.js +++ b/public/static/js/travelynx-actions.js @@ -1,41 +1,42 @@ -$(document).ready(function() { +function travelynx_run_action(link, req, redir, err_callback) { var error_icon = 'error'; + var progressbar = $('
'); + link.hide(); + link.after(progressbar); + $.post('/action', req, function(data) { + if (data.success) { + $(location).attr('href', redir); + } else { + M.toast({html: error_icon + ' ' + data.error}); + progressbar.remove(); + if (err_callback) { + err_callback(); + } + link.append(' ' + error_icon); + link.show(); + } + }); +} +$(document).ready(function() { $('.action-checkin').click(function() { var link = $(this); - req = { + var req = { action: 'checkin', station: link.data('station'), train: link.data('train'), }; - progressbar = $('
'); - link.replaceWith(progressbar); - $.post('/action', req, function(data) { - if (data.success) { - $(location).attr('href', '/'); - } else { - M.toast({html: error_icon + ' ' + data.error}); - link.append(' ' + error_icon); - progressbar.replaceWith(link); - } - }); + travelynx_run_action(link, req, '/'); }); $('.action-checkout').click(function() { var link = $(this); - req = { + var req = { action: 'checkout', station: link.data('station'), force: link.data('force'), }; - progressbar = $('
'); - link.replaceWith(progressbar); - $.post('/action', req, function(data) { - if (data.success) { - $(location).attr('href', '/' + req.station); - } else { - M.toast({html: error_icon + ' ' + data.error}); - link.append(' ' + error_icon); - progressbar.replaceWith(link); - } + travelynx_run_action(link, req, '/' + req.station, function() { + link.append(' – Keine Echtzeitdaten vorhanden') + link.data('force', true); }); }); });