#!/usr/bin/env python

import subprocess
from functools import partial


cmd_run = partial(subprocess.Popen, text=True, shell=True)

def cmd_output(cmd):
    try:
        out = subprocess.check_output(cmd, text=True, shell=True).strip()
    except Exception:
        out = ''
    return out

def execute(cmd):
    popen = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                             universal_newlines=True, text=True, shell=True)
    for stdout_line in iter(popen.stdout.readline, ''):
        yield stdout_line
    popen.stdout.close()
    return_code = popen.wait()
    if return_code:
        raise subprocess.CalledProcessError(return_code, cmd)

if __name__ == '__main__':
    for event in execute('bspc subscribe node'):
        event = event.split()
        if event[0] == 'node_remove' or event[0] == 'node_transfer':
            if cmd_output('bspc query -D --names -d ' + event[2]) == 'side-view':
                if cmd_output('bspc query -N -d side-view') == '':
                    cmd_run('bspc desktop voip -f')