profanity-led-notification/lednotification.py

147 lines
5.6 KiB
Python

import subprocess
from time import sleep
import prof
led_thread = None
last_window_jid = None
unfocused_jid = {}
def call_command(state_on=True):
if state_on:
command = prof.settings_string_get("lednotification", "command_on", "xset led 3")
else:
command = prof.settings_string_get("lednotification", "command_off", "xset -led 3")
subprocess.call(command, shell=True)
def enable_led(state_on=True): # Can be expanded for different ways to call LED changes
call_command(state_on)
def led_notify():
enable_led(True)
def prof_on_chat_win_focus(barejid):
on_focus(barejid)
return None
def prof_on_room_win_focus(barejid):
rooms = prof.settings_string_get("lednotification", "rooms", "off")
if rooms == "on":
on_focus(barejid)
return None
def on_focus(jid):
global focused
global last_window_jid
global unfocused_jid
prof.cons_show("!!!" + unfocused_jid + " ; " + bool(unfocused_jid))
focused = True
last_window_jid = jid
unfocused_jid.pop(jid, None)
if led_thread:
led_thread.join()
led_thread = None
if not unfocused_jid:
enable_led(False)
def prof_post_chat_message_display(barejid, resource, message):
prof.cons_show('test1234')
prof.cons_show("##!!!" + unfocused_jid + " ; " + bool(unfocused_jid))
if check_chat_notify(barejid):
led_notify()
return message
def prof_post_room_message_display(barejid, nick, message):
if check_chat_notify(barejid) and check_room_notify(barejid, nick):
led_notify()
return message
def prof_post_priv_message_display(barejid, nick, message):
if check_chat_notify(barejid):
led_notify()
return message
def check_chat_notify(barejid):
global unfocused_jid
is_console = prof.current_win_is_console()
if last_window_jid != barejid or is_console:
unfocused_jid[barejid] = True
prof.cons_show("CCC##!!!" + unfocused_jid + " ; " + bool(unfocused_jid))
enabled = prof.settings_string_get("lednotification", "enabled", "on")
return enabled == "on" and is_console
def check_room_notify(barejid, nick):
rooms = prof.settings_string_get("lednotification", "rooms", "off")
user = prof.get_room_nick(barejid)
return rooms == "on" and user != nick
def _cmd_say(arg1=None, arg2=None):
if arg1 == "on":
prof.settings_string_set("lednotification", "enabled", "on")
prof.cons_show("LED notifications enabled")
elif arg1 == "off":
prof.settings_string_set("lednotification", "enabled", "off")
prof.cons_show("LED notifications disabled")
elif arg1 == "command":
split = arg2.split()
mode = split[0]
arg3 = arg2.replace(mode, '', 1)[1:]
arg2 = mode
if arg2 == None or arg3 == None:
prof.cons_bad_cmd_usage("/lednotification")
elif arg2 == "on":
prof.settings_string_set("lednotification", "command_on", arg3)
prof.cons_show("LED notification enable command set to: " + arg3)
elif arg2 == "off":
prof.settings_string_set("lednotification", "command_off", arg3)
prof.cons_show("LED notification disable command set to: " + arg3)
elif arg1 == "blink":
if arg2 == None:
prof.cons_bad_cmd_usage("/lednotification")
else:
prof.settings_string_set("lednotification", "blink", arg2)
prof.cons_show("LED notification blinking set to: " + arg2)
elif arg1 == "rooms":
if arg2 == None:
prof.cons_bad_cmd_usage("/lednotification")
else:
prof.settings_string_set("lednotification", "rooms", arg2)
prof.cons_show("LED notifications notifications for rooms set to: " + arg2)
else:
enabled = prof.settings_string_get("lednotification", "enabled", "on")
command_on = prof.settings_string_get("lednotification", "command_on", "xset led 3")
command_off = prof.settings_string_get("lednotification", "command_off", "xset -led 3")
rooms = prof.settings_string_get("lednotification", "rooms", "off")
blink = prof.settings_string_get("lednotification", "blink", "off")
prof.cons_show("LED notification plugin settings:")
prof.cons_show("enabled: " + enabled)
prof.cons_show("command on: " + command_on)
prof.cons_show("command off: " + command_off)
prof.cons_show("blink: " + blink)
prof.cons_show("rooms: " + rooms)
def prof_init(version, status, account_name, fulljid):
synopsis = [
"/lednotification on|off",
"/lednotification command on command",
"/lednotification command off command",
"/lednotification blink on|off|interval",
"/lednotification rooms on|off"]
description = "Show new notifications with LEDs"
args = [
["on|off", "Enable/disable lednotification for all windows"],
["command on <args>", "Command for turning the LED on"],
["command off <args>", "Command for turning the LED off"],
["blink <args>", "Turn LED blinking on or off, set blinking interval"],
["rooms <args>", "Turn notifications for rooms on or off"]]
examples = [
"/lednotification on",
"/lednotification command on xset led 3",
"/lednotification rooms off",
"/lednotification blink on",
"/lednotification blink 0.5"]
prof.register_command("/lednotification", 0, 2, synopsis, description, args, examples, _cmd_say)
prof.completer_add("/lednotification", ["on", "off", "blink", "rooms"])
prof.completer_add("/lednotification blink", ["on", "off"])
prof.completer_add("/lednotification rooms", ["on", "off"])