summaryrefslogtreecommitdiff
path: root/lib/HomePanel/Driver.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/HomePanel/Driver.pm')
-rw-r--r--lib/HomePanel/Driver.pm24
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/HomePanel/Driver.pm b/lib/HomePanel/Driver.pm
index ce3026a..e9ea31f 100644
--- a/lib/HomePanel/Driver.pm
+++ b/lib/HomePanel/Driver.pm
@@ -7,9 +7,11 @@ use Net::Async::HTTP;
use Future::AsyncAwait;
use WebService::ForecastIo;
use WebService::TFL::Bus;
+use WebService::TFL::Bus::Response;
use WebService::TFL::TubeStatus;
use HomePanel::Render;
use Types::Path::Tiny qw(AbsFile AbsPath);
+use Types::Standard qw(ArrayRef Str StrictNum);
use Try::Tiny;
use curry::weak;
use namespace::clean;
@@ -31,10 +33,12 @@ sub _build_user_agent {
}
has [qw(forecast_latitude forecast_longitude)] => (
+ isa => StrictNum,
is => 'ro',
required => 1,
);
has forecast_key => (
+ isa => Str,
is => 'ro',
required => 1,
);
@@ -65,7 +69,12 @@ sub forecast_timer_cb {
})->then(sub { $self->forecast_response(shift) })->retain;
}
-has bus_stop_id => ( is => 'ro', required => 1 );
+has bus_stop_ids => (
+ is => 'ro',
+ required => 1,
+ isa => ArrayRef->of(Str)->plus_coercions(Str, sub { [ $_ ] }),
+ coerce => 1,
+);
has bus => (
is => 'lazy',
);
@@ -86,9 +95,16 @@ sub _build_bus_timer {
sub bus_timer_cb {
my ($self) = @_;
- $self->bus->request(
- $self->bus_stop_id
- )->then(sub { $self->bus_response(shift) })->retain;
+ Future->wait_all(
+ map { $self->bus->request($_) } $self->bus_stop_ids->@*
+ )->then(
+ sub {
+ my @done_results = map { $_->result } grep { $_->is_done } @_;
+ $self->bus_response(
+ WebService::TFL::Bus::Response->new_merged(@done_results)
+ );
+ }
+ )->retain;
};
has tube => (