From 4eb7d9c51742c40d12168abda7cd170934c53420 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Sun, 28 Apr 2024 11:20:05 +0200 Subject: store description and sections in wagon group --- lib/Travel/Status/DE/DBWagenreihung.pm | 45 +++++++++++++++------------- lib/Travel/Status/DE/DBWagenreihung/Group.pm | 24 ++++++++++++++- 2 files changed, 48 insertions(+), 21 deletions(-) (limited to 'lib') diff --git a/lib/Travel/Status/DE/DBWagenreihung.pm b/lib/Travel/Status/DE/DBWagenreihung.pm index ea14ec9..6c33971 100644 --- a/lib/Travel/Status/DE/DBWagenreihung.pm +++ b/lib/Travel/Status/DE/DBWagenreihung.pm @@ -261,6 +261,29 @@ sub wagongroup_powertype { return $likelihood[0]; } +sub parse_train_descriptions { + my ($self) = @_; + + for my $group ( @{ $self->{wagongroups} } ) { + my ( $short, $desc ) = $self->wagongroup_description( $group->wagons ); + my @sections = uniq map { $_->section } $group->wagons; + + if ( @sections and length( join( q{}, @sections ) ) ) { + $group->set_sections(@sections); + } + $group->set_description( $desc, $short ); + + push( + @{ $self->{train_descriptions} }, + { + sections => [@sections], + short => $short, + text => $desc, + } + ); + } +} + sub parse_wagonorder { my ($self) = @_; @@ -276,6 +299,7 @@ sub parse_wagonorder { $self->{train_no} = $self->{data}{istformation}{zugnummer}; $self->parse_wagons; + $self->parse_train_descriptions; $self->{origins} = $self->parse_wings('startbetriebsstellename'); $self->{destinations} = $self->parse_wings('zielbetriebsstellename'); } @@ -406,26 +430,7 @@ sub sections { sub train_descriptions { my ($self) = @_; - - if ( exists $self->{train_descriptions} ) { - return @{ $self->{train_descriptions} }; - } - - for my $group ( @{ $self->{wagongroups} } ) { - my ( $short, $desc ) = $self->wagongroup_description( $group->wagons ); - my @sections = uniq map { $_->section } $group->wagons; - - push( - @{ $self->{train_descriptions} }, - { - sections => [@sections], - short => $short, - text => $desc, - } - ); - } - - return @{ $self->{train_descriptions} }; + return @{ $self->{train_descriptions} // [] }; } sub train_numbers { diff --git a/lib/Travel/Status/DE/DBWagenreihung/Group.pm b/lib/Travel/Status/DE/DBWagenreihung/Group.pm index 76fc159..a627b6e 100644 --- a/lib/Travel/Status/DE/DBWagenreihung/Group.pm +++ b/lib/Travel/Status/DE/DBWagenreihung/Group.pm @@ -10,7 +10,8 @@ use parent 'Class::Accessor'; our $VERSION = '0.13'; Travel::Status::DE::DBWagenreihung::Group->mk_ro_accessors( - qw(id train_no type origin destination)); + qw(id train_no type description desc_short origin destination has_sections) +); sub new { my ( $obj, %opt ) = @_; @@ -19,6 +20,21 @@ sub new { return bless( $ref, $obj ); } +sub set_description { + my ( $self, $desc, $short ) = @_; + + $self->{description} = $desc; + $self->{desc_short} = $short; +} + +sub set_sections { + my ( $self, @sections ) = @_; + + $self->{sections} = [@sections]; + + $self->{has_sections} = 1; +} + sub set_traintype { my ( $self, $i, $tt ) = @_; $self->{type} = $tt; @@ -35,6 +51,12 @@ sub sort_wagons { @{ $self->{wagons} }; } +sub sections { + my ($self) = @_; + + return @{ $self->{sections} // [] }; +} + sub wagons { my ($self) = @_; -- cgit v1.2.3