summaryrefslogtreecommitdiff
path: root/lib/Travel/Status
diff options
context:
space:
mode:
authorBirte Kristina Friesel <birte.friesel@uos.de>2025-06-17 18:08:28 +0200
committerBirte Kristina Friesel <birte.friesel@uos.de>2025-06-17 18:08:28 +0200
commit9c16d5b5242b7a366dcdf5445c4e36d5510653e6 (patch)
tree71721e8c9571598ac1fb392a73101a3b81a4976f /lib/Travel/Status
parentbbfbaa63bd7c3da1146cd248719e32eb90fc6ba2 (diff)
parent16e6eb63a992941b420f63ad9cef9caa5115b851 (diff)
Merge branch 'use-europe-berlin-for-timezone' of github.com:networkException/Travel-Status-MOTIS
Diffstat (limited to 'lib/Travel/Status')
-rw-r--r--lib/Travel/Status/MOTIS.pm20
-rw-r--r--lib/Travel/Status/MOTIS/Stopover.pm9
-rw-r--r--lib/Travel/Status/MOTIS/Trip.pm16
-rw-r--r--lib/Travel/Status/MOTIS/TripAtStopover.pm5
4 files changed, 34 insertions, 16 deletions
diff --git a/lib/Travel/Status/MOTIS.pm b/lib/Travel/Status/MOTIS.pm
index e6d0d03..df606dc 100644
--- a/lib/Travel/Status/MOTIS.pm
+++ b/lib/Travel/Status/MOTIS.pm
@@ -59,6 +59,7 @@ sub new {
results => [],
station => $conf{station},
user_agent => $user_agent,
+ time_zone => 'local',
};
bless( $self, $obj );
@@ -311,8 +312,10 @@ sub get_with_cache_p {
sub parse_trip {
my ( $self, %opt ) = @_;
- $self->{result}
- = Travel::Status::MOTIS::Trip->new( json => $self->{raw_json} );
+ $self->{result} = Travel::Status::MOTIS::Trip->new(
+ json => $self->{raw_json},
+ time_zone => $self->{time_zone},
+ );
}
sub parse_stops_by {
@@ -330,9 +333,12 @@ sub parse_stops_by {
sub parse_trips_at_stopover {
my ($self) = @_;
- @{ $self->{results} }
- = map { Travel::Status::MOTIS::TripAtStopover->new( json => $_ ) }
- @{ $self->{raw_json}{stopTimes} // [] };
+ @{ $self->{results} } = map {
+ Travel::Status::MOTIS::TripAtStopover->new(
+ json => $_,
+ time_zone => $self->{time_zone},
+ )
+ } @{ $self->{raw_json}{stopTimes} // [] };
return $self;
}
@@ -522,6 +528,10 @@ Do not perform a request to MOTIS; load the prepared response provided in
I<json> instead. Note that you still need to specify B<stop_id>, B<trip_id>,
etc. as appropriate.
+=item B<time_zone> => I<$time_zone>
+
+A timezone to normalize timestamps to, defaults to 'local'.
+
=back
=item my $promise = Travel::Status::MOTIS->new_p(I<%opt>)
diff --git a/lib/Travel/Status/MOTIS/Stopover.pm b/lib/Travel/Status/MOTIS/Stopover.pm
index 2c0c978..6535e79 100644
--- a/lib/Travel/Status/MOTIS/Stopover.pm
+++ b/lib/Travel/Status/MOTIS/Stopover.pm
@@ -41,6 +41,7 @@ sub new {
my $json = $opt{json};
my $realtime = $opt{realtime} // 0;
my $cancelled = $opt{cancelled};
+ my $time_zone = $opt{time_zone};
my $ref = {
stop => Travel::Status::MOTIS::Stop->from_stopover( json => $json ),
@@ -52,25 +53,25 @@ sub new {
if ( $json->{scheduledArrival} ) {
$ref->{scheduled_arrival} = DateTime::Format::ISO8601->parse_datetime(
$json->{scheduledArrival} );
- $ref->{scheduled_arrival}->set_time_zone('local');
+ $ref->{scheduled_arrival}->set_time_zone( $time_zone );
}
if ( $json->{arrival} and $realtime ) {
$ref->{realtime_arrival}
= DateTime::Format::ISO8601->parse_datetime( $json->{arrival} );
- $ref->{realtime_arrival}->set_time_zone('local');
+ $ref->{realtime_arrival}->set_time_zone( $time_zone );
}
if ( $json->{scheduledDeparture} ) {
$ref->{scheduled_departure} = DateTime::Format::ISO8601->parse_datetime(
$json->{scheduledDeparture} );
- $ref->{scheduled_departure}->set_time_zone('local');
+ $ref->{scheduled_departure}->set_time_zone( $time_zone );
}
if ( $json->{departure} and $realtime ) {
$ref->{realtime_departure}
= DateTime::Format::ISO8601->parse_datetime( $json->{departure} );
- $ref->{realtime_departure}->set_time_zone('local');
+ $ref->{realtime_departure}->set_time_zone( $time_zone );
}
if ( $ref->{scheduled_arrival} and $ref->{realtime_arrival} ) {
diff --git a/lib/Travel/Status/MOTIS/Trip.pm b/lib/Travel/Status/MOTIS/Trip.pm
index a01f2e6..e795434 100644
--- a/lib/Travel/Status/MOTIS/Trip.pm
+++ b/lib/Travel/Status/MOTIS/Trip.pm
@@ -40,6 +40,7 @@ sub new {
my ( $obj, %opt ) = @_;
my $json = $opt{json}{legs}[0];
+ my $time_zone = $opt{time_zone};
my $ref = {
id => $json->{tripId},
@@ -56,16 +57,18 @@ sub new {
raw_stopovers =>
[ $json->{from}, @{ $json->{intermediateStops} }, $json->{to} ],
raw_polyline => $json->{legGeometry},
+
+ time_zone => $time_zone,
};
$ref->{scheduled_departure} = DateTime::Format::ISO8601->parse_datetime(
$json->{scheduledStartTime} );
- $ref->{scheduled_departure}->set_time_zone('local');
+ $ref->{scheduled_departure}->set_time_zone( $time_zone );
if ( $json->{realTime} ) {
$ref->{realtime_departure}
= DateTime::Format::ISO8601->parse_datetime( $json->{startTime} );
- $ref->{realtime_departure}->set_time_zone('local');
+ $ref->{realtime_departure}->set_time_zone( $time_zone );
}
$ref->{departure} = $ref->{realtime_departure}
@@ -73,12 +76,12 @@ sub new {
$ref->{scheduled_arrival}
= DateTime::Format::ISO8601->parse_datetime( $json->{scheduledEndTime} );
- $ref->{scheduled_arrival}->set_time_zone('local');
+ $ref->{scheduled_arrival}->set_time_zone( $time_zone );
if ( $json->{realTime} ) {
$ref->{realtime_arrival}
= DateTime::Format::ISO8601->parse_datetime( $json->{endTime} );
- $ref->{realtime_arrival}->set_time_zone('local');
+ $ref->{realtime_arrival}->set_time_zone( $time_zone );
}
$ref->{arrival} = $ref->{realtime_arrival} // $ref->{scheduled_arrival};
@@ -156,8 +159,9 @@ sub stopovers {
@{ $self->{stopovers} } = map {
Travel::Status::MOTIS::Stopover->new(
- json => $_,
- realtime => $self->{is_realtime}
+ json => $_,
+ realtime => $self->{is_realtime},
+ time_zone => $self->{time_zone},
)
} ( @{ $self->{raw_stopovers} // [] } );
diff --git a/lib/Travel/Status/MOTIS/TripAtStopover.pm b/lib/Travel/Status/MOTIS/TripAtStopover.pm
index 13fc85e..9e7fec1 100644
--- a/lib/Travel/Status/MOTIS/TripAtStopover.pm
+++ b/lib/Travel/Status/MOTIS/TripAtStopover.pm
@@ -30,7 +30,8 @@ Travel::Status::MOTIS::TripAtStopover->mk_ro_accessors(
sub new {
my ( $obj, %opt ) = @_;
- my $json = $opt{json};
+ my $json = $opt{json};
+ my $time_zone = $opt{time_zone};
my $ref = {
id => $json->{tripId},
@@ -50,6 +51,8 @@ sub new {
# NOTE: $json->{place}->{cancelled} isn't set, we just override this here.
cancelled => $json->{cancelled},
realtime => $json->{realTime},
+
+ time_zone => $time_zone,
),
};