Changeset 9556

Show
Ignore:
Timestamp:
05/02/08 04:32:28 (7 months ago)
Author:
bct
Message:

fixed groupchat

Location:
branches/session_centric/src
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • branches/session_centric/src/chat_control.py

    r9548 r9556  
    917917                if self.type_id == message_control.TYPE_PM: 
    918918                        room_jid, nick = gajim.get_room_and_nick_from_fjid(jid) 
    919                         groupchat_control = gajim.interface.msg_win_mgr.get_control( 
     919                        groupchat_control = gajim.interface.msg_win_mgr.get_gc_control( 
    920920                                room_jid, self.account) 
    921921                        if room_jid in gajim.interface.minimized_controls[self.account]: 
     
    928928                                gajim.interface.roster.draw_contact(room_jid, self.account) 
    929929                        groupchat_control.draw_contact(nick) 
    930                         mw = gajim.interface.msg_win_mgr.get_window(room_jid, self.account) 
     930                        mw = gajim.interface.msg_win_mgr.get_gc_window(room_jid, self.account) 
    931931                        if mw: 
    932932                                mw.redraw_tab(groupchat_control) 
  • branches/session_centric/src/common/connection_handlers.py

    r9465 r9556  
    12991299 
    13001300                        con.send(reply) 
    1301                  
     1301 
    13021302                raise common.xmpp.NodeProcessed 
    13031303 
     
    13291329                errcode = iq_obj.getErrorCode() 
    13301330                self.dispatch('ERROR_ANSWER', (id, jid_from, errmsg, errcode)) 
    1331          
     1331 
    13321332        def _PrivateCB(self, con, iq_obj): 
    13331333                ''' 
     
    15911591                                msg = session.decrypt_stanza(msg) 
    15921592                        except: 
    1593                                 self.dispatch('FAILED_DECRYPT', (frm, tim)) 
     1593                                self.dispatch('FAILED_DECRYPT', (frm, tim, session)) 
    15941594 
    15951595                msgtxt = msg.getBody() 
  • branches/session_centric/src/gajim.py

    r9326 r9556  
    447447                prompt = data[2] 
    448448                proposed_nick = data[3] 
    449                 gc_control = self.msg_win_mgr.get_control(room_jid, account) 
     449                gc_control = self.msg_win_mgr.get_gc_control(room_jid, account) 
    450450                if not gc_control and \ 
    451451                room_jid in self.minimized_controls[account]: 
     
    501501                                conn.disconnect_transfer(file_props) 
    502502                                return 
    503                 ctrl = self.msg_win_mgr.get_control(jid_from, account) 
    504                 if ctrl and ctrl.type_id == message_control.TYPE_GC: 
    505                         ctrl.print_conversation('Error %s: %s' % (array[2], array[1])) 
     503 
     504                for ctrl in self.msg_win_mgr.get_chat_controls(jid_from, account): 
     505                        if ctrl.type_id == message_control.TYPE_GC: 
     506                                ctrl.print_conversation('Error %s: %s' % (array[2], array[1])) 
    506507 
    507508        def handle_event_con_type(self, account, con_type): 
     
    957958 
    958959                # show avatar in chat 
    959                 win = None 
    960                 ctrl = None 
     960                ctrls = [] 
    961961                if resource and self.msg_win_mgr.has_window( 
    962962                jid + '/' + resource, account): 
    963963                        win = self.msg_win_mgr.get_window(jid + '/' + resource, 
    964964                                account) 
    965                         ctrl = win.get_control(jid + '/' + resource, account) 
     965                        ctrls = win.get_controls(jid + '/' + resource, account) 
    966966                elif self.msg_win_mgr.has_window(jid, account): 
    967967                        win = self.msg_win_mgr.get_window(jid, account) 
    968                         ctrl = win.get_control(jid, account) 
    969                 if win and ctrl.type_id != message_control.TYPE_GC: 
    970                         ctrl.show_avatar() 
     968                        ctrls = win.get_controls(jid, account) 
     969 
     970                for ctrl in ctrls: 
     971                        if ctrl.type_id != message_control.TYPE_GC: 
     972                                ctrl.show_avatar() 
    971973 
    972974                # Show avatar in roster or gc_roster 
    973                 gc_ctrl = self.msg_win_mgr.get_control(jid, account) 
     975                gc_ctrl = self.msg_win_mgr.get_gc_control(jid, account) 
    974976                if not gc_ctrl and \ 
    975977                jid in self.minimized_controls[account]: 
     
    10281030                # Get the window and control for the updated status, this may be a 
    10291031                # PrivateChatControl 
    1030                 control = self.msg_win_mgr.get_control(room_jid, account) 
     1032                control = self.msg_win_mgr.get_gc_control(room_jid, account) 
     1033 
    10311034                if not control and \ 
    10321035                room_jid in self.minimized_controls[account]: 
    10331036                        control = self.minimized_controls[account][room_jid] 
    10341037 
    1035                 if control and control.type_id != message_control.TYPE_GC: 
    1036                         return 
    1037                 if control: 
    1038                         control.chg_contact_status(nick, show, status, array[4], array[5], 
    1039                                 array[6], array[7], array[8], array[9], array[10], array[11]) 
     1038                if not control or (control and control.type_id != message_control.TYPE_GC): 
     1039                        return 
     1040 
     1041                control.chg_contact_status(nick, show, status, array[4], array[5], 
     1042                        array[6], array[7], array[8], array[9], array[10], array[11]) 
    10401043 
    10411044                contact = gajim.contacts.\ 
     
    10441047                        self.roster.draw_contact(room_jid, account) 
    10451048 
    1046                 ctrl = self.msg_win_mgr.get_control(fjid, account) 
    1047  
    1048                 # print status in chat window and update status/GPG image 
    1049                 if ctrl: 
     1049                # print status in chat windows and update status/GPG image 
     1050                for ctrl in self.msg_win_mgr.get_chat_controls(fjid, account): 
    10501051                        statusCode = array[9] 
    10511052                        if '303' in statusCode: 
     
    10831084                room_jid = jids[0] 
    10841085 
    1085                 gc_control = self.msg_win_mgr.get_control(room_jid, account) 
     1086                gc_control = self.msg_win_mgr.get_gc_control(room_jid, account) 
    10861087                if not gc_control and \ 
    10871088                room_jid in self.minimized_controls[account]: 
     
    11161117                jid = jids[0] 
    11171118 
    1118                 gc_control = self.msg_win_mgr.get_control(jid, account) 
     1119                gc_control = self.msg_win_mgr.get_gc_control(jid, account) 
    11191120 
    11201121                if not gc_control and \ 
     
    11811182                statusCode = array[1] 
    11821183 
    1183                 gc_control = self.msg_win_mgr.get_control(jid, account) 
     1184                gc_control = self.msg_win_mgr.get_gc_control(jid, account) 
    11841185                if not gc_control and \ 
    11851186                jid in self.minimized_controls[account]: 
     
    12401241                        else: 
    12411242                                win = self.msg_win_mgr.get_window(room_jid, account) 
    1242                                 ctrl = win.get_control(room_jid, account) 
     1243                                ctrl = win.get_gc_control(room_jid, account) 
    12431244                                win.remove_tab(ctrl, 3) 
    12441245 
     
    17831784 
    17841785        def handle_event_failed_decrypt(self, account, data): 
    1785                 jid, tim = data 
    1786  
    1787                 ctrl = self.msg_win_mgr.get_control(jid, account) 
     1786                jid, tim, session = data 
     1787 
     1788                ctrl = self.msg_win_mgr.get_control(jid, account, session.thread_id) 
    17881789                if ctrl: 
    17891790                        ctrl.print_conversation_line('Unable to decrypt message from %s\nIt may have been tampered with.' % (jid), 'status', '', tim) 
     
    25842585                        gajim.events.remove_events(account, jid, event) 
    25852586                        self.roster.draw_contact(jid, account) 
     2587 
    25862588                if w: 
    25872589                        w.set_active_tab(fjid, account) 
  • branches/session_centric/src/groupchat_control.py

    r9326 r9556  
    4444from common import gajim 
    4545from common import helpers 
     46from common.stanza_session import StanzaSession 
    4647 
    4748from chat_control import ChatControl 
     
    5859C_AVATAR, # avatar of the contact 
    5960) = range(5) 
    60          
     61 
    6162def set_renderer_color(treeview, renderer, set_background = True): 
    6263        '''set style for group row, using PRELIGHT system color''' 
     
    210211                self.new_nick = '' 
    211212                self.name = self.room_jid.split('@')[0] 
     213 
     214                self.session = StanzaSession(gajim.connections[self.account], 
     215                        self.room_jid, 'gc', 'gc') 
    212216 
    213217                compact_view = gajim.config.get('compact_view') 
     
    853857                        # Update pm chat window 
    854858                        fjid = self.room_jid + '/' + nick 
    855                         ctrl = gajim.interface.msg_win_mgr.get_control(fjid, self.account) 
    856859                        gc_contact = gajim.contacts.get_gc_contact(self.account, self.room_jid, 
    857860                                nick) 
    858                         if ctrl: 
     861                        for ctrl in gajim.interface.msg_win_mgr.get_chat_controls(fjid, self.account): 
    859862                                gc_contact.show = 'offline' 
    860863                                gc_contact.status = '' 
     
    20232026                menu.popup(None, None, None, event.button, event.time) 
    20242027 
    2025         def _start_private_message(self, nick, session = None): 
     2028        def _start_private_message(self, nick): 
    20262029                gc_c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick) 
    20272030                nick_jid = gc_c.get_full_jid() 
  • branches/session_centric/src/message_window.py

    r9548 r9556  
    397397                        gtkgui_helpers.set_unset_urgency_hint(self.window, False) 
    398398 
    399         def set_active_tab(self, session): 
    400                 ctrl = self._controls[session.conn.name][session.jid][session.thread_id] 
     399        def set_active_tab(self, ctrl): 
    401400                ctrl_page = self.notebook.page_num(ctrl.widget) 
    402401                self.notebook.set_current_page(ctrl_page) 
     
    539538                        ctrl.update_tags() 
    540539 
    541         def get_control(self, key, acct): 
     540        def get_control(self, key, acct, thread_id): 
    542541                '''Return the MessageControl for jid or n, where n is a notebook page index. 
    543                 When key is an int index acct may be None''' 
     542                When key is an int index acct and thread_id may be None''' 
    544543                if isinstance(key, str): 
    545544                        key = unicode(key, 'utf-8') 
     
    548547                        jid = key 
    549548                        try: 
    550                                 return self._controls[acct][jid] 
     549                                return self._controls[acct][jid][thread_id] 
    551550                        except: 
    552551                                return None 
     
    558557                        nth_child = notebook.get_nth_page(page_num) 
    559558                        return self._widget_to_control(nth_child) 
     559 
     560        def get_gc_control(self, jid, acct): 
     561                return self.get_control(jid, acct, 'gc') 
     562 
     563        def get_controls(self, jid, acct): 
     564                try: 
     565                        return self._controls[acct][jid].values() 
     566                except KeyError: 
     567                        return [] 
    560568 
    561569        def change_key(self, old_jid, new_jid, acct): 
     
    595603                                if ind < 0: 
    596604                                        ind = self.notebook.get_n_pages() - 1 
    597                         ctrl = self.get_control(ind, None) 
     605                        ctrl = self.get_control(ind, None, None) 
    598606                        if ctrl.get_nb_unread() > 0: 
    599607                                found = True 
     
    787795        def get_window(self, jid, acct): 
    788796                for win in self.windows(): 
    789                         if win.get_control(jid, acct): 
    790                                 return win 
     797                        try: 
     798                                if win._controls[acct][jid]: 
     799                                        return win 
     800                        except KeyError: 
     801                                pass 
     802                return None 
     803 
     804        def get_gc_control(self, jid, acct): 
     805                win = self.get_window(jid, acct) 
     806 
     807                if win: 
     808                        return win.get_gc_control(jid, acct) 
     809 
    791810                return None 
    792811 
     
    915934                                return 
    916935 
    917         def get_control(self, jid, acct): 
     936        def get_control(self, jid, acct, session): 
    918937                '''Amongst all windows, return the MessageControl for jid''' 
    919938                win = self.get_window(jid, acct) 
    920939                if win: 
    921                         return win.get_control(jid, acct) 
     940                        return win.get_control(jid, acct, session) 
    922941                return None 
    923942 
     
    930949                                ctrls.append(c) 
    931950                return ctrls 
     951 
     952        def get_chat_controls(self, jid, acct): 
     953                win = self.get_window(jid, acct) 
     954 
     955                if win: 
     956                        return win.get_controls(jid, acct) 
     957                else: 
     958                        return [] 
    932959 
    933960        def windows(self): 
  • branches/session_centric/src/roster_window.py

    r9548 r9556  
    778778        def join_gc_room(self, account, room_jid, nick, password, minimize=False, 
    779779                is_continued=False): 
    780                 '''joins the room immediatelly''' 
     780                '''joins the room immediately''' 
    781781                if gajim.interface.msg_win_mgr.has_window(room_jid, account) and \ 
    782782                                gajim.gc_connected[account][room_jid]: 
    783783                        win = gajim.interface.msg_win_mgr.get_window(room_jid, account) 
     784                        ctrl = gajim.interface.msg_win_mgr.get_gc_control(room_jid, account) 
    784785                        win.window.present() 
    785                         win.set_active_tab(room_jid, account) 
     786                        win.set_active_tab(ctrl) 
    786787                        dialogs.ErrorDialog(_('You are already in group chat %s') % room_jid) 
    787788                        return 
     
    809810                if not minimized_control_exists: 
    810811                        gc_win = gajim.interface.msg_win_mgr.get_window(room_jid, account) 
    811                         gc_win.set_active_tab(room_jid, account) 
     812                        gc_control = gc_win.get_gc_control(room_jid, account) 
     813                        gc_win.set_active_tab(gc_control) 
    812814                        gc_win.window.present() 
    813815                gajim.connections[account].join_gc(nick, room_jid, password) 
     
    13621364                                                else: 
    13631365                                                        gajim.transport_avatar[account][host].append(contact1.jid) 
    1364                         # If we already have a chat window opened, update it with new contact 
     1366 
     1367                        # If we already have chat windows opened, update them with new contact 
    13651368                        # instance 
    1366                         chat_control = gajim.interface.msg_win_mgr.get_control(ji, account) 
    1367                         if chat_control: 
     1369                        for chat_control in gajim.interface.msg_win_mgr.get_chat_controls(ji, account): 
    13681370                                chat_control.contact = contact1 
    13691371 
     
    13861388                                        win = gajim.interface.msg_win_mgr.get_window(jid_with_resource, 
    13871389                                                account) 
    1388                                         ctrl = win.get_control(jid_with_resource, account) 
    1389                                         ctrl.update_ui() 
    1390                                         win.redraw_tab(ctrl) 
     1390                                        for ctrl in win.get_controls(jid_with_resource, account): 
     1391                                                ctrl.update_ui() 
     1392                                                win.redraw_tab(ctrl) 
     1393 
    13911394                                gajim.contacts.remove_contact(account, contact) 
    13921395                self.remove_contact(contact, account) 
     
    13951398                if gajim.interface.msg_win_mgr.has_window(contact.jid, account): 
    13961399                        win = gajim.interface.msg_win_mgr.get_window(contact.jid, account) 
    1397                         ctrl = win.get_control(contact.jid, account) 
    1398                         ctrl.contact = gajim.contacts.get_contact_with_highest_priority( 
    1399                                 account, contact.jid) 
    1400                         ctrl.update_ui() 
    1401                         win.redraw_tab(ctrl) 
    1402  
    14031400                        uf_show = helpers.get_uf_show(show) 
    1404                         if status: 
    1405                                 ctrl.print_conversation(_('%s is now %s (%s)') % (name, uf_show, 
    1406                                         status), 'status') 
    1407                         else: # No status message 
    1408                                 ctrl.print_conversation(_('%s is now %s') % (name, uf_show), 
    1409                                         'status') 
     1401 
     1402                        for ctrl in win.get_controls(contact.jid, account): 
     1403                                ctrl.contact = gajim.contacts.get_contact_with_highest_priority( 
     1404                                        account, contact.jid) 
     1405                                ctrl.update_ui() 
     1406                                win.redraw_tab(ctrl) 
     1407 
     1408                                if status: 
     1409                                        ctrl.print_conversation(_('%s is now %s (%s)') % (name, uf_show, 
     1410                                                status), 'status') 
     1411                                else: # No status message 
     1412                                        ctrl.print_conversation(_('%s is now %s') % (name, uf_show), 
     1413                                                'status') 
    14101414 
    14111415                # unset custom status 
     
    18091813                                gajim.connections[account].update_contact(jid, new_text, u.groups) 
    18101814                                self.draw_contact(jid, account) 
    1811                                 # Update opened chat 
    1812                                 ctrl = gajim.interface.msg_win_mgr.get_control(jid, account) 
    1813                                 if ctrl: 
     1815                                # Update opened chats 
     1816                                for ctrl in gajim.interface.msg_win_mgr.get_controls(jid, account): 
    18141817                                        ctrl.update_ui() 
    18151818                                        win = gajim.interface.msg_win_mgr.get_window(jid, account) 
     
    18591862                                msg_win = gajim.interface.msg_win_mgr.get_window(contact.jid, 
    18601863                                        account) 
    1861                                 ctrl = gajim.interface.msg_win_mgr.get_control(contact.jid, account) 
    1862                                 msg_win.remove_tab(ctrl, msg_win.CLOSE_CLOSE_BUTTON) 
     1864                                for ctrl in gajim.interface.msg_win_mgr.get_controls(contact.jid, 
     1865                                                account): 
     1866                                        msg_win.remove_tab(ctrl, msg_win.CLOSE_CLOSE_BUTTON) 
    18631867                        else: 
    18641868                                need_readd = True 
     
    19191923                        keys[contact.jid] = keyID 
    19201924 
    1921                 if gajim.interface.msg_win_mgr.has_window(contact.jid, account): 
    1922                         ctrl = gajim.interface.msg_win_mgr.get_control(contact.jid, account) 
     1925                for ctrl in gajim.interface.msg_win_mgr.get_chat_controls(contact.jid, account): 
    19231926                        ctrl.update_ui() 
    19241927                keys_str = '' 
     
    19351938                # Update chat window 
    19361939                if gajim.interface.msg_win_mgr.has_window(jid, account): 
    1937                         win = gajim.interface.msg_win_mgr.get_window(jid, account) 
    1938                         ctrl = win.get_control(jid, account) 
    1939                         if win and ctrl.type_id != message_control.TYPE_GC: 
    1940                                 ctrl.show_avatar() 
     1940                        for ctrl in gajim.interface.msg_win_mgr.get_chat_controls(jid, account): 
     1941                                if ctrl.type_id != message_control.TYPE_GC: 
     1942                                        ctrl.show_avatar() 
    19411943 
    19421944        def on_set_custom_avatar_activate(self, widget, contact, account): 
     
    26552657                ctrl.parent_win = mw 
    26562658                mw.new_tab(ctrl) 
    2657                 mw.set_active_tab(jid, account) 
     2659                mw.set_active_tab(ctrl) 
    26582660                mw.window.present() 
    26592661                del gajim.interface.minimized_controls[account][jid] 
     
    39723974 
    39733975                mw = gajim.interface.msg_win_mgr.get_window(fjid, account) 
    3974                 mw.set_active_tab(fjid, account) 
     3976                mw.set_active_tab(session.control) 
    39753977                mw.window.present() 
    39763978                # For JEP-0172 
    39773979                if added_to_roster: 
    3978                         mc = mw.get_control(fjid, account) 
    3979                         mc.user_nick = gajim.nicks[account] 
     3980                        for mc in mw.get_controls(fjid, account): 
     3981                                mc.user_nick = gajim.nicks[account] 
    39803982 
    39813983        def new_room(self, room_jid, nick, account, is_continued=False): 
     
    43234325 
    43244326                win = session.control.parent_win 
    4325                 win.set_active_tab(session) 
     4327                win.set_active_tab(session.control) 
    43264328 
    43274329                if conn.is_zeroconf and conn.status in ('offline', 'invisible'): 
    4328                         win.get_control(fjid, account).got_disconnected() 
     4330                        for ctrl in win.get_controls(fjid, account): 
     4331                                ctrl.got_disconnected() 
    43294332 
    43304333                win.window.present() 
  • branches/session_centric/src/session.py

    r9548 r9556  
    108108                        jid = jid.replace('@', '') 
    109109 
    110                 groupchat_control = gajim.interface.msg_win_mgr.get_control(jid, self.conn.name) 
     110                #groupchat_control = gajim.interface.msg_win_mgr.get_control(jid, self.conn.name) 
    111111 
    112112# XXX fixme 
  • branches/session_centric/src/vcard.py

    r9299 r9556  
    124124                # Update roster 
    125125                gajim.interface.roster.draw_avatar(jid, self.account) 
    126                 # Update chat window 
    127                 if gajim.interface.msg_win_mgr.has_window(jid, self.account): 
    128                         win = gajim.interface.msg_win_mgr.get_window(jid, self.account) 
    129                         ctrl = win.get_control(jid, self.account) 
    130                         if win and ctrl.type_id != message_control.TYPE_GC: 
     126                # Update chat windows 
     127                for ctrl in gajim.interface.msg_win_mgr.get_chat_controls(jid, self.account): 
     128    &