83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Displays and controls the mute status of the default microphone.
|
|
|
|
Displays whether the current microphone is muted or not. A click on the icon
|
|
will toggle this status. Relies on pulseaudio.
|
|
|
|
Configuration parameters:
|
|
format_muted: text displayed when muted
|
|
(default FontAwesome)
|
|
format_unmuted: text displayed when unmuted
|
|
(default FontAwesome)
|
|
|
|
Colors:
|
|
color_mute: when muted
|
|
color_unmute: when unmuted
|
|
"""
|
|
|
|
import subprocess
|
|
|
|
|
|
class NoMicrophone(Exception):
|
|
pass
|
|
|
|
|
|
class Error(Exception):
|
|
pass
|
|
|
|
|
|
class Py3status:
|
|
format_muted = '\uf131' # FontAwesome
|
|
format_unmuted = '\uf130' # FontAwesome
|
|
|
|
def microphone(self):
|
|
try:
|
|
isMute = self.__getMuteStatus__()
|
|
color = self.py3.COLOR_MUTE if isMute else self.py3.COLOR_UNMUTE
|
|
text = self.format_muted if isMute else self.format_unmuted
|
|
return {
|
|
'full_text': text,
|
|
'color': color,
|
|
}
|
|
except NoMicrophone:
|
|
return {
|
|
'full_text': '',
|
|
}
|
|
except Error:
|
|
return {
|
|
'full_text': '...',
|
|
}
|
|
|
|
def __getPaList__(self):
|
|
try:
|
|
paOutput = subprocess.check_output(["pacmd", "list-sources"])
|
|
except subprocess.CalledProcessError:
|
|
raise Error()
|
|
|
|
return paOutput.decode()
|
|
|
|
def __getMuteStatus__(self):
|
|
try:
|
|
paList = self.__getPaList__()
|
|
fromCurrent = paList[paList.index('* index:'):]
|
|
MUTED_STR = 'muted: '
|
|
fromMutestat = fromCurrent[fromCurrent.index(MUTED_STR)
|
|
+ len(MUTED_STR):]
|
|
return fromMutestat[:3] == 'yes'
|
|
except ValueError:
|
|
raise NoMicrophone()
|
|
|
|
def __toggleMuteStatus__(self):
|
|
try:
|
|
isMuted = self.__getMuteStatus__()
|
|
paList = self.__getPaList__()
|
|
fromCurrent = paList[paList.index('* index: ')+len('* index: '):]
|
|
sourceId = int(fromCurrent[:fromCurrent.index('\n')])
|
|
subprocess.call(['pacmd', 'set-source-mute', str(sourceId),
|
|
str(int(not isMuted))])
|
|
except ValueError:
|
|
raise NoMicrophone()
|
|
|
|
def on_click(self, event):
|
|
self.__toggleMuteStatus__()
|