From 4a46c1031aa69e7ba0e309ba9692250f14dba6b8 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 9 Dec 2023 14:02:41 +0000 Subject: actually async --- lib/HomePanel/Driver.pm | 62 +++++++++++++++++++++++++------------------------ lib/HomePanel/Render.pm | 1 + 2 files changed, 33 insertions(+), 30 deletions(-) (limited to 'lib/HomePanel') 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 { diff --git a/lib/HomePanel/Render.pm b/lib/HomePanel/Render.pm index fe165e3..34a220b 100644 --- a/lib/HomePanel/Render.pm +++ b/lib/HomePanel/Render.pm @@ -6,6 +6,7 @@ use Template::Stash::ForceUTF8; use Template; use DateTime; use DateTime::Format::Duration; +use namespace::clean; has [qw(provider stash template)] => ( is => 'lazy', -- cgit v1.2.3