View Single Post
Posts: 103 | Thanked: 8 times | Joined on Jun 2009
#83
Originally Posted by b666m View Post
i think the script is pretty done now.

last changes:
- notification uses the alias of the contact
-> if no alias is defined/available (when the contact isn't in your list for example) the account/id will be used - in icq: the number; in msn and xmpp: the first part of the email (@... is cut off)
- the protocol now is set into brackets behind the alias/account/id
- the messages are now clear of formatting. xmpp: <body> tag is removed; msn: <FONT> tag is removed
(the rest is the same as mentioned above in the new stuff area)

SCREENSHOT:


and here's the code:
Code:
#!/usr/bin/env python

def cb (Notification=None, action=None, Data=None):
	pass

def my_func(account, sender, message, conversation, flags):

	if bus.pidginbus.PurpleConversationHasFocus(conversation) == 0:

		name = str(sender.split("@")[0])
		buddy = bus.pidginbus.PurpleFindBuddy(account,name)
		alias = bus.pidginbus.PurpleBuddyGetAlias(buddy)
		#icon = bus.pidginbus.PurpleBuddyGetIcon(buddy)
		#icon_path = bus.pidginbus.PurpleBuddyIconGetFullPath(icon)
		proto = bus.pidginbus.PurpleAccountGetProtocolName(account)
		#proid = bus.pidginbus.PurpleAccountGetProtocolId(account)
		conv = str(conversation)

		if alias == "":
			alias = name

		msg = message

		if proto == "XMPP":
			msg = msg[6:-7]
		
		elif proto == "MSN":
			col = msg.find("COLOR")
			if col > -1:
				msg = msg[col+16:-14]

		msg = msg.replace("\n"," ")
		msg = "\""+msg
		if len(msg) > 32:
			msg = msg[:33]+"...\""
		else:
			msg = msg+"\""			

		#print alias, "("+sender+") said \""+message+"\" in proto", proto, proid 
		#with icon at", icon_path, "in conv", conv

	        # it's only commented out for test-reasons because i only try it on ubuntu and console with print
        	pynotify.init(os.path.splitext(os.path.basename(sys.argv[0]))[0])
		n = pynotify.Notification(alias+" ("+proto+")",msg,"pidgin")
        	# -------------------------
        	# maybe the next two lines can be used for bringing the conversation window to the foreground 
        	# when the notification is being clicked by the user
        	# if that is not possible: comment them out or delete them (no use for them)
		n.set_hint_string("dbus-callback-default","im.pidgin.purple.PurpleService /im/pidgin/purple/PurpleObject im.pidgin.purple.PurpleInterface purple_conversation_present int32:"+conv)
#		n.set_hint_string("dbus-callback-default","com.nokia.osso_browser /com/nokia/osso_browser com.nokia.osso_browser open_new_window string:\"callto://666\"")
		n.add_action("default", "im", cb)
		n.set_timeout(3000)
        	# or do i have to make an "add_action" for the notification?
        	# maybe i can just put three NULL arguments there ^^
        	# ------------------------
		n.show()

import os
import sys
import gobject, dbus
import pynotify

from dbus.mainloop.glib import DBusGMainLoop

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
bus.pidginbus = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")

bus.add_signal_receiver(my_func,
                        dbus_interface="im.pidgin.purple.PurpleInterface",
                        signal_name="ReceivedImMsg")

loop = gobject.MainLoop()
loop.run()
i think i will take a look into how to autostart/end the script on pidgin start/end.

BTW: it also works on my ubuntu-laptop



Does it work for OS2008?