summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2023-08-13 20:18:40 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2023-08-13 20:18:40 +0200
commit293f0c7577b90e69585831eef50e121f28122ef7 (patch)
treeaa957e23d701d367f86e6bee3ebba68d9fa57213
parent69edd81eeb86eb4ecd5fba80fb3a4505a8085183 (diff)
synchronize non-train checkins from traewelling to travelynx
-rwxr-xr-xlib/Travelynx.pm93
-rw-r--r--lib/Travelynx/Helper/Traewelling.pm2
2 files changed, 81 insertions, 14 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 3d804f5..e5978d4 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -563,6 +563,11 @@ sub startup {
data => { trip_id => $journey->id }
);
+ # mustn't be called during a transaction
+ if ( not $opt{in_transaction} ) {
+ $self->run_hook( $uid, 'checkin' );
+ }
+
$promise->resolve($journey);
}
)->catch(
@@ -953,6 +958,7 @@ sub startup {
my $now = DateTime->now( time_zone => 'Europe/Berlin' );
my $journey = $self->in_transit->get(
uid => $uid,
+ db => $db,
with_data => 1,
with_timestamps => 1,
with_visibility => 1,
@@ -1034,7 +1040,9 @@ sub startup {
);
}
- $tx->commit;
+ if ($tx) {
+ $tx->commit;
+ }
};
if ($@) {
@@ -1932,19 +1940,76 @@ sub startup {
if ( $traewelling->{category}
!~ m{^ (?: national .* | regional .* | suburban ) $ }x )
{
- $self->log->debug(
- "... status is not a train, but $traewelling->{category}");
- $self->traewelling->log(
- uid => $uid,
- message =>
-"$traewelling->{line} nach $traewelling->{arr_name} ist keine Zugfahrt (HAFAS-Kategorie '$traewelling->{category}')",
- status_id => $traewelling->{status_id},
- );
- $self->traewelling->set_latest_pull_status_id(
- uid => $uid,
- status_id => $traewelling->{status_id}
- );
- return $promise->resolve;
+
+ my $db = $self->pg->db;
+ my $tx = $db->begin;
+
+ $self->checkin_p(
+ station => $traewelling->{dep_eva},
+ train_id => $traewelling->{trip_id},
+ uid => $uid,
+ in_transaction => 1,
+ db => $db
+ )->then(
+ sub {
+ $self->log->debug("... handled origin");
+ return $self->checkout_p(
+ station => $traewelling->{arr_eva},
+ train_id => $traewelling->{trip_id},
+ uid => $uid,
+ in_transaction => 1,
+ db => $db
+ );
+ }
+ )->then(
+ sub {
+ my ( undef, $err ) = @_;
+ if ($err) {
+ $self->log->debug("... error: $err");
+ return Mojo::Promise->reject($err);
+ }
+ $self->log->debug("... handled destination");
+ if ( $traewelling->{message} ) {
+ $self->in_transit->update_user_data(
+ uid => $uid,
+ db => $db,
+ user_data =>
+ { comment => $traewelling->{message} }
+ );
+ }
+ $self->traewelling->log(
+ uid => $uid,
+ db => $db,
+ message =>
+"Eingecheckt in $traewelling->{line} nach $traewelling->{arr_name}",
+ status_id => $traewelling->{status_id},
+ );
+ $self->traewelling->set_latest_pull_status_id(
+ uid => $uid,
+ status_id => $traewelling->{status_id},
+ db => $db
+ );
+
+ $tx->commit;
+ $promise->resolve;
+ return;
+ }
+ )->catch(
+ sub {
+ my ($err) = @_;
+ $self->log->debug("... error: $err");
+ $self->traewelling->log(
+ uid => $uid,
+ message =>
+"Konnte $traewelling->{line} nach $traewelling->{arr_name} nicht übernehmen: $err",
+ status_id => $traewelling->{status_id},
+ is_error => 1
+ );
+ $promise->resolve;
+ return;
+ }
+ )->wait;
+ return $promise;
}
$self->iris->get_departures_p(
diff --git a/lib/Travelynx/Helper/Traewelling.pm b/lib/Travelynx/Helper/Traewelling.pm
index 18edc18..d688004 100644
--- a/lib/Travelynx/Helper/Traewelling.pm
+++ b/lib/Travelynx/Helper/Traewelling.pm
@@ -116,6 +116,7 @@ sub get_status_p {
my $category = $status->{train}{category};
my $linename = $status->{train}{lineName};
+ my $trip_id = $status->{train}{hafasId};
my ( $train_type, $train_line ) = split( qr{ }, $linename );
$promise->resolve(
{
@@ -131,6 +132,7 @@ sub get_status_p {
arr_eva => $arr_eva,
arr_ds100 => $arr_ds100,
arr_name => $arr_name,
+ trip_id => $trip_id,
train_type => $train_type,
line => $linename,
line_no => $train_line,