cdef class Conversation:
""" Conversation class """
cdef conversation.PurpleConversation *__conv
+ cdef Account __acc
+
+ cdef object name
def __init__(self):
conversation.c_purple_conversations_init()
+ self.name = None
- def conversation_new(self, type, acc, char *name):
- self.__conv = conversation.c_purple_conversation_new(type, <account.PurpleAccount*>acc.__account, name)
+ def initialize(self, acc, type, char *name):
+ self.__acc = acc
+ if type == "UNKNOWN":
+ self.__conv =\
+ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_UNKNOWN,\
+ <account.PurpleAccount*>self.__acc.c_account, name)
+ elif type == "IM":
+ self.__conv =\
+ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_IM,\
+ <account.PurpleAccount*>self.__acc.c_account, name)
+ elif type == "CHAT":
+ self.__conv =\
+ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_CHAT,\
+ <account.PurpleAccount*>self.__acc.c_account, name)
+ elif type == "MISC":
+ self.__conv =\
+ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_MISC,\
+ <account.PurpleAccount*>self.__acc.c_account, name)
+ elif type == "ANY":
+ self.__conv =\
+ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_ANY,\
+ <account.PurpleAccount*>self.__acc.c_account, name)
+ self.name = name
def conversation_set_ui_ops(self):
cdef conversation.PurpleConversationUiOps c_conv_ui_ops
conversation.c_purple_conversation_set_ui_ops(self.__conv, &c_conv_ui_ops)
- def conversation_write(self, char *message):
+ def write(self, char *message):
conversation.c_purple_conv_im_send(conversation.c_purple_conversation_get_im_data(self.__conv), message)
- def conversation_destroy(self):
- conversation.c_purple_conversation_destroy(self.__conv)
-
- def conversation_get_handle(self):
+ def get_handle(self):
conversation.c_purple_conversations_get_handle()
- def send_message(self, buddy, char *message):
- self.conversation_new(1, buddy.account, buddy.name)
- self.conversation_set_ui_ops()
- self.conversation_write(message)
+ def destroy(self):
+ conversation.c_purple_conversation_destroy(self.__conv)
#blist_cbs["new_list"] = blist_callback
#blist_cbs["new_node"] = blist_callback
-blist_cbs["show"] = blist_callback
+#blist_cbs["show"] = blist_callback
#blist_cbs["update"] = blist_callback
-blist_cbs["remove"] = blist_callback
-blist_cbs["destroy"] = blist_callback
+#blist_cbs["remove"] = blist_callback
+#blist_cbs["destroy"] = blist_callback
blist_cbs["set_visible"] = blist_callback
blist_cbs["request_add_buddy"] = blist_callback
blist_cbs["request_add_chat"] = blist_callback
def conv_callback(name):
print "---- conversation callback example: %s" % name
-conv_cbs["create_conversation"] = conv_callback
-conv_cbs["destroy_conversation"] = conv_callback
+#conv_cbs["create_conversation"] = conv_callback
+#conv_cbs["destroy_conversation"] = conv_callback
conv_cbs["write_chat"] = conv_callback
conv_cbs["write_conv"] = conv_callback
+#conv_cbs["write_im"] = conv_callback
conv_cbs["chat_add_users"] = conv_callback
conv_cbs["chat_rename_user"] = conv_callback
conv_cbs["chat_remove_users"] = conv_callback
class MainWindow:
def __init__(self, quit_cb):
global conv_cbs
+ global signal_cbs
self.bt_cbs = {}
+ self.send_cbs = {}
self.quit_cb = quit_cb
conv_cbs["write_im"] = self._write_im_cb
hbox_cmd = etk.HBox(homogeneous=False)
self.cmd_entry = etk.Entry()
- lcmd = etk.Label(text="Type your message: ")
- hbox_cmd.append(lcmd, etk.HBox.START, etk.HBox.START, 0)
+ self.lcmd = etk.Label(text="Type your message: ")
+ hbox_cmd.append(self.lcmd, etk.HBox.START, etk.HBox.START, 0)
hbox_cmd.append(self.cmd_entry, etk.HBox.START, etk.HBox.EXPAND_FILL, 0)
hbox_buttons = etk.HBox(homogeneous=False)
def _send_bt_cb(self, pointer):
bname = self.blist.selected_rows[0][0]
- if bname:
- print "ITEM: %s" % bname
+ msg = self.cmd_entry.text
+ if bname and msg != "":
+ if self.send_cbs.has_key("on_clicked"):
+ self.send_cbs["on_clicked"](bname, msg)
+ else:
+ print "Buddy not selected!"
+ self.cmd_entry.text = ""
def _purple_conn_status_cb(self, txt, step, step_count):
self.lstatus.text = txt
def remove_buddy(self, bname):
self.blistmodel.remove([bname])
- def _purple_disconnected_status_cb(self, pointer):
+ def _purple_disconnected_status_cb(self):
self.lstatus.text = "Disconnected"
def set_panel_text(self, txt):
if callable(cb):
self.bt_cbs["on_clicked"] = cb
+ def add_send_cb(self, cb):
+ if callable(cb):
+ self.send_cbs["on_clicked"] = cb
+
def add_quit_cb(self, cb):
if callable(cb):
self.quit_cb = cb
self.p = purple.Purple(debug_enabled=False)
self.window = MainWindow(self.quit)
self.buddies = [] #online buddies
+ self.conversations = {}
self.account = None
self.protocol_id = "prpl-jabber"
self.username = "carmanplugintest@gmail.com"
global signal_cbs
cbs["blist"]["update"] = self._purple_update_blist_cb
signal_cbs["buddy_signed_off"] = self._purple_signal_sign_off_cb
+ cbs["conversation"]["create_conversation"] = self._purple_create_conv_cb
self.p.purple_init(cbs)
#Initializing UI
self.window.add_bt_conn_cb(self.connect)
+ self.window.add_send_cb(self.send_msg)
self.window.init_window()
def _purple_update_blist_cb(self, type, name=None, totalsize=None,\
self.buddies.remove(bname)
self.window.remove_buddy(bname)
+ def _purple_create_conv_cb(self, name, type):
+ bname = name.split("/")[0]
+ if bname in self.buddies and not self.conversations.has_key(name):
+ conv = purple.Conversation()
+ conv.initialize(self.account, "IM", bname)
+ self.conversations[bname] = conv
+
def connect(self):
self.account = purple.Account(self.username, self.protocol_id)
self.account.set_password(self.password)
self.p.connect()
self.p.attach_signals(signal_cbs)
+ def send_msg(self, name, msg):
+ if not self.conversations.has_key(name):
+ conv = purple.Conversation()
+ conv.initialize(self.account, "IM", name)
+ self.conversations[name] = conv
+ self.conversations[name].write(msg)
+
def quit(self, o):
- print "quitting"
- self.p = None
+ print "[DEBUG]: quitting"
+ for i in self.conversations:
+ self.conversations[i].destroy()
+ self.conversations[i] = None
+ self.conversations = None
+ self.p.destroy()
ecore.main_loop_quit()
if __name__ == '__main__':