=cut
package BarnOwl::Module::RT;
-use IPC::Open3;
+use AnyEvent::Util qw(run_cmd);
use Text::ParseWords;
our $VERSION = '1.0.1';
close($fh);
}
-my $file_path = "$cfg/rtcommands";
+$file_path = "$cfg/rtcommands";
if(-r "$file_path") {
open(my $fh, "<:encoding(UTF-8)", "$file_path") or die("Unable to read $file_path:$!\n");
while(defined(my $line = <$fh>)) {
}
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 $/; <OUT> };
- close(*OUT);
- $out .= do { local $/; <ERR> };
- 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",
It is a good place to put custom queries which will be used frequently.
Examples:
- "list-owner (\w+)" "rt list -o +Created \"((Status=new or Status=stalled or Status=open) and (Queue='\$q') and 'Owner='\$1')\""
+ "list-owner (\\w+)" "rt list -o +Created \"((Status=new or Status=stalled or Status=open) and (Queue='\$q') and 'Owner='\$1')\""
\$t is the current ticket
\$q is the current queue