diff options
Diffstat (limited to 'lib/Travel')
-rw-r--r-- | lib/Travel/Status/DE/HAFAS.pm | 14 | ||||
-rw-r--r-- | lib/Travel/Status/DE/HAFAS/Result.pm | 22 |
2 files changed, 35 insertions, 1 deletions
diff --git a/lib/Travel/Status/DE/HAFAS.pm b/lib/Travel/Status/DE/HAFAS.pm index 55c79df..a0535c3 100644 --- a/lib/Travel/Status/DE/HAFAS.pm +++ b/lib/Travel/Status/DE/HAFAS.pm @@ -8,6 +8,8 @@ use utf8; no if $] >= 5.018, warnings => 'experimental::smartmatch'; use Carp qw(confess); +use DateTime; +use DateTime::Format::Strptime; use LWP::UserAgent; use POSIX qw(strftime); use Travel::Status::DE::HAFAS::Result; @@ -291,6 +293,14 @@ sub results { $self->{results} = []; + $self->{datetime_now} //= DateTime->now( + time_zone => 'Europe/Berlin', + ); + $self->{strptime_obj} //= DateTime::Format::Strptime->new( + pattern => '%d.%m.%YT%H:%M', + time_zone => 'Europe/Berlin', + ); + for my $tr ( @{ $self->{tree}->findnodes($xp_element) } ) { my @message_nodes = $tr->findnodes($xp_msg); @@ -328,10 +338,14 @@ sub results { $train =~ s{#.*$}{}; + my $datetime = $self->{strptime_obj}->parse_datetime("${date}T${time}"); + push( @{ $self->{results} }, Travel::Status::DE::HAFAS::Result->new( date => $date, + datetime => $datetime, + datetime_now => $self->{datetime_now}, raw_delay => $delay, raw_e_delay => $e_delay, messages => \@messages, diff --git a/lib/Travel/Status/DE/HAFAS/Result.pm b/lib/Travel/Status/DE/HAFAS/Result.pm index d2d27ab..117e1ea 100644 --- a/lib/Travel/Status/DE/HAFAS/Result.pm +++ b/lib/Travel/Status/DE/HAFAS/Result.pm @@ -11,7 +11,7 @@ use parent 'Class::Accessor'; our $VERSION = '2.01'; Travel::Status::DE::HAFAS::Result->mk_ro_accessors( - qw(date info raw_e_delay raw_delay time train route_end)); + qw(date datetime info raw_e_delay raw_delay time train route_end)); sub new { my ( $obj, %conf ) = @_; @@ -21,6 +21,26 @@ sub new { return bless( $ref, $obj ); } +sub countdown { + my ($self) = @_; + + $self->{countdown} + //= $self->datetime->subtract_datetime( $self->{datetime_now} ) + ->in_units('minutes'); + + return $self->{countdown}; +} + +sub countdown_sec { + my ($self) = @_; + + $self->{countdown_sec} + //= $self->datetime->subtract_datetime( $self->{datetime_now} ) + ->in_units('seconds'); + + return $self->{countdown_sec}; +} + sub delay { my ($self) = @_; |