summaryrefslogtreecommitdiff
path: root/lib/Travel/Status
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2024-04-28 11:20:05 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2024-04-28 11:20:05 +0200
commit4eb7d9c51742c40d12168abda7cd170934c53420 (patch)
treed1fc4fa4e20dbd779835ae1c5a93e1bae9c12972 /lib/Travel/Status
parenta0c313fcce393792c6552a1f0d5f00b034466c13 (diff)
store description and sections in wagon group
Diffstat (limited to 'lib/Travel/Status')
-rw-r--r--lib/Travel/Status/DE/DBWagenreihung.pm45
-rw-r--r--lib/Travel/Status/DE/DBWagenreihung/Group.pm24
2 files changed, 48 insertions, 21 deletions
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) = @_;