96 lines
2.6 KiB
Python
Executable File
96 lines
2.6 KiB
Python
Executable File
#!/bin/env python3
|
|
|
|
import pystray
|
|
import os
|
|
import sys
|
|
from dbus.mainloop.glib import DBusGMainLoop
|
|
DBusGMainLoop(set_as_default=True)
|
|
import dbus.decorators
|
|
from gi.repository.Gtk import AboutDialog
|
|
from gi.repository.GLib import source_remove, timeout_add
|
|
# from gi.repository.GdkPixbuf import Pixbuf
|
|
from PIL import Image
|
|
|
|
|
|
bus = dbus.SessionBus()
|
|
timer_id = None
|
|
timer_count = 20
|
|
|
|
def resource_path(relative_path):
|
|
""" Get absolute path to resource, works for dev and for PyInstaller """
|
|
try:
|
|
base_path = sys._MEIPASS
|
|
except Exception:
|
|
base_path = os.path.abspath(".")
|
|
return os.path.join(base_path, relative_path)
|
|
|
|
|
|
def timer_callback():
|
|
global timer_id, timer_count
|
|
timer_count -= 1
|
|
if not timer_count:
|
|
source_remove(timer_id)
|
|
timer_id = None
|
|
return False
|
|
if timer_count % 2 :
|
|
icon.icon = MsgYes
|
|
else:
|
|
icon.icon = MsgNo
|
|
return True
|
|
|
|
|
|
def item_about(icon, query):
|
|
about = AboutDialog()
|
|
about.set_program_name("Finch Indicator")
|
|
about.set_version("0.1")
|
|
about.set_copyright("(c) Fred Warren")
|
|
about.set_comments("Taskbar indicator for Finch Messenger")
|
|
about.set_website("http://www.elder-geek.net")
|
|
#about.set_logo(Pixbuf.new_from_file(resource_path("user-invisible.png")))
|
|
about.run()
|
|
about.destroy()
|
|
|
|
|
|
|
|
def after_click(icon, query):
|
|
if str(query) == "Exit":
|
|
icon.stop()
|
|
else:
|
|
icon.icon = MsgNo
|
|
|
|
|
|
menu = pystray.Menu(
|
|
pystray.MenuItem("Clear", after_click),
|
|
pystray.MenuItem("About", item_about),
|
|
pystray.MenuItem("Exit", after_click))
|
|
|
|
|
|
MsgNo = Image.open(resource_path("user-invisible.png"))
|
|
MsgYes = Image.open(resource_path("user-available.png"))
|
|
|
|
|
|
def message_received(account, sender, message, conversation, flags):
|
|
global timer_id, timer_count
|
|
icon.icon = MsgYes
|
|
if not timer_id:
|
|
timer_count = 16
|
|
timer_id = timeout_add(250, timer_callback)
|
|
|
|
|
|
def message_sent(account, message, id):
|
|
global timer_id
|
|
if timer_id:
|
|
source_remove(timer_id)
|
|
timer_id = None
|
|
icon.icon = MsgNo
|
|
|
|
|
|
bus.add_signal_receiver( message_received, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg")
|
|
bus.add_signal_receiver( message_received, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedChatMsg")
|
|
bus.add_signal_receiver( message_sent, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="SendingImMsg")
|
|
bus.add_signal_receiver( message_sent, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="SendingChatMsg")
|
|
|
|
|
|
icon = pystray.Icon("Finch", MsgNo, "Finch Message Indicator", menu)
|
|
icon.run()
|