mirror of
https://github.com/ksyasuda/rice.git
synced 2024-10-28 09:04:10 -07:00
84 lines
2.4 KiB
Python
84 lines
2.4 KiB
Python
|
#!/usr/bin/env python
|
||
|
"""
|
||
|
Script to send notification whenever the volume is changed through the
|
||
|
multi-media keys on my laptop.
|
||
|
"""
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import subprocess
|
||
|
from pathlib import Path
|
||
|
import config
|
||
|
|
||
|
|
||
|
def execute_with_capture(command: list) -> subprocess.CompletedProcess:
|
||
|
"""
|
||
|
Returns the result of a subprocess.run command with capture output and
|
||
|
utf-8 encoding.
|
||
|
"""
|
||
|
return subprocess.run(command, capture_output=True,
|
||
|
shell=True, check=True, encoding='UTF-8')
|
||
|
|
||
|
|
||
|
def get_volume() -> int:
|
||
|
"""Returns the volume of the system."""
|
||
|
args = ['pulsemixer --get-volume']
|
||
|
proc = execute_with_capture(args)
|
||
|
output = proc.stdout
|
||
|
volume = int(output.split(' ')[0])
|
||
|
return volume
|
||
|
|
||
|
|
||
|
def check_mute() -> int:
|
||
|
"""Returns 1 when system muted. 0 otherwise."""
|
||
|
args = ['pulsemixer --get-mute']
|
||
|
proc = execute_with_capture(args)
|
||
|
return int(proc.stdout)
|
||
|
|
||
|
|
||
|
def get_icon_path(volume: int) -> str:
|
||
|
"""Gets the icons path based on the current volume."""
|
||
|
# base_dir = pathlib.Path('/usr/share/icons/gnome/16x16/status/')
|
||
|
base_dir = Path(config.BASE_DIR)
|
||
|
if volume == 0:
|
||
|
path = base_dir.joinpath(config.MUTED)
|
||
|
elif 0 < volume < 40:
|
||
|
path = base_dir.joinpath(config.LOW)
|
||
|
elif 40 <= volume < 70:
|
||
|
path = base_dir.joinpath(config.MEDIUM)
|
||
|
elif volume >= 70:
|
||
|
path = base_dir.joinpath(config.HIGH)
|
||
|
return str(path)
|
||
|
|
||
|
|
||
|
def main(event: str) -> None:
|
||
|
"""Main driver function."""
|
||
|
if event in ('increase', 'decrease'):
|
||
|
volume = get_volume()
|
||
|
icon_path = get_icon_path(volume)
|
||
|
output_command = f'dunstify -i {icon_path} -h \
|
||
|
string:x-dunst-stack-tag:audio "Volume: {volume}%" -h \
|
||
|
int:value:{volume}'
|
||
|
elif event == 'mute':
|
||
|
muted = check_mute()
|
||
|
if muted:
|
||
|
icon_path = get_icon_path(0)
|
||
|
output_command = f'dunstify -i {icon_path} -h \
|
||
|
string:x-dunst-stack-tag:audio "Volume: Muted" -h \
|
||
|
int:value:0'
|
||
|
else:
|
||
|
volume = get_volume()
|
||
|
icon_path = get_icon_path(volume)
|
||
|
output_command = f'dunstify -i {icon_path} -h \
|
||
|
string:x-dunst-stack-tag:audio "Volume: {volume}%" -h \
|
||
|
int:value:{volume}'
|
||
|
os.system(output_command)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
if len(sys.argv) < 2:
|
||
|
print('not nice')
|
||
|
sys.exit(1)
|
||
|
e = sys.argv[1]
|
||
|
main(e)
|