use v6.d; use Lirc::Client; class Lirc::Commands { has Lirc::Client $.client is required; sub hdmi-seq($input) { return [ , , ('amplifier', "hdmi{$input}"), ] } sub stop-seq() { return [ , , , ]; } my %sequences = ( 'start bluray' => [ |hdmi-seq(2), , ], 'stop bluray' => [ |stop-seq(), , ], 'start hdmi1' => hdmi-seq(1), 'start hdmi2' => hdmi-seq(2), 'start hdmi3' => hdmi-seq(3), 'stop hdmi' => stop-seq(), ); method send($thing, $arg) { if %sequences{"$thing $arg"} -> @seq { for @seq -> @command { await self.send(|@command); sleep 1; } return Promise.kept(); } else { return self.client.send( remote => $thing, keysym => "KEY_{$arg.uc}", ); } } }