changeset 03ecf0285581 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=03ecf0285581 description: iability to show captcha when joining a groupchat with captcha. (TODO: download image when it's not in the message itself)
diffstat:
data/gui/groupchat_control.ui | 168 ++++++++++++++++++------------------- src/common/connection.py | 79 ++++++++++------- src/common/connection_handlers.py | 17 +++- src/common/dataforms.py | 92 ++++++++++++++++++++- src/common/xmpp/protocol.py | 3 + src/dataforms_widget.py | 20 ++++ src/groupchat_control.py | 36 +++++++- src/gui_interface.py | 5 +- 8 files changed, 294 insertions(+), 126 deletions(-)
diffs (truncated from 619 to 300 lines):
diff -r 78e6097b351a -r 03ecf0285581 data/gui/groupchat_control.ui --- a/data/gui/groupchat_control.ui Sun Jun 27 23:04:49 2010 +0200 +++ b/data/gui/groupchat_control.ui Sun Jun 27 23:09:07 2010 +0200 @@ -5,6 +5,7 @@ <object class="GtkVBox" id="groupchat_control_vbox"> <property name="can_focus">True</property> <property name="border_width">3</property> + <property name="orientation">vertical</property> <child> <object class="GtkAlignment" id="alignment"> <property name="visible">True</property> @@ -34,6 +35,7 @@ <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="border_width">5</property> + <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="banner_name_label"> <property name="visible">True</property> @@ -74,6 +76,85 @@ </packing> </child> <child> + <object class="GtkHPaned" id="hpaned"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> + <property name="position">495</property> + <property name="position_set">True</property> + <child> + <object class="GtkVBox" id="gc_textviews_vbox"> + <property name="width_request">0</property> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkScrolledWindow" id="conversation_scrolledwindow"> + <property name="width_request">200</property> + <property name="height_request">60</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <property name="shadow_type">in</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="message_scrolledwindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <property name="shadow_type">in</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="resize">False</property> + <property name="shrink">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="list_scrolledwindow"> + <property name="width_request">100</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">automatic</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="list_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">1</property> + <property name="headers_visible">False</property> + </object> + </child> + </object> + <packing> + <property name="resize">False</property> + <property name="shrink">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> <object class="GtkHBox" id="actions_hbox"> <property name="visible">True</property> <child> @@ -339,92 +420,5 @@ <property name="position">2</property> </packing> </child> - <child> - <object class="GtkHPaned" id="hpaned"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="border_width">3</property> - <property name="position">495</property> - <property name="position_set">True</property> - <child> - <object class="GtkVBox" id="vbox108"> - <property name="width_request">0</property> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkVBox" id="vbox109"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkScrolledWindow" id="conversation_scrolledwindow"> - <property name="width_request">200</property> - <property name="height_request">60</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="message_scrolledwindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">never</property> - <property name="shadow_type">in</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - </object> - <packing> - <property name="resize">False</property> - <property name="shrink">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="list_scrolledwindow"> - <property name="width_request">100</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="list_treeview"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="border_width">1</property> - <property name="headers_visible">False</property> - </object> - </child> - </object> - <packing> - <property name="resize">False</property> - <property name="shrink">False</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> </object> </interface> diff -r 78e6097b351a -r 03ecf0285581 src/common/connection.py --- a/src/common/connection.py Sun Jun 27 23:04:49 2010 +0200 +++ b/src/common/connection.py Sun Jun 27 23:09:07 2010 +0200 @@ -288,33 +288,37 @@ gajim.thread_interface(encrypt_thread, [msg, keyID, True], _on_encrypted, []) else: - self._message_encrypted_cb(output, type_, msg, msgtxt, - original_message, fjid, resource, jid, xhtml, - subject, chatstate, composing_xep, label, forward_from, - delayed, session, form_node, user_nick, keyID, - callback) + self._message_encrypted_cb(output, type_, msg, + msgtxt, original_message, fjid, resource, + jid, xhtml, subject, chatstate, msg_id, + composing_xep, label, forward_from, delayed, + session, form_node, user_nick, keyID, + callback) self.dispatch('GPG_ALWAYS_TRUST', _on_always_trust) else: self._message_encrypted_cb(output, type_, msg, msgtxt, - original_message, fjid, resource, jid, xhtml, subject, - chatstate, composing_xep, label, forward_from, delayed, session, - form_node, user_nick, keyID, callback) + original_message, fjid, resource, jid, xhtml, + subject, chatstate, msg_id, composing_xep, label, + forward_from, delayed, session, form_node, + user_nick, keyID, callback) gajim.thread_interface(encrypt_thread, [msg, keyID, False], _on_encrypted, []) return
self._message_encrypted_cb(('', error), type_, msg, msgtxt, - original_message, fjid, resource, jid, xhtml, subject, chatstate, - composing_xep, label, forward_from, delayed, session, form_node, user_nick, - keyID, callback) + original_message, fjid, resource, jid, xhtml, subject, + chatstate, msg_id, composing_xep, label, forward_from, delayed, + session, form_node, user_nick, keyID, callback)
self._on_continue_message(type_, msg, msgtxt, original_message, fjid, - resource, jid, xhtml, subject, msgenc, keyID, chatstate, composing_xep, - label, forward_from, delayed, session, form_node, user_nick, callback) + resource, jid, xhtml, subject, msgenc, keyID, chatstate, msg_id, + composing_xep, label, forward_from, delayed, session, form_node, + user_nick, callback)
- def _message_encrypted_cb(self, output, type_, msg, msgtxt, original_message, - fjid, resource, jid, xhtml, subject, chatstate, composing_xep, label, forward_from, - delayed, session, form_node, user_nick, keyID, callback): + def _message_encrypted_cb(self, output, type_, msg, msgtxt, + original_message, fjid, resource, jid, xhtml, subject, chatstate, msg_id, + composing_xep, label, forward_from, delayed, session, form_node, user_nick, + keyID, callback): msgenc, error = output
if msgenc and not error: @@ -324,19 +328,19 @@ # one in locale and one en msgtxt = _('[This message is *encrypted* (See :XEP:`27`]') + \ ' (' + msgtxt + ')' - self._on_continue_message(type_, msg, msgtxt, original_message, fjid, - resource, jid, xhtml, subject, msgenc, keyID, chatstate, - composing_xep, label, forward_from, delayed, session, form_node, user_nick, - callback) + self._on_continue_message(type_, msg, msgtxt, original_message, + fjid, resource, jid, xhtml, subject, msgenc, keyID, + chatstate, msg_id, composing_xep, label, forward_from, delayed, + session, form_node, user_nick, callback) return # Encryption failed, do not send message tim = localtime() self.dispatch('MSGNOTSENT', (jid, error, msgtxt, tim, session))
def _on_continue_message(self, type_, msg, msgtxt, original_message, fjid, - resource, jid, xhtml, subject, msgenc, keyID, chatstate, composing_xep, - label, - forward_from, delayed, session, form_node, user_nick, callback): + resource, jid, xhtml, subject, msgenc, keyID, chatstate, msg_id, + composing_xep, label, forward_from, delayed, session, form_node, user_nick, + callback): if type_ == 'chat': msg_iq = common.xmpp.Message(to=fjid, body=msgtxt, typ=type_, xhtml=xhtml) @@ -347,6 +351,10 @@ else: msg_iq = common.xmpp.Message(to=fjid, body=msgtxt, typ='normal', xhtml=xhtml) + + if msg_id: + msg_iq.setID(msg_id) + if msgenc: msg_iq.setTag(common.xmpp.NS_ENCRYPTED + ' x').setData(msgenc)
@@ -1607,11 +1615,11 @@
self.connection.send(msg_iq)
- def send_message(self, jid, msg, keyID, type_='chat', subject='', + def send_message(self, jid, msg, keyID=None, type_='chat', subject='', chatstate=None, msg_id=None, composing_xep=None, resource=None,