aboutsummaryrefslogtreecommitdiff
path: root/lib/Lirc/Commands.rakumod
blob: 7b83039809d98ff653d6fbaf722c99eee9d1b612 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use v6.d;
use Lirc::Client;
 
class Lirc::Commands {
    has Lirc::Client $.client is required;
 
    sub hdmi-seq($input{
        return [
            <amplifier power>,
            <projector power>,
            ('amplifier'"hdmi{$input}"),
        ]
    }
    sub stop-seq() {
        return [
            <projector suspend>,
            <amplifier hdmi1>,
            <amplifier power>,
        ];
    }
    my %sequences = (
        'start bluray' => [
            |hdmi-seq(2),
            <bluray power>,
        ],
        'stop bluray' => [
            |stop-seq(),
            <bluray power>,
        ],
        '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}",
            );
        }
    }
}