summaryrefslogtreecommitdiff
path: root/bin/db-zugbildung-to-json
diff options
context:
space:
mode:
Diffstat (limited to 'bin/db-zugbildung-to-json')
-rwxr-xr-xbin/db-zugbildung-to-json129
1 files changed, 8 insertions, 121 deletions
diff --git a/bin/db-zugbildung-to-json b/bin/db-zugbildung-to-json
index af22818..3b90050 100755
--- a/bin/db-zugbildung-to-json
+++ b/bin/db-zugbildung-to-json
@@ -8,10 +8,7 @@ use warnings;
use 5.020;
use utf8;
-use DateTime;
-use DateTime::Format::Strptime;
use Encode qw(decode);
-use File::Slurp qw(write_file);
use IPC::Run3;
use JSON;
use List::Util qw(uniq);
@@ -27,38 +24,6 @@ sub show_usage {
exit $exit_code;
}
-my $strp = DateTime::Format::Strptime->new(
- pattern => '%F',
- time_zone => 'Europe/Berlin'
-);
-my $now = DateTime->now( time_zone => 'Europe/Berlin' );
-
-sub range_is_today {
- my ($range) = @_;
-
- if ( $range =~ m{^(.*)/(.*)$} ) {
- my $dt1 = $strp->parse_datetime($1);
- my $dt2 = $strp->parse_datetime($2);
- if ( $dt1 and $dt2 and $dt1->epoch < $now->epoch < $dt2->epoch ) {
- return 1;
- }
- }
- else {
- if ( my $dt = $strp->parse_datetime($range) ) {
- if ( $dt->ymd eq $now->ymd ) {
- return 1;
- }
- }
- }
- return;
-}
-
-sub weekday_is_today {
- my ($weekdys) = @_;
-
- return ( ${ $weekdys->[ $now->day_of_week - 1 ] } == 1 );
-}
-
my @weekdays = (qw(Mo Di Mi Do Fr Sa So));
my @months = (qw(0 I II III IV V VI VII VIII IX X XI XII));
my %weekday = map { ( $weekdays[$_] => $_ ) } ( 0 .. $#weekdays );
@@ -761,90 +726,12 @@ for my $bork (qw(104 1588 1700 77689 78112 939 2310)) {
}
}
-my %smap;
-for my $train_no ( keys %map ) {
- if ( @{ $map{$train_no} } == 1 ) {
- $smap{$train_no} = $map{$train_no}[0];
- }
- else {
- my $latest_valid;
- my $valid_count = 0;
- for my $train ( @{ $map{$train_no} } ) {
- my $is_valid = 0;
- for my $schedule ( @{ $train->{schedules} // [] } ) {
- for my $valid ( @{ $schedule->{valid} // [] } ) {
- if ( range_is_today($valid) ) {
- $is_valid = 1;
- }
- }
-
- # invalid may override valid for certain days
- for my $invalid ( @{ $schedule->{invalid} // [] } ) {
- if ( range_is_today($invalid) ) {
- $is_valid = 0;
- }
- }
- }
- if ($is_valid) {
- $latest_valid = $train;
- $valid_count++;
- }
- }
- if ( $valid_count == 1 ) {
- $smap{$train_no} = $latest_valid;
- }
- else {
- $valid_count = 0;
- $latest_valid = undef;
- for my $train ( @{ $map{$train_no} } ) {
- my $is_valid = 0;
- for my $schedule ( @{ $train->{schedules} // [] } ) {
- for my $valid ( @{ $schedule->{valid} // [] } ) {
- if ( range_is_today($valid)
- and weekday_is_today( $schedule->{weekdays} ) )
- {
- $is_valid = 1;
- }
- }
-
- # invalid may override valid for certain days
- for my $invalid ( @{ $schedule->{invalid} // [] } ) {
- if ( range_is_today($invalid) ) {
- $is_valid = 0;
- }
- }
- }
- if ($is_valid) {
- $latest_valid = $train;
- $valid_count++;
- }
- }
- if ( $valid_count == 1 ) {
- $smap{$train_no} = $latest_valid;
- }
- }
- }
-}
-
# use canonical output (i.e., sort hash keys) to allow for easy diffing.
-if ( $ENV{WITH_VARIANTS} ) {
- say JSON->new->utf8->canonical->encode(
- {
- deprecated => \0,
- source => $wr_name,
- train => {%smap},
- train_variants => {%map},
- valid => $valid,
- }
- );
-}
-else {
- say JSON->new->utf8->canonical->encode(
- {
- deprecated => \0,
- source => $wr_name,
- train => {%smap},
- valid => $valid,
- }
- );
-}
+say JSON->new->utf8->canonical->encode(
+ {
+ deprecated => \0,
+ source => $wr_name,
+ train_variants => {%map},
+ valid => $valid,
+ }
+);