From: Anders Kaseorg Date: Sun, 27 May 2018 05:18:42 +0000 (-0400) Subject: BarnOwl::Module::RT: Launch rt asynchronously, so we don’t block the UI X-Git-Url: https://snippets.scripts.mit.edu/gitweb.cgi/Scripts/git/.git/commitdiff_plain/e09e9b71bf722807eb47f852fbab155592bbb81b BarnOwl::Module::RT: Launch rt asynchronously, so we don’t block the UI Signed-off-by: Anders Kaseorg --- diff --git a/rt/BarnOwl/lib/BarnOwl/Module/RT.pm b/rt/BarnOwl/lib/BarnOwl/Module/RT.pm index 4963eff..609200f 100644 --- a/rt/BarnOwl/lib/BarnOwl/Module/RT.pm +++ b/rt/BarnOwl/lib/BarnOwl/Module/RT.pm @@ -12,7 +12,7 @@ Foo =cut package BarnOwl::Module::RT; -use IPC::Open3; +use AnyEvent::Util qw(run_cmd); use Text::ParseWords; our $VERSION = '1.0.1'; @@ -105,23 +105,21 @@ sub cmd_rt{ } sub run_rt_command{ - my @args = ("athrun","tooltime","rt"); - push (@args, @_); - local(*IN, *OUT, *ERR); - my $pid = open3(*IN, *OUT, *ERR, @args) || die("RT threw $!"); - close(*IN); - my $out = do { local $/; }; - close(*OUT); - $out .= do { local $/; }; - close(*ERR); - - waitpid( $pid, 0 ); - - if (($out =~ tr/\n//) eq 1){ - return $out; - } - BarnOwl::popless_text($out); - return; + my $out; + run_cmd( + ["athrun", "tooltime", "rt", @_], + "<", "/dev/null", + ">", \$out, + "2>", \$out, + )->cb(sub { + my $ret = shift->recv; + $ret == 0 or die("RT returned $ret"); + if (($out =~ tr/\n//) == 1) { + BarnOwl::message($out); + } else { + BarnOwl::popless_text($out); + } + }); } BarnOwl::new_command("rt",