55 lines
1.7 KiB
Python
Executable file
55 lines
1.7 KiB
Python
Executable file
#!/usr/bin/python3
|
|
|
|
import subprocess
|
|
import json
|
|
import sys
|
|
|
|
def get_dunst_history():
|
|
result = subprocess.run(['dunstctl', 'history'], stdout=subprocess.PIPE)
|
|
history = json.loads(result.stdout.decode('utf-8'))
|
|
return history
|
|
|
|
def format_history(history):
|
|
count = len(history['data'][0])
|
|
alt = 'none'
|
|
tooltip_click = []
|
|
tooltip_click.append(" Notifications")
|
|
tooltip_click.append(" scroll-down: history pop")
|
|
tooltip_click.append(" click-left: Enable & Disable DND")
|
|
tooltip_click.append(" click-middle: clear history")
|
|
tooltip_click.append(" click-right: close all")
|
|
|
|
tooltip = []
|
|
|
|
if count > 0:
|
|
notifications = history['data'][0][:10] # Get the first 10 notifications
|
|
for notification in notifications:
|
|
body = notification.get('body', {}).get('data', '')
|
|
category = notification.get('category', {}).get('data', '')
|
|
if category:
|
|
alt = category + '-notification'
|
|
tooltip.append(f" {body} ({category})\n")
|
|
else:
|
|
alt = 'notification'
|
|
tooltip.append(f" {body}\n")
|
|
|
|
isDND = subprocess.run(['dunstctl', 'get-pause-level'], stdout=subprocess.PIPE)
|
|
isDND = isDND.stdout.decode('utf-8').strip()
|
|
if isDND != '0':
|
|
alt = "dnd"
|
|
formatted_history = {
|
|
"text": str(count),
|
|
"alt": alt,
|
|
"tooltip": '\n '.join(tooltip_click) + '\n\n ' + '\n '.join(tooltip),
|
|
"class": alt
|
|
}
|
|
return formatted_history
|
|
|
|
def main():
|
|
history = get_dunst_history()
|
|
formatted_history = format_history(history)
|
|
sys.stdout.write(json.dumps(formatted_history) + '\n')
|
|
sys.stdout.flush()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|