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.pm62
1 files changed, 32 insertions, 30 deletions
diff --git a/lib/HomePanel/Driver.pm b/lib/HomePanel/Driver.pm
index 8b6c755..ce3026a 100644
--- a/lib/HomePanel/Driver.pm
+++ b/lib/HomePanel/Driver.pm
@@ -1,38 +1,39 @@
package HomePanel::Driver;
use Moo;
-use 5.10.0;
+use v5.36;
use IO::Async::Loop;
use IO::Async::Timer::Periodic;
-use HomePanel::AsyncUA;
+use Net::Async::HTTP;
+use Future::AsyncAwait;
use WebService::ForecastIo;
use WebService::TFL::Bus;
use WebService::TFL::TubeStatus;
use HomePanel::Render;
use Types::Path::Tiny qw(AbsFile AbsPath);
use Try::Tiny;
-#use Devel::Cycle;
use curry::weak;
-use namespace::autoclean;
+use namespace::clean;
+use Data::Dumper;
has loop => ( is => 'lazy' );
sub _build_loop { IO::Async::Loop->new() }
has user_agent => ( is => 'lazy' );
sub _build_user_agent {
- #HomePanel::AsyncUA->new({loop=>$_[0]->loop});
- require LWP::UserAgent;
- return LWP::UserAgent->new(timeout=>20);
+ my ($self) = @_;
+ my $ua = Net::Async::HTTP->new(
+ max_connections_per_host => 1,
+ stall_timeout => 10,
+ decode_content => 1,
+ );
+ $self->loop->add($ua);
+ return $ua;
}
-has forecast_request => (
+has [qw(forecast_latitude forecast_longitude)] => (
is => 'ro',
- default => sub { +{
- latitude => 51.54,
- longitude => -0.37,
- exclude => ['flags','sources'],
- }; },
+ required => 1,
);
-has forecast_response => ( is => 'rw' );
has forecast_key => (
is => 'ro',
required => 1,
@@ -45,6 +46,7 @@ sub _build_forecast {
user_agent => $self->user_agent,
});
}
+has forecast_response => ( is => 'rw' );
has forecast_timer => ( is => 'lazy' );
sub _build_forecast_timer {
my ($self) = @_;
@@ -55,15 +57,15 @@ sub _build_forecast_timer {
}
sub forecast_timer_cb {
my ($self) = @_;
- $self->forecast_response(
- $self->forecast->request(
- $self->forecast_request
- )
- );
+
+ $self->forecast->request({
+ latitude => $self->forecast_latitude,
+ longitude => $self->forecast_longitude,
+ exclude => ['flags','sources'],
+ })->then(sub { $self->forecast_response(shift) })->retain;
}
has bus_stop_id => ( is => 'ro', required => 1 );
-has bus_response => ( is => 'rw' );
has bus => (
is => 'lazy',
);
@@ -72,6 +74,7 @@ sub _build_bus {
user_agent => $_[0]->user_agent,
});
}
+has bus_response => ( is => 'rw' );
has bus_timer => ( is => 'lazy' );
sub _build_bus_timer {
my ($self) = @_;
@@ -82,11 +85,10 @@ sub _build_bus_timer {
}
sub bus_timer_cb {
my ($self) = @_;
- $self->bus_response(
- $self->bus->request(
- $self->bus_stop_id
- )
- );
+
+ $self->bus->request(
+ $self->bus_stop_id
+ )->then(sub { $self->bus_response(shift) })->retain;
};
has tube => (
@@ -108,9 +110,9 @@ sub _build_tube_timer {
}
sub tube_timer_cb {
my ($self) = @_;
- $self->tube_response(
- $self->tube->request()
- );
+
+ $self->tube->request(
+ )->then(sub { $self->tube_response(shift) })->retain;
}
has writer_timer => ( is => 'lazy' );
@@ -160,6 +162,8 @@ sub _build_render {
sub write_page {
my ($self) = @_;
+ return unless $self->forecast_response;
+
my $output = $self->render->render({
forecast => $self->forecast_response,
bus => $self->bus_response,
@@ -167,8 +171,6 @@ sub write_page {
});
$self->output_file->spew_utf8($output);
-
- #find_cycle($self);
}
sub start {