diff options
| author | networkException <git@nwex.de> | 2025-04-18 12:27:41 +0200 | 
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2025-04-21 13:01:05 +0200 | 
| commit | 6dab985966f2a67a9acfdc5b442b16d5e65b7079 (patch) | |
| tree | 049e752d3cfdfbc4dbfa41494f86922502a68a9d /lib/DBInfoscreen/Helper/MOTIS.pm | |
| parent | 75411af57219a256a767361cb7c8caae1477ba9c (diff) | |
Initial MOTIS backend support
This patch adds support for displaying coverage and trip
maps for MOTIS.
Diffstat (limited to 'lib/DBInfoscreen/Helper/MOTIS.pm')
| -rw-r--r-- | lib/DBInfoscreen/Helper/MOTIS.pm | 82 | 
1 files changed, 82 insertions, 0 deletions
| diff --git a/lib/DBInfoscreen/Helper/MOTIS.pm b/lib/DBInfoscreen/Helper/MOTIS.pm new file mode 100644 index 0000000..002a601 --- /dev/null +++ b/lib/DBInfoscreen/Helper/MOTIS.pm @@ -0,0 +1,82 @@ +package DBInfoscreen::Helper::MOTIS; + +# Copyright (C) 2025 networkException <git@nwex.de> +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +use strict; +use warnings; +use 5.020; + +use DateTime; +use Encode qw(decode encode); +use Travel::Status::MOTIS; +use Mojo::JSON qw(decode_json); +use Mojo::Promise; + +sub new { +	my ( $class, %opt ) = @_; + +	my $version = $opt{version}; + +	$opt{header} +	  = { 'User-Agent' => +"dbf/${version} on $opt{root_url} +https://finalrewind.org/projects/db-fakedisplay" +	  }; + +	return bless( \%opt, $class ); + +} + +sub get_coverage { +	my ( $self, $service ) = @_; + +	my $service_definition = Travel::Status::MOTIS::get_service($service); + +	if ( not $service_definition ) { +		return {}; +	} + +	return $service_definition->{coverage}{area} // {}; +} + +# Input: TripID +# Output: Promise returning a Travel::Status::MOTIS::Trip instance on success +sub get_polyline_p { +	my ( $self, %opt ) = @_; + +	my $trip_id = $opt{id}; +	my $service = $opt{service} // 'transitous'; + +	my $promise = Mojo::Promise->new; + +	my $agent = $self->{user_agent}; + +	Travel::Status::MOTIS->new_p( +		cache         => $self->{realtime_cache}, +		promise       => 'Mojo::Promise', +		user_agent    => $agent->request_timeout(10), + +		service       => $service, +		trip_id       => $trip_id, +	)->then( +		sub { +			my ($motis) = @_; +			my $trip = $motis->result; + +			$promise->resolve($trip); +			return; +		} +	)->catch( +		sub { +			my ($err) = @_; +			$self->{log}->debug("MOTIS->new_p($trip_id) error: $err"); +			$promise->reject($err); +			return; +		} +	)->wait; + +	return $promise; +} + +1; | 
