diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2024-08-20 19:44:51 +0200 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2024-08-20 19:44:51 +0200 |
commit | 465c131a6324c4c1d151d82829384652e1740238 (patch) | |
tree | 290892b1b42740556abf38e9864ffae96c5772e7 | |
parent | ad9d8e40b3677342cb7409f3ee5d769c6d72b228 (diff) |
Backend selection: add coverage maps4.29.13
-rw-r--r-- | lib/DBInfoscreen.pm | 1 | ||||
-rw-r--r-- | lib/DBInfoscreen/Controller/Map.pm | 22 | ||||
-rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 42 | ||||
-rw-r--r-- | lib/DBInfoscreen/Helper/HAFAS.pm | 12 | ||||
-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> |