summaryrefslogtreecommitdiff
path: root/src/caelestia/subcommands/shell.py
blob: 25a39d8bb264d724d9875b8d32f936b0baaef637 (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
import subprocess
from argparse import Namespace

from caelestia.utils import paths


class Command:
    args: Namespace

    def __init__(self, args: Namespace) -> None:
        self.args = args

    def run(self) -> None:
        if self.args.show:
            # Print the ipc
            self.print_ipc()
        elif self.args.log:
            # Print the log
            self.print_log()
        elif self.args.message:
            # Send a message
            self.message(*self.args.message)
        else:
            # Start the shell
            self.shell()

    def shell(self, *args: list[str]) -> str:
        return subprocess.check_output(["qs", "-p", paths.c_data_dir / "shell", *args], text=True)

    def print_ipc(self) -> None:
        print(self.shell("ipc", "show"), end="")

    def print_log(self) -> None:
        log = self.shell("log")
        # FIXME: remove when logging rules are added/warning is removed
        for line in log.splitlines():
            if "QProcess: Destroyed while process" not in line:
                print(line)

    def message(self, *args: list[str]) -> None:
        print(self.shell("ipc", "call", *args), end="")