changeset fa54f28d6da8 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=fa54f28d6da8 description: use NEC to handle signed-in events
diffstat:
src/common/connection.py | 2 +- src/common/connection_handlers.py | 2 +- src/common/connection_handlers_events.py | 4 ++ src/common/zeroconf/connection_zeroconf.py | 2 +- src/groupchat_control.py | 13 ++++++++ src/gui_interface.py | 48 +++++++++++------------------ src/roster_window.py | 6 +++ 7 files changed, 45 insertions(+), 32 deletions(-)
diffs (201 lines):
diff -r f383d60c4dd3 -r fa54f28d6da8 src/common/connection.py --- a/src/common/connection.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/common/connection.py Mon Nov 29 11:11:24 2010 +0100 @@ -1547,7 +1547,7 @@ self.get_annotations()
# Inform GUI we just signed in - self.dispatch('SIGNED_IN', ()) + gajim.nec.push_incoming_event(SignedInEvent(None, conn=self))
def get_signed_presence(self, msg, callback = None): if gajim.config.get_per('accounts', self.name, 'gpg_sign_presence'): diff -r f383d60c4dd3 -r fa54f28d6da8 src/common/connection_handlers.py --- a/src/common/connection_handlers.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/common/connection_handlers.py Mon Nov 29 11:11:24 2010 +0100 @@ -2031,7 +2031,7 @@ self.get_annotations()
# Inform GUI we just signed in - self.dispatch('SIGNED_IN', ()) + gajim.nec.push_incoming_event(SignedInEvent(None, conn=self)) self.send_awaiting_pep() self.continue_connect_info = None
diff -r f383d60c4dd3 -r fa54f28d6da8 src/common/connection_handlers_events.py --- a/src/common/connection_handlers_events.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/common/connection_handlers_events.py Mon Nov 29 11:11:24 2010 +0100 @@ -1574,3 +1574,7 @@ self.session = self.msg_obj.session self.printed_in_chat = False return True + +class SignedInEvent(nec.NetworkIncomingEvent): + name = 'signed-in' + base_network_events = [] diff -r f383d60c4dd3 -r fa54f28d6da8 src/common/zeroconf/connection_zeroconf.py --- a/src/common/zeroconf/connection_zeroconf.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/common/zeroconf/connection_zeroconf.py Mon Nov 29 11:11:24 2010 +0100 @@ -279,7 +279,7 @@ check = self.connection.announce() else: self.connected = STATUS_LIST.index(show) - self.dispatch('SIGNED_IN', ()) + gajim.nec.push_incoming_event(SignedInEvent(None, conn=self))
# stay offline when zeroconf does something wrong if check: diff -r f383d60c4dd3 -r fa54f28d6da8 src/groupchat_control.py --- a/src/groupchat_control.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/groupchat_control.py Mon Nov 29 11:11:24 2010 +0100 @@ -464,6 +464,8 @@ self._nec_gc_subject_received) gajim.ged.register_event_handler('gc-config-changed-received', ged.GUI1, self._nec_gc_config_changed_received) + gajim.ged.register_event_handler('signed-in', ged.GUI1, + self._nec_signed_in) gajim.gc_connected[self.account][self.room_jid] = False # disable win, we are not connected yet ChatControlBase.got_disconnected(self) @@ -1228,6 +1230,15 @@ for change in changes: self.print_conversation(change)
+ def _nec_signed_in(self, obj): + if obj.conn.name != self.account: + return + if self.room_jid in gajim.gc_connected[obj.conn.name] and \ + gajim.gc_connected[obj.conn.name][self.room_jid]: + return + password = gajim.gc_passwords.get(self.room_jid, '') + obj.conn.join_gc(self.nick, self.room_jid, password) + def got_connected(self): # Make autorejoin stop. if self.autorejoin: @@ -1855,6 +1866,8 @@ self._nec_gc_subject_received) gajim.ged.remove_event_handler('gc-config-changed-received', ged.GUI1, self._nec_gc_config_changed_received) + gajim.ged.remove_event_handler('signed-in', ged.GUI1, + self._nec_signed_in)
if self.room_jid in gajim.gc_connected[self.account] and \ gajim.gc_connected[self.account][self.room_jid]: diff -r f383d60c4dd3 -r fa54f28d6da8 src/gui_interface.py --- a/src/gui_interface.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/gui_interface.py Mon Nov 29 11:11:24 2010 +0100 @@ -1002,17 +1002,16 @@ gajim.connections[account].request_last_status_time(contact.jid, contact.resource)
- def handle_event_signed_in(self, account, empty): + def handle_event_signed_in(self, obj): """ SIGNED_IN event is emitted when we sign in, so handle it """ # ('SIGNED_IN', account, ()) # block signed in notifications for 30 seconds + account = obj.conn.name gajim.block_signed_in_notifications[account] = True - self.roster.set_actions_menu_needs_rebuild() - self.roster.draw_account(account) state = self.sleeper.getState() - connected = gajim.connections[account].connected + connected = obj.conn.connected if gajim.config.get('ask_offline_status_on_connection'): # Ask offline status in 1 minute so w'are sure we got all online # presences @@ -1021,41 +1020,32 @@ # we go online or free for chat, so we activate auto status gajim.sleeper_state[account] = 'online' elif not ((state == common.sleepy.STATE_AWAY and connected == 4) or \ - (state == common.sleepy.STATE_XA and connected == 5)): + (state == common.sleepy.STATE_XA and connected == 5)): # If we are autoaway/xa and come back after a disconnection, do # nothing # Else disable autoaway gajim.sleeper_state[account] = 'off' + + if obj.conn.archiving_supported: + # Start merging logs from server + obj.conn.request_modifications_page(gajim.config.get_per('accounts', + account, 'last_archiving_time')) + gajim.config.set_per('accounts', account, 'last_archiving_time', + time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime())) + invisible_show = gajim.SHOW_LIST.index('invisible') # We cannot join rooms if we are invisible - if gajim.connections[account].connected == invisible_show: + if connected == invisible_show: return - # join already open groupchats - for gc_control in self.msg_win_mgr.get_controls( - message_control.TYPE_GC) + self.minimized_controls[account].values(): - if account != gc_control.account: - continue - room_jid = gc_control.room_jid - if room_jid in gajim.gc_connected[account] and \ - gajim.gc_connected[account][room_jid]: - continue - nick = gc_control.nick - password = gajim.gc_passwords.get(room_jid, '') - gajim.connections[account].join_gc(nick, room_jid, password) # send currently played music - if gajim.connections[account].pep_supported and dbus_support.supported \ - and gajim.config.get_per('accounts', account, 'publish_tune'): + if obj.conn.pep_supported and dbus_support.supported and \ + gajim.config.get_per('accounts', account, 'publish_tune'): self.enable_music_listener() # enable location listener - if gajim.connections[account].pep_supported and dbus_support.supported \ - and gajim.config.get_per('accounts', account, 'publish_location'): + if obj.conn.pep_supported and dbus_support.supported and \ + gajim.config.get_per('accounts', account, 'publish_location'): location_listener.enable() - if gajim.connections[account].archiving_supported: - # Start merging logs from server - gajim.connections[account].request_modifications_page( - gajim.config.get_per('accounts', account, 'last_archiving_time')) - gajim.config.set_per('accounts', account, 'last_archiving_time', - time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime())) +
def handle_event_metacontacts(self, obj): gajim.contacts.define_metacontacts(obj.conn.name, obj.meta_list) @@ -1403,7 +1393,6 @@ 'FILE_REQUEST': [self.handle_event_file_request], 'FILE_REQUEST_ERROR': [self.handle_event_file_request_error], 'FILE_SEND_ERROR': [self.handle_event_file_send_error], - 'SIGNED_IN': [self.handle_event_signed_in], 'atom-entry-received': [self.handle_atom_entry], 'bad-gpg-passphrase': [self.handle_event_bad_gpg_passphrase], 'bookmarks-received': [self.handle_event_bookmarks], @@ -1438,6 +1427,7 @@ 'roster-info': [self.handle_event_roster_info], 'roster-item-exchange-received': \ [self.handle_event_roster_item_exchange], + 'signed-in': [self.handle_event_signed_in], 'ssl-error': [self.handle_event_ssl_error], 'stream-conflict-received': [self.handle_event_resource_conflict], 'subscribe-presence-received': [ diff -r f383d60c4dd3 -r fa54f28d6da8 src/roster_window.py --- a/src/roster_window.py Mon Nov 29 10:50:30 2010 +0100 +++ b/src/roster_window.py Mon Nov 29 11:11:24 2010 +0100 @@ -2517,6 +2517,10 @@ def _nec_metacontacts_received(self, obj): self.redraw_metacontacts(obj.conn.name)
+ def _nec_signed_in(self, obj): + self.set_actions_menu_needs_rebuild() + self.draw_account(obj.conn.name) + ################################################################################ ### Menu and GUI callbacks ### FIXME: order callbacks in itself... @@ -6271,3 +6275,5 @@ self._nec_gc_subject_received) gajim.ged.register_event_handler('metacontacts-received', ged.GUI2, self._nec_metacontacts_received) + gajim.ged.register_event_handler('signed-in', ged.GUI1, + self._nec_signed_in)