diff --git a/src/dialogs.py b/src/dialogs.py index 1eb0829f6..add623ca1 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -1718,21 +1718,10 @@ class JoinGroupchatWindow: ' '.join(self.recently_groupchat)) if self.xml.get_widget('auto_join_checkbutton').get_active(): - # create the bookmark-dict - # is it already bookmarked ? - room_jid_bookmarked = False - for bmdict in gajim.connections[self.account].bookmarks: - if bmdict['jid'] == room_jid: - room_jid_bookmarked = True - break - if not room_jid_bookmarked: - name = gajim.get_nick_from_jid(room_jid) - bmdict = { 'name': name, 'jid': room_jid, 'autojoin': u'1', - 'minimize': '0', 'password': password, 'nick': nickname, - 'print_status': gajim.config.get('print_status_in_muc')} - - gajim.connections[self.account].bookmarks.append(bmdict) - gajim.connections[self.account].store_bookmarks() + # Add as bookmark, with autojoin and not minimized + name = gajim.get_nick_from_jid(room_jid) + gajim.interface.add_gc_bookmark(self.account, name, room_jid, '1', \ + '0', password, nickname) if self.automatic: gajim.automatic_rooms[self.account][room_jid] = self.automatic diff --git a/src/gajim.py b/src/gajim.py index af7a6fd49..38e4f8d94 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -1545,7 +1545,7 @@ class Interface: if gajim.connections[account].connected == invisible_show: return - self.roster.auto_join_bookmarks(account) + self.auto_join_bookmarks(account) def handle_event_file_send_error(self, account, array): jid = array[0] @@ -2776,7 +2776,8 @@ class Interface: mc = mw.get_control(fjid, account) mc.user_nick = gajim.nicks[account] - def on_open_chat_window(self, contact, account, resource = None, session = None): + def on_open_chat_window(self, contact, account, resource = None, + session = None): # Get the window containing the chat fjid = contact.jid if resource: @@ -2959,6 +2960,53 @@ class Interface: if os.path.isfile(path_to_file + '_notif_size_bw' + ext): os.remove(path_to_file + '_notif_size_bw' + ext) + def auto_join_bookmarks(self, account): + '''autojoin bookmarked GCs that have 'auto join' on for this account''' + for bm in gajim.connections[account].bookmarks: + if bm['autojoin'] in ('1', 'true'): + jid = bm['jid'] + if not gajim.gc_connected[account].has_key(jid) or\ + not gajim.gc_connected[account][jid]: + # we are not already connected + minimize = bm['minimize'] in ('1', 'true') + gajim.interface.join_gc_room(account, jid, bm['nick'], + bm['password'], minimize = minimize) + + def add_gc_bookmark(self, account, name, jid, autojoin, minimize, password, + nick): + '''add a bookmark for this account, sorted in bookmark list''' + bm = { + 'name': name, + 'jid': jid, + 'autojoin': autojoin, + 'minimize': minimize, + 'password': password, + 'nick': nick + } + place_found = False + index = 0 + # check for duplicate entry and respect alpha order + for bookmark in gajim.connections[account].bookmarks: + if bookmark['jid'] == bm['jid']: + dialogs.ErrorDialog( + _('Bookmark already set'), + _('Group Chat "%s" is already in your bookmarks.') % bm['jid']) + return + if bookmark['name'] > bm['name']: + place_found = True + break + index += 1 + if place_found: + gajim.connections[account].bookmarks.insert(index, bm) + else: + gajim.connections[account].bookmarks.append(bm) + gajim.connections[account].store_bookmarks() + self.roster.set_actions_menu_needs_rebuild() + dialogs.InformationDialog( + _('Bookmark has been added successfully'), + _('You can manage your bookmarks via Actions menu in your roster.')) + + def create_ipython_window(self): try: from ipython_view import IPythonView diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 57dc3fb51..71f0d3779 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -1726,40 +1726,12 @@ class GroupchatControl(ChatControlBase): jid) def _on_bookmark_room_menuitem_activate(self, widget): - bm = { - 'name': self.name, - 'jid': self.room_jid, - 'autojoin': '0', - 'minimize': '0', - 'password': '', - 'nick': self.nick - } - - place_found = False - index = 0 - # check for duplicate entry and respect alpha order - for bookmark in gajim.connections[self.account].bookmarks: - if bookmark['jid'] == bm['jid']: - dialogs.ErrorDialog( - _('Bookmark already set'), - _('Group Chat "%s" is already in your bookmarks.') % bm['jid']) - return - if bookmark['name'] > bm['name']: - place_found = True - break - index += 1 - - if place_found: - gajim.connections[self.account].bookmarks.insert(index, bm) - else: - gajim.connections[self.account].bookmarks.append(bm) - - gajim.connections[self.account].store_bookmarks() - gajim.interface.roster.set_actions_menu_needs_rebuild() - - dialogs.InformationDialog( - _('Bookmark has been added successfully'), - _('You can manage your bookmarks via Actions menu in your roster.')) + '''bookmark the room, without autojoin and not minimized''' + password = '' + if gajim.gc_passwords.has_key(self.room_jid): + password = gajim.gc_passwords[self.room_jid] + gajim.interface.add_gc_bookmark(self.account, self.name, self.room_jid, \ + '0', '0', password, self.nick) def _on_drag_data_received(self, widget, context, x, y, selection, target_type, timestamp): diff --git a/src/roster_window.py b/src/roster_window.py index 05a950102..cf9c8cc10 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1693,7 +1693,7 @@ class RosterWindow: gc_control.room_jid, None) if was_invisible and status != 'offline': # We come back from invisible, join bookmarks - self.auto_join_bookmarks(account) + gajim.interface.auto_join_bookmarks(account) def chg_contact_status(self, contact, show, status, account): '''When a contact changes his or her status'''