Warning: session_start(): open(/var/lib/php/sessions/sess_pn5v7r5aqua48qpfkr5jk8mmov, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
srecord AudioSource(S description, S volume, S baseVolume, bool mute, int index) {}
module ListAudioSources > DynObjectTable {
start {
set fieldsInOrder;
dontPersist();
doEvery(0.0, 10.0, r updateList);
}
void updateList enter {
LS lines = lines(backtick("pactl list sources"));
new Matches m;
new L list;
for i over lines:
if (swic(lines.get(i), "Source #")) {
int idx = parseFirstInt(lines.get(i));
AudioSource as = nu(AudioSource, index := idx, description := lines.get(i));
for (int j = i+1; j < l(lines); j++) {
S line = lines.get(j);
if (!startsWithSpace(line)) break;
line = trim(line);
if (swic_trim(line, "Description:", m))
as.description = m.rest();
else if (swic_trim(line, "Base Volume:", m))
as.baseVolume = m.rest();
else if (swic_trim(line, "Volume:", m))
as.volume = m.rest();
else if (swic_trim(line, "Mute:", m))
as.mute = isYes(m.rest());
}
list.add(as);
}
setData(list);
}
visualize {
JComponent c = super.visualize();
ret centerAndEastWithMargins(c, vstackWithSpacing(
tableDependentButton_extraCondition(table, "Mute", rThread {
backtickToConsole("pactl set-source-mute " + selected().index + " 1");
updateList();
}, func -> bool { !selected().mute }),
tableDependentButton_extraCondition(table, "Unmute", rThread {
backtickToConsole("pactl set-source-mute " + selected().index + " 0");
updateList();
}, func -> bool { selected().mute }),
));
}
}