summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2024-08-20 19:44:51 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2024-08-20 19:44:51 +0200
commit465c131a6324c4c1d151d82829384652e1740238 (patch)
tree290892b1b42740556abf38e9864ffae96c5772e7
parentad9d8e40b3677342cb7409f3ee5d769c6d72b228 (diff)
Backend selection: add coverage maps4.29.13
-rw-r--r--lib/DBInfoscreen.pm1
-rw-r--r--lib/DBInfoscreen/Controller/Map.pm22
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm42
-rw-r--r--lib/DBInfoscreen/Helper/HAFAS.pm12
-rw-r--r--templates/select_backend.html.ep (renamed from templates/_backend.html.ep)15
5 files changed, 86 insertions, 6 deletions
diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm
index fd1aaf8..d5ed88f 100644
--- a/lib/DBInfoscreen.pm
+++ b/lib/DBInfoscreen.pm
@@ -318,6 +318,7 @@ sub startup {
$r->get('/_ajax_mapinfo/:tripid/:lineno')->to('map#ajax_route');
$r->get('/map/:tripid/:lineno')->to('map#route');
+ $r->get('/coverage/:backend/:service')->to('map#coverage');
$r->get( '/z/:train/*station' => [ format => [ 'html', 'json' ] ] )
->to( 'stationboard#station_train_details', format => undef )
->name('train_at_station');
diff --git a/lib/DBInfoscreen/Controller/Map.pm b/lib/DBInfoscreen/Controller/Map.pm
index ef19324..f3f3f16 100644
--- a/lib/DBInfoscreen/Controller/Map.pm
+++ b/lib/DBInfoscreen/Controller/Map.pm
@@ -5,7 +5,7 @@ package DBInfoscreen::Controller::Map;
# SPDX-License-Identifier: AGPL-3.0-or-later
use Mojo::Base 'Mojolicious::Controller';
-use Mojo::JSON qw(decode_json);
+use Mojo::JSON qw(decode_json encode_json);
use Mojo::Promise;
use DateTime;
@@ -535,4 +535,24 @@ sub ajax_route {
)->wait;
}
+sub coverage {
+ my ($self) = @_;
+ my $backend = $self->stash('backend');
+ my $service = $self->stash('service');
+
+ my $coverage = {};
+
+ if ( $backend eq 'HAFAS' ) {
+ $coverage = $self->hafas->get_coverage($service);
+ }
+
+ $self->render(
+ 'coverage_map',
+ title => "Abdeckung $service",
+ hide_opts => 1,
+ with_map => 1,
+ coverage => encode_json($coverage),
+ );
+}
+
1;
diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm
index caa2ef0..4f3d152 100644
--- a/lib/DBInfoscreen/Controller/Stationboard.pm
+++ b/lib/DBInfoscreen/Controller/Stationboard.pm
@@ -2166,6 +2166,36 @@ sub stations_by_coordinates {
sub backend_list {
my ($self) = @_;
+ my %place_map = (
+ AT => 'Österreich',
+ CH => 'Schweiz',
+ 'CH-BE' => 'Kanton Bern',
+ 'CH-GE' => 'Kanton Genf',
+ 'CH-LU' => 'Kanton Luzern',
+ 'CH-ZH' => 'Kanton Zürich',
+ DE => 'Deutschland',
+ 'DE-BB' => 'Brandenburg',
+ 'DE-BW' => 'Baden-Württemberg',
+ 'DE-BE' => 'Berlin',
+ 'DE-BY' => 'Bayern',
+ 'DE-HB' => 'Bremen',
+ 'DE-HE' => 'Hessen',
+ 'DE-MV' => 'Mecklenburg-Vorpommern',
+ 'DE-NI' => 'Niedersachsen',
+ 'DE-NW' => 'Nordrhein-Westfalen',
+ 'DE-RP' => 'Rheinland-Pfalz',
+ 'DE-SH' => 'Schleswig-Holstein',
+ 'DE-ST' => 'Sachsen-Anhalt',
+ 'DE-TH' => 'Thüringen',
+ DK => 'Dänemark',
+ 'GB-NIR' => 'Nordirland',
+ LI => 'Litauen',
+ LU => 'Luxembourg',
+ IE => 'Irland',
+ 'US-CA' => 'California',
+ 'US-TX' => 'Texas',
+ );
+
my @backends = (
{
name => 'Deutsche Bahn',
@@ -2179,14 +2209,20 @@ sub backend_list {
{
name => $backend->{name},
shortname => $backend->{shortname},
- type => 'HAFAS',
- hafas => 1,
+ homepage => $backend->{homepage},
+ regions => [
+ map { $place_map{$_} // $_ }
+ @{ $backend->{coverage}{regions} }
+ ],
+ has_area => $backend->{coverage}{area} ? 1 : 0,
+ type => 'HAFAS',
+ hafas => 1,
}
);
}
$self->render(
- '_backend',
+ 'select_backend',
backends => \@backends,
hide_opts => 1
);
diff --git a/lib/DBInfoscreen/Helper/HAFAS.pm b/lib/DBInfoscreen/Helper/HAFAS.pm
index a55f03f..0400d59 100644
--- a/lib/DBInfoscreen/Helper/HAFAS.pm
+++ b/lib/DBInfoscreen/Helper/HAFAS.pm
@@ -28,6 +28,18 @@ sub new {
}
+sub get_coverage {
+ my ( $self, $service ) = @_;
+
+ my $service_definition = Travel::Status::DE::HAFAS::get_service($service);
+
+ if ( not $service_definition ) {
+ return {};
+ }
+
+ return $service_definition->{coverage}{area} // {};
+}
+
sub get_route_p {
my ( $self, %opt ) = @_;
diff --git a/templates/_backend.html.ep b/templates/select_backend.html.ep
index ee14448..836e5c7 100644
--- a/templates/_backend.html.ep
+++ b/templates/select_backend.html.ep
@@ -2,14 +2,15 @@
<p>
Das Backend bestimmt die Datenquelle für Stations- und Zuginformationen.
Innerhalb Deutschlands ist <strong>Deutsche Bahn</strong> meist eine gute Wahl: IRIS-TTS kennt ausschließlich Schienenverkehr im Bahnnetz, während HAFAS auch Nahverkehr unterstützt.
- Die anderen Backends bieten sich für Fahrten im Ausland oder im zugehörigen Verkehrsverbund an und sind werden teils nicht perfekt unterstützt.
+ Die anderen Backends bieten sich für Fahrten im Ausland oder im zugehörigen Verkehrsverbund an.
+ Sofern bekannt sind unterhalb der Backend-Namen Karten verlinkt, die die ungefähre Abdeckung aufzeigen.
</p>
<p>
% my $prev_type = 'IRIS-TTS';
% for my $backend (@{$backends}) {
+ <p>
% if ($backend->{type} ne $prev_type) {
% $prev_type = $backend->{type};
- </p><p>
<%= $prev_type %>:<br/>
% }
% my $class = 'button';
@@ -24,6 +25,16 @@
% }
% }
<a class="<%= $class %>" href="<%= url_for(q{/})->query({ hafas => $backend->{hafas} ? $backend->{shortname} : q{} }) %>"><%= $backend->{shortname} // 'IRIS-TTS' %> – <%= $backend->{name} %></a>
+ % if ($backend->{has_area}) {
+ <a href="/coverage/<%= $backend->{type} %>/<%= $backend->{shortname} %>"><%= join(q{, }, @{$backend->{regions}}) || '[Karte]' %></a>
+ % }
+ % else {
+ %= join(q{, }, @{$backend->{regions} // []})
+ % }
+ % if ($backend->{homepage}) {
+ (<a href="<%= $backend->{homepage} %>"><%= $backend->{homepage} =~ s{ ^ http s? :// (?: www[.] )? (.*?) (?: / )? $ }{$1}xr %></a>)
+ % }
+ </p>
% }
</p>
</div>