summaryrefslogtreecommitdiff
path: root/lib/Travelynx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Travelynx')
-rw-r--r--lib/Travelynx/Command/database.pm24
-rw-r--r--lib/Travelynx/Command/dumpstops.pm6
-rw-r--r--lib/Travelynx/Controller/Account.pm4
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm18
-rw-r--r--lib/Travelynx/Helper/DBRIS.pm2
-rw-r--r--lib/Travelynx/Helper/EFA.pm7
-rw-r--r--lib/Travelynx/Model/Stations.pm3
7 files changed, 54 insertions, 10 deletions
diff --git a/lib/Travelynx/Command/database.pm b/lib/Travelynx/Command/database.pm
index 675f0a7..95d67f5 100644
--- a/lib/Travelynx/Command/database.pm
+++ b/lib/Travelynx/Command/database.pm
@@ -3184,6 +3184,30 @@ qq{select distinct checkout_station_id from in_transit where backend_id = 0;}
}
);
},
+
+ # v64 -> v65
+ # stations_str: add is_motis
+ sub {
+ my ($db) = @_;
+ $db->query(
+ qq{
+ drop view stations_str;
+ create view stations_str as
+ select stations.name as name,
+ eva, lat, lon,
+ backends.name as backend,
+ dbris as is_dbris,
+ efa as is_efa,
+ iris as is_iris,
+ hafas as is_hafas,
+ motis as is_motis
+ from stations
+ left join backends
+ on source = backends.id;
+ update schema_version set version = 65;
+ }
+ );
+ },
);
sub sync_stations {
diff --git a/lib/Travelynx/Command/dumpstops.pm b/lib/Travelynx/Command/dumpstops.pm
index 4d20bbd..15f5861 100644
--- a/lib/Travelynx/Command/dumpstops.pm
+++ b/lib/Travelynx/Command/dumpstops.pm
@@ -1,6 +1,6 @@
package Travelynx::Command::dumpstops;
-# Copyright (C) 2024 Birte Kristina Friesel
+# Copyright (C) 2024-2025 Birte Kristina Friesel
#
# SPDX-License-Identifier: AGPL-3.0-or-later
@@ -24,13 +24,13 @@ sub run {
or die("open($filename): $!\n");
my $csv = Text::CSV->new( { eol => "\r\n" } );
- $csv->combine(qw(name eva lat lon backend is_iris is_hafas));
+ $csv->combine(qw(name eva lat lon backend is_dbris is_efa is_iris is_hafas is_motis));
print $fh $csv->string;
my $iter = $self->app->stations->get_db_iterator;
while ( my $row = $iter->hash ) {
$csv->combine(
- @{$row}{qw{name eva lat lon backend is_iris is_hafas}} );
+ @{$row}{qw{name eva lat lon backend is_dbris is_efa is_iris is_hafas is_motis}} );
print $fh $csv->string;
}
close($fh);
diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm
index 0978c88..bf1eac2 100644
--- a/lib/Travelynx/Controller/Account.pm
+++ b/lib/Travelynx/Controller/Account.pm
@@ -1084,8 +1084,8 @@ sub backend_form {
$backend->{homepage} = $s->{homepage};
$backend->{regions} = [ map { $place_map{$_} // $_ }
@{ $s->{coverage}{regions} // [] } ];
- $backend->{has_area} = $s->{coverage}{area} ? 1 : 0;
- $backend->{experimental} = 1;
+ $backend->{has_area} = $s->{coverage}{area} ? 1 : 0;
+ $backend->{association} = 1;
if (
$s->{coverage}{area}
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index 0437556..bb45378 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -49,7 +49,8 @@ sub get_connecting_trains_p {
# cases. But not reliably. Probably best to leave it out entirely then.
return $promise->reject;
}
- if ($user->{backend_efa}) {
+ if ( $user->{backend_efa} ) {
+
# TODO
return $promise->reject;
}
@@ -1340,7 +1341,7 @@ sub station {
}
my $connections_p;
- if ( $trip_id and $hafas_service ) {
+ if ( $trip_id and ( $dbris_service or $hafas_service ) ) {
@results = grep { $_->id eq $trip_id } @results;
}
elsif ( $train and not $hafas_service ) {
@@ -1445,6 +1446,19 @@ sub station {
status => 300,
);
}
+ elsif ( $efa_service
+ and $status
+ and scalar $status->name_candidates )
+ {
+ $self->render(
+ 'disambiguation',
+ suggestions => [
+ map { { name => $_->name, eva => $_->id_num } }
+ $status->name_candidates
+ ],
+ status => 300,
+ );
+ }
elsif ( $hafas_service
and $status
and $status->errcode eq 'LOCATION' )
diff --git a/lib/Travelynx/Helper/DBRIS.pm b/lib/Travelynx/Helper/DBRIS.pm
index 9ddaa5f..1b7f099 100644
--- a/lib/Travelynx/Helper/DBRIS.pm
+++ b/lib/Travelynx/Helper/DBRIS.pm
@@ -69,7 +69,7 @@ sub get_departures_p {
my $agent = $self->{user_agent};
- if ( $opt{station} =~ m{ [@] L = (?<eva> \d+ ) [@] }x ) {
+ if ( $opt{station} =~ m{ [@] L = (?<eva> \d+ ) }x ) {
$opt{station} = {
eva => $+{eva},
id => $opt{station},
diff --git a/lib/Travelynx/Helper/EFA.pm b/lib/Travelynx/Helper/EFA.pm
index ba11764..5cae51b 100644
--- a/lib/Travelynx/Helper/EFA.pm
+++ b/lib/Travelynx/Helper/EFA.pm
@@ -55,12 +55,15 @@ sub get_journey_p {
my $agent = $self->{user_agent};
my $stopseq;
- if ( $opt{trip_id} =~ m{ ^ ([^@]*) @ ([^@]*) [(] ([^)]*) [)] (.*) $ }x ) {
+ if ( $opt{trip_id}
+ =~ m{ ^ ([^@]*) @ ([^@]*) [(] ([^T]*) T ([^)]*) [)] (.*) $ }x )
+ {
$stopseq = {
stateless => $1,
stop_id => $2,
date => $3,
- key => $4
+ time => $4,
+ key => $5
};
}
else {
diff --git a/lib/Travelynx/Model/Stations.pm b/lib/Travelynx/Model/Stations.pm
index bf35d1a..c6d9730 100644
--- a/lib/Travelynx/Model/Stations.pm
+++ b/lib/Travelynx/Model/Stations.pm
@@ -205,6 +205,9 @@ sub add_or_update {
);
return;
}
+ if (not $stop->latlon) {
+ die('Backend Error: Stop "' . $stop->full_name . '" has no geo coordinates');
+ }
$opt{db}->insert(
'stations',
{