summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2014-01-11 21:25:35 +0100
committerDaniel Friesel <derf@finalrewind.org>2014-01-11 21:25:35 +0100
commit448293228ca7af7fa0cc5287090bfa23ac172f8a (patch)
tree20e8b173e29ac81a121b5285ab9b8b4ad5e97224
parent57c364c44bc177569ded124c4b710f052942e943 (diff)
db-iris: Introduce -o/--output option, change -f to -or
-rwxr-xr-xbin/db-iris56
1 files changed, 51 insertions, 5 deletions
diff --git a/bin/db-iris b/bin/db-iris
index 06abdc5..f2cd762 100755
--- a/bin/db-iris
+++ b/bin/db-iris
@@ -10,7 +10,7 @@ our $VERSION = '0.00';
use DateTime;
use DateTime::Format::Strptime;
use Encode qw(decode);
-use Getopt::Long qw(:config no_ignore_case);
+use Getopt::Long qw(:config no_ignore_case bundling);
use List::Util qw(first max);
use List::MoreUtils qw(none);
use Travel::Status::DE::IRIS;
@@ -20,8 +20,8 @@ my ( $date, $time );
my $datetime = DateTime->now( time_zone => 'Europe/Berlin' );
my $arrivals = 0;
my $filter_via;
-my $show_full_route = 0;
my ( @grep_class, @grep_type, @grep_platform );
+my ( %edata, @edata_pre );
my @output;
@@ -32,8 +32,8 @@ binmode( STDOUT, ':encoding(utf-8)' );
GetOptions(
'c|class=s@' => \@grep_class,
'd|date=s' => \$date,
- 'f|full-route' => \$show_full_route,
'h|help' => sub { show_help(0) },
+ 'o|output=s@' => \@edata_pre,
'p|platform=s@' => \@grep_platform,
't|time=s' => \$time,
'T|type=s' => \@grep_type,
@@ -47,6 +47,7 @@ if ( @ARGV != 1 ) {
}
# opt=foo,bar support
+@edata_pre = split( qr{,}, join( q{,}, @edata_pre ) );
@grep_class = split( qr{,}, join( q{,}, @grep_class ) );
@grep_platform = split( qr{,}, join( q{,}, @grep_platform ) );
@grep_type = split( qr{,}, join( q{,}, @grep_type ) );
@@ -71,6 +72,17 @@ if ($time) {
);
}
+for my $efield (@edata_pre) {
+ given ($efield) {
+ when ('d') { $edata{delay} = 1 }
+ when ('m') { $edata{messages} = 1 }
+ when ('q') { $edata{qos} = 1 }
+ when ('r') { $edata{route} = 1 }
+ when ('t') { $edata{times} = 1 }
+ default { $edata{$efield} = 1 }
+ }
+}
+
my $status = Travel::Status::DE::IRIS->new(
datetime => $datetime,
station => $station,
@@ -132,7 +144,7 @@ sub display_result {
@{$line}[ 0 .. 4 ]
);
- if ($show_full_route) {
+ if ( $edata{route} ) {
print "\n" . join( "\n", $line->[5]->route ) . "\n\n\n";
}
}
@@ -225,10 +237,44 @@ Request results for I<date> in dd.mm. oder dd.mm.YYYY format. Note that only
slight (a few hours max) deviations from the current time are supported by the
IRIS backend, larger ones will not return data.
-=item B<-f>, B<--full-route>
+=item B<-o>, B<--output> I<outputtypes>
+
+For each result, output I<outputtypes> in addition to the normal time, delay,
+line and destination information. I<outputtypes> is a comma-separated list,
+this option may be repeated. Each output type has both a short and long form,
+so both C<< -ot,d >> and C<< --output=times,delay >> is valid.
+
+Valid output types are:
+
+=over
+
+=item d / delay
+
+List all delay reasons entered into the IRIS, even if the train is on time
+by now.
+
+=item m / messages
+
+List all messages (delay and qos) entered into the IRIS with timestamps.
+
+=item q / qos
+
+List all quality of service messages entered into the IRIS. These contain
+information like "Missing carriage" or "Broken air conditioning".
+
+Note that some qos messages may supersede older ones. supersed messages are
+omitted, use the m / messages type to see those as well.
+
+=item r / route
Show the entire route of all trains (both before and after I<station>).
+=item t / times
+
+Show both scheduled and expected arrival and departure times.
+
+=back
+
=item B<-p>, B<--platforms> I<platforms>
Only show arrivals/departures at I<platforms> (comma-separated list, option may