Ticket #2225: message_forms.patch

File message_forms.patch, 7.6 kB (added by asac@…, 2 years ago)

(single) message data form support

  • roster_window.py

     
    22312231 
    22322232        def on_message(self, jid, msg, tim, account, encrypted = False, 
    22332233                        msg_type = '', subject = None, resource = '', msg_id = None, 
    2234                         user_nick = ''): 
     2234                        user_nick = '', form_node = None): 
    22352235                '''when we receive a message''' 
    22362236                contact = None 
    22372237                # if chat window will be for specific resource 
     
    22922292                if msg_type == 'normal' and popup: # it's single message to be autopopuped 
    22932293                        dialogs.SingleMessageWindow(account, contact.jid, 
    22942294                                action = 'receive', from_whom = jid, subject = subject, 
    2295                                 message = msg, resource = resource) 
     2295                                message = msg, resource = resource, form_node = form_node) 
    22962296                        return 
    22972297 
    22982298                # We print if window is opened and it's not a single message 
     
    23132313                if msg_type == 'normal': 
    23142314                        kind = 'normal' 
    23152315                qs[fjid].append((kind, (msg, subject, msg_type, tim, encrypted, 
    2316                         resource, msg_id))) 
     2316                        resource, msg_id, form_node))) 
    23172317                self.nb_unread += 1 
    23182318                if popup: 
    23192319                        if not ctrl: 
     
    25622562                if typ == 'normal': 
    25632563                        dialogs.SingleMessageWindow(account, jid, 
    25642564                                action = 'receive', from_whom = jid, subject = data[1], 
    2565                                 message = data[0], resource = data[5]) 
     2565                                message = data[0], resource = data[5], form_node = data[7]) 
    25662566                        gajim.interface.remove_first_event(account, jid, typ) 
    25672567                        return True 
    25682568                elif typ == 'file-request': 
  • dialogs.py

     
    4141 
    4242from common import gajim 
    4343from common import helpers 
     44import dataforms 
    4445 
    4546class EditGroupsDialog: 
    4647        '''Class for the edit group dialog window''' 
     
    12431244        or 'receive'. 
    12441245        ''' 
    12451246        def __init__(self, account, to = '', action = '', from_whom = '', 
    1246         subject = '', message = '', resource = ''): 
     1247                     subject = '', message = '', resource = '', form_node = None): 
    12471248                self.account = account 
    12481249                self.action = action 
    1249  
    12501250                self.subject = subject 
    12511251                self.message = message 
    12521252                self.to = to 
    12531253                self.from_whom = from_whom 
    12541254                self.resource = resource 
    1255                  
     1255                self.form_node = form_node 
     1256 
    12561257                self.xml = gtkgui_helpers.get_glade('single_message_window.glade') 
    12571258                self.window = self.xml.get_widget('single_message_window') 
    12581259                self.count_chars_label = self.xml.get_widget('count_chars_label') 
     
    12731274                self.conversation_tv_buffer = self.conversation_textview.tv.get_buffer() 
    12741275                self.xml.get_widget('conversation_scrolledwindow').add( 
    12751276                        self.conversation_textview.tv) 
     1277 
     1278                parent_box = self.xml.get_widget('conversation_scrolledwindow').get_parent() 
     1279                if self.form_node: 
     1280                        self.form_widget = dataforms.DataFormWidget(self.form_node) 
     1281                        parent_box.add(self.form_widget) 
     1282                        parent_box.child_set_property(self.form_widget, 'position', 
     1283                                                      parent_box.child_get_property(self.xml.get_widget('conversation_scrolledwindow'), 'position')) 
     1284                        self.action = 'form' 
     1285                         
    12761286                self.send_button = self.xml.get_widget('send_button') 
    12771287                self.reply_button = self.xml.get_widget('reply_button') 
    12781288                self.send_and_close_button = self.xml.get_widget('send_and_close_button') 
     
    14061416                        self.reply_button.grab_focus() 
    14071417                        self.cancel_button.hide() 
    14081418                        self.close_button.show() 
    1409                  
     1419 
     1420                elif action == 'form': # prepare UI for Receiving 
     1421                        title = _('Form %s') % title 
     1422                        self.send_button.show() 
     1423                        self.send_and_close_button.show() 
     1424                        self.to_label.show() 
     1425                        self.to_entry.show() 
     1426                        self.reply_button.hide() 
     1427                        self.from_label.hide() 
     1428                        self.from_entry.hide() 
     1429                        self.conversation_scrolledwindow.show() 
     1430                        self.message_scrolledwindow.hide() 
     1431                         
    14101432                self.window.set_title(title) 
    14111433 
    14121434        def on_cancel_button_clicked(self, widget): 
     
    14411463 
    14421464                # FIXME: allow GPG message some day 
    14431465                gajim.connections[self.account].send_message(to_whom_jid, message, 
    1444                         keyID = None, type = 'normal', subject=subject) 
     1466                                                             keyID = None, type = 'normal', subject=subject, form_node = self.form_node) 
    14451467                 
    14461468                self.subject_entry.set_text('') # we sent ok, clear the subject 
    14471469                self.message_tv_buffer.set_text('') # we sent ok, clear the textview 
  • gajim.py

     
    11#!/bin/sh 
    22''':' 
    3 exec python -OOt "$0" ${1+"$@"} 
     3exec python2.4 -OOt "$0" ${1+"$@"} 
    44' ''' 
    55##      gajim.py 
    66## 
     
    487487 
    488488        def handle_event_msg(self, account, array): 
    489489                # 'MSG' (account, (jid, msg, time, encrypted, msg_type, subject, 
    490                 # chatstate, msg_id, composing_jep, user_nick)) user_nick is JEP-0172 
     490                # chatstate, msg_id, composing_jep, user_nick, form_node)) user_nick is JEP-0172 
    491491 
    492492                full_jid_with_resource = array[0] 
    493493                jid = gajim.get_jid_without_resource(full_jid_with_resource) 
     
    574574                else: 
    575575                        # array: (jid, msg, time, encrypted, msg_type, subject) 
    576576                        self.roster.on_message(jid, message, array[2], account, array[3], 
    577                                 msg_type, array[5], resource, msg_id, array[9]) 
     577                                msg_type, array[5], resource, msg_id, array[9], array[10]) 
    578578                        nickname = gajim.get_name_from_jid(account, jid) 
    579579                # Check and do wanted notifications      
    580580                notify.notify('new_message', jid, account, [msg_type, first, nickname, 
  • common/connection.py

     
    679679 
    680680        def send_message(self, jid, msg, keyID, type = 'chat', subject='', 
    681681        chatstate = None, msg_id = None, composing_jep = None, resource = None, 
    682         user_nick = None): 
     682        user_nick = None, form_node = None): 
    683683                if not self.connection: 
    684684                        return 
    685                 if not msg and chatstate is None: 
     685                if not msg and chatstate is None and form_node is None: 
    686686                        return 
    687687                fjid = jid 
    688688                if resource: 
     
    710710                if msgenc: 
    711711                        msg_iq.setTag(common.xmpp.NS_ENCRYPTED + ' x').setData(msgenc) 
    712712 
     713                if form_node: 
     714                        msg_iq.addChild(node=form_node) 
     715 
    713716                # JEP-0172: user_nickname 
    714717                if user_nick: 
    715718                        df = self.build_user_nick(user_nick) 
  • common/connection_handlers.py

     
    3636from common import atom 
    3737from common.commands import ConnectionCommands 
    3838 
     39import dataforms 
     40 
    3941STATUS_LIST = ['offline', 'connecting', 'online', 'chat', 'away', 'xa', 'dnd', 
    4042        'invisible'] 
    4143# kind of events we can wait for an answer 
     
    12831285                msgtxt = msg.getBody() 
    12841286                mtype = msg.getType() 
    12851287                subject = msg.getSubject() # if not there, it's None 
     1288                form_node = dataforms.DataForm(node=msg.getTag("x", {}, "jabber:x:data")) 
    12861289                tim = msg.getTimestamp() 
    12871290                tim = time.strptime(tim, '%Y%m%dT%H:%M:%S') 
    12881291                tim = time.localtime(timegm(tim)) 
     
    13821385                                msg_id = gajim.logger.write('chat_msg_recv', frm, msgtxt, tim = tim, 
    13831386                                        subject = subject) 
    13841387                        self.dispatch('MSG', (frm, msgtxt, tim, encrypted, mtype, subject, 
    1385                                 chatstate, msg_id, composing_jep, user_nick)) 
     1388                                chatstate, msg_id, composing_jep, user_nick, form_node)) 
    13861389                else: # it's single message 
    13871390                        if self.name not in no_log_for and jid not in no_log_for and msgtxt: 
    13881391                                gajim.logger.write('single_msg_recv', frm, msgtxt, tim = tim, 
     
    13961399                                self.dispatch('GC_INVITATION',(frm, jid_from, reason, password)) 
    13971400                        else: 
    13981401                                self.dispatch('MSG', (frm, msgtxt, tim, encrypted, 'normal', 
    1399                                         subject, chatstate, msg_id, composing_jep, user_nick)) 
     1402                                        subject, chatstate, msg_id, composing_jep, user_nick, form_node)) 
    14001403        # END messageCB 
    14011404 
    14021405        def _pubsubEventCB(self, con, msg):