# HG changeset patch # User souliane # Date 1429514043 -7200 # Node ID b395d13099363023d2f3b3f0b61b946930ec69e6 # Parent c2f22ca12e23db9deadf2e00bd04f638c52ac5fd browser_side: clean the code that has been commented or isolated during the refactorisation to base libervia on quick_frontend diff -r c2f22ca12e23 -r b395d1309936 src/browser/libervia_main.py --- a/src/browser/libervia_main.py Mon Apr 20 08:51:25 2015 +0200 +++ b/src/browser/libervia_main.py Mon Apr 20 09:14:03 2015 +0200 @@ -71,13 +71,6 @@ MAX_MBLOG_CACHE = 500 # Max microblog entries kept in memories -# Set to true to not create a new LiberviaWidget when a similar one -# already exist (i.e. a chat panel with the same target). Instead -# the existing widget will be eventually removed from its parent -# and added to new libervia_widget.WidgetsPanel, or replaced to the expected -# position if the previous and the new parent are the same. -# REUSE_EXISTING_LIBERVIA_WIDGETS = True # FIXME - class SatWebFrontend(InputHistory, QuickApp): def onModuleLoad(self): @@ -107,8 +100,6 @@ self._versions={} # SàT and Libervia versions cache - # self._selected_listeners = set() # FIXME: to be done with new listeners mechanism - @property def whoami(self): # XXX: works because Libervia is mono-profile @@ -182,9 +173,6 @@ except TypeError: # plugin_sec_otr has not been imported pass - # def addSelectedListener(self, callback): - # self._selected_listeners.add(callback) - def getSelected(self): wid = self.tab_panel.getCurrentPanel() if not isinstance(wid, libervia_widget.WidgetsPanel): @@ -213,10 +201,6 @@ if widget: widgets_panel.selected.addStyleName('selected_widget') - # FIXME: - # for callback in self._selected_listeners: - # callback(widget) - def resize(self): """Resize elements""" Window.onResize() @@ -226,10 +210,6 @@ def onTabSelected(self, sender, tab_index): pass - # selected = self.getSelected() - # FIXME: - # for callback in self._selected_listeners: - # callback(selected) def onEventPreview(self, event): if event.type in ["keydown", "keypress", "keyup"] and event.keyCode == KEY_ESCAPE: @@ -359,13 +339,6 @@ self.bridge_signals.call('getSignals', self.bridge_signals.signalHandler) - #it's time to fill the page - # self.bridge.call('getContacts', self._getContactsCB) - # self.bridge.call('getParamsUI', self._getParamsUICB) - # self.bridge_signals.call('getSignals', self._getSignalsCB) - # #We want to know our own jid - # self.bridge.call('getProfileJid', self._getProfileJidCB) - def domain_cb(value): self._defaultDomain = value log.info(u"new account domain: %s" % value) @@ -375,17 +348,6 @@ self.bridge.getNewAccountDomain(callback=domain_cb, errback=domain_eb) self.plug_profiles([C.PROF_KEY_NONE]) # XXX: None was used intitially, but pyjamas bug when using variable arguments and None is the only arg. - # self.discuss_panel.addWidget(panel.MicroblogPanel(self, [])) - - # # get cached params and refresh the display - # def param_cb(cat, name, count): - # count[0] += 1 - # refresh = count[0] == len(C.CACHED_PARAMS) - # return lambda value: self._paramUpdate(name, value, cat, refresh) - - # count = [0] # used to do something similar to DeferredList - # for cat, name in C.CACHED_PARAMS: - # self.bridge.call('asyncGetParamA', param_cb(cat, name, count), name, cat) def profilePlugged(self, dummy): # FIXME: to be called as a "profilePlugged" listener? QuickApp.profilePlugged(self, dummy) @@ -541,32 +503,6 @@ self.personalEventHandler(*event_data) del self.init_cache - def _getProfileJidCB(self, jid_s): - # FIXME - raise Exception("should not be here !") - # self.whoami = jid.JID(jid_s) - # #we can now ask our status - # self.bridge.call('getPresenceStatuses', self._getPresenceStatusesCb) - # #the rooms where we are - # self.bridge.call('getRoomsJoined', self._getRoomsJoinedCb) - # #and if there is any subscription request waiting for us - # self.bridge.call('getWaitingSub', self._getWaitingSubCb) - # #we fill the panels already here - # for lib_wid in self.libervia_widgets: - # if isinstance(lib_wid, panel.MicroblogPanel): - # if lib_wid.accept_all(): - # self.bridge.call('getMassiveLastMblogs', lib_wid.massiveInsert, 'ALL', [], 10) - # else: - # self.bridge.call('getMassiveLastMblogs', lib_wid.massiveInsert, 'GROUP', lib_wid.accepted_groups, 10) - - # #we ask for our own microblogs: - # self.loadOurMainEntries() - - # # initialize plugins which waited for the connection to be done - # for plugin in self.plugins.values(): - # if hasattr(plugin, 'profileConnected'): - # plugin.profileConnected() - def loadOurMainEntries(self, index=0, mblog_panel=None): """Load a page of our own blogs from the cache or ask them to the backend. Then fill the panels with them. @@ -650,29 +586,6 @@ if lib_wid.isJidAccepted(entity): self.bridge.call('getMassiveMblogs', lib_wid.massiveInsert, 'JID', [unicode(entity)]) - # def getLiberviaWidget(self, class_, entity, ignoreOtherTabs=True): - # """Get the corresponding panel if it exists. - # @param class_ (class): class of the panel (ChatPanel, MicroblogPanel...) - # @param entity (dict): dictionnary to define the entity. - # @param ignoreOtherTabs (bool): if True, the widgets that are not - # contained by the currently selected tab will be ignored - # @return: the existing widget that has been found or None.""" - # selected_tab = self.tab_panel.getCurrentPanel() - # for lib_wid in self.libervia_widgets: - # parent = lib_wid.getWidgetsPanel(expect=False) - # if parent is None or (ignoreOtherTabs and parent != selected_tab): - # # do not return a widget that is not in the currently selected tab - # continue - # if isinstance(lib_wid, class_): - # try: - # if lib_wid.matchEntity(*(entity.values())): # XXX: passing **entity bugs! - # log.debug("existing widget found: %s" % lib_wid.getDebugName()) - # return lib_wid - # except AttributeError as e: - # e.stack_list() - # return None - # return None - def displayWidget(self, class_, target, dropped=False, new_tab=None, *args, **kwargs): """Get or create a LiberviaWidget and select it. When the user dropped something, a new widget is always created, otherwise we look for an @@ -722,188 +635,6 @@ self.setSelected(wid) return wid - - # def getOrCreateLiberviaWidget(self, class_, entity, select=True, new_tab=None): - # """Get the matching LiberviaWidget if it exists, or create a new one. - # @param class_ (class): class of the panel (ChatPanel, MicroblogPanel...) - # @param entity (dict): dictionnary to define the entity. - # @param select (bool): if True, select the widget that has been found or created - # @param new_tab (unicode): if not None, a widget which is created is created in - # a new tab. In that case new_tab is a unicode to label that new tab. - # If new_tab is not None and a widget is found, no tab is created. - # @return: the newly created wigdet if REUSE_EXISTING_LIBERVIA_WIDGETS - # is set to False or if the widget has not been found, the existing - # widget that has been found otherwise.""" - # lib_wid = None - # tab = None - # if REUSE_EXISTING_LIBERVIA_WIDGETS: - # lib_wid = self.getLiberviaWidget(class_, entity, new_tab is None) - # if lib_wid is None: # create a new widget - # lib_wid = class_.createPanel(self, *(entity.values())) # XXX: passing **entity bugs! - # if new_tab is None: - # self.addWidget(lib_wid) - # else: - # tab = self.addTab(new_tab, lib_wid, False) - # else: # reuse existing widget - # tab = lib_wid.getWidgetsPanel(expect=False) - # if new_tab is None: - # if tab is not None: - # tab.removeWidget(lib_wid) - # self.addWidget(lib_wid) - # if select: - # if new_tab is not None: - # self.tab_panel.selectTab(tab) - # # must be done after the widget is added, - # # for example to scroll to the bottom - # self.setSelected(lib_wid) - # lib_wid.refresh() - # return lib_wid - - # def getRoomWidget(self, target): - # """Get the MUC widget for the given target. - - # @param target (jid.JID): BARE jid of the MUC - # @return: panel.ChatPanel instance or None - # """ - # entity = {'item': target, 'type_': 'group'} - # if target.full() in self.room_list or target in self.room_list: # as JID is a string-based class, we don't know what will please Pyjamas... - # return self.getLiberviaWidget(panel.ChatPanel, entity, ignoreOtherTabs=False) - # return None - - # def getOrCreateRoomWidget(self, target): - # """Get the MUC widget for the given target, create it if necessary. - - # @param target (jid.JID): BARE jid of the MUC - # @return: panel.ChatPanel instance - # """ - # lib_wid = self.getRoomWidget(target) - # if lib_wid: - # return lib_wid - - # # XXX: target.node.startwith(...) raises an error "startswith is not a function" - # # This happens when node a is property defined in the JID class - # # FIXME: pyjamas doesn't handle the properties well - # node = target.node - - # # XXX: it's not really beautiful, but it works :) - # if node.startswith('sat_tarot_'): - # tab_name = "Tarot" - # elif node.startswith('sat_radiocol_'): - # tab_name = "Radio collective" - # else: - # tab_name = target.node - - # self.room_list.append(target) - # entity = {'item': target, 'type_': 'group'} - # return self.getOrCreateLiberviaWidget(panel.ChatPanel, entity, new_tab=tab_name) - - # def _newMessageCb(self, from_jid_s, msg, msg_type, to_jid_s, extra): - # from_jid = jid.JID(from_jid_s) - # to_jid = jid.JID(to_jid_s) - # for plugin in self.plugins.values(): - # if hasattr(plugin, 'messageReceivedTrigger'): - # if not plugin.messageReceivedTrigger(from_jid, msg, msg_type, to_jid, extra): - # return # plugin returned False to interrupt the process - # self.newMessageCb(from_jid, msg, msg_type, to_jid, extra) - - # def newMessageCb(self, from_jid, msg, msg_type, to_jid, extra): - # other = to_jid if from_jid.bare == self.whoami.bare else from_jid - # lib_wid = self.getLiberviaWidget(panel.ChatPanel, {'item': other}, ignoreOtherTabs=False) - # self.displayNotification(from_jid, msg) - # if msg_type == 'headline' and from_jid.full() == self._defaultDomain: - # try: - # assert extra['subject'] # subject is defined and not empty - # title = extra['subject'] - # except (KeyError, AssertionError): - # title = _('Announcement from %s') % from_jid.full() - # msg = strings.addURLToText(html_tools.XHTML2Text(msg)) - # dialog.InfoDialog(title, msg).show() - # return - # if lib_wid is not None: - # if msg_type == C.MESS_TYPE_INFO: - # lib_wid.printInfo(msg) - # else: - # lib_wid.printMessage(from_jid, msg, extra) - # if 'header_info' in extra: - # lib_wid.setHeaderInfo(extra['header_info']) - # else: - # # FIXME: "info" message and header info will be lost here - # if not self.contact_panel.isContactInRoster(other.bare): - # self.contact_panel.updateContact(other.bare, {}, [C.GROUP_NOT_IN_ROSTER]) - # # The message has not been shown, we must indicate it - # self.contact_panel.setContactMessageWaiting(other.bare, True) - - # def _presenceUpdateCb(self, entity, show, priority, statuses): - # entity_jid = jid.JID(entity) - # if self.whoami and self.whoami == entity_jid: # XXX: QnD way to get our presence/status - # assert(isinstance(self.status_panel, main_panel.PresenceStatusPanel)) - # self.status_panel.setPresence(show) # pylint: disable=E1103 - # if statuses: - # self.status_panel.setStatus(statuses.values()[0]) # pylint: disable=E1103 - # else: - # bare_jid = entity_jid.bareJID() - # if bare_jid.full() in self.room_list or bare_jid in self.room_list: # as JID is a string-based class, we don't know what will please Pyjamas... - # wid = self.getRoomWidget(bare_jid) - # else: - # wid = self.contact_panel - # if show == 'unavailable': # XXX: save some resources as for now we only need 'unavailable' - # for plugin in self.plugins.values(): - # if hasattr(plugin, 'presenceReceivedTrigger'): - # plugin.presenceReceivedTrigger(entity_jid, show, priority, statuses) - # if wid: - # wid.setConnected(entity_jid.bare, entity_jid.resource, show, priority, statuses) - - # def _roomJoinedCb(self, room_jid_s, room_nicks, user_nick): - # chat_panel = self.getOrCreateRoomWidget(jid.JID(room_jid_s)) - # chat_panel.setUserNick(user_nick) - # chat_panel.setPresents(room_nicks) - # chat_panel.refresh() - - # def _roomLeftCb(self, room_jid_s, room_nicks, user_nick): - # try: - # del self.room_list[room_jid_s] - # except KeyError: - # try: # as JID is a string-based class, we don't know what will please Pyjamas... - # del self.room_list[jid.JID(room_jid_s)] - # except KeyError: - # pass - - # def _roomUserJoinedCb(self, room_jid_s, user_nick, user_data): - # lib_wid = self.getOrCreateRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # lib_wid.userJoined(user_nick, user_data) - - # def _roomUserLeftCb(self, room_jid_s, user_nick, user_data): - # lib_wid = self.getRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # lib_wid.userLeft(user_nick, user_data) - - # def _roomUserChangedNickCb(self, room_jid_s, old_nick, new_nick): - # """Called when an user joined a MUC room""" - # lib_wid = self.getRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # lib_wid.changeUserNick(old_nick, new_nick) - - # def _tarotGameStartedCb(self, waiting, room_jid_s, referee, players): - # lib_wid = self.getRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # lib_wid.startGame("Tarot", waiting, referee, players) - - # def _tarotGameGenericCb(self, event_name, room_jid_s, args): - # lib_wid = self.getRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # getattr(lib_wid.getGame("Tarot"), event_name)(*args) - - # def _radioColStartedCb(self, waiting, room_jid_s, referee, players, queue_data): - # lib_wid = self.getRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # lib_wid.startGame("RadioCol", waiting, referee, players, queue_data) - - # def _radioColGenericCb(self, event_name, room_jid_s, args): - # lib_wid = self.getRoomWidget(jid.JID(room_jid_s)) - # if lib_wid: - # getattr(lib_wid.getGame("RadioCol"), event_name)(*args) - def _getPresenceStatusesCb(self, presence_data): for entity in presence_data: for resource in presence_data[entity]: @@ -950,32 +681,6 @@ def _newContactCb(self, contact_jid, attributes, groups): self.contact_panel.updateContact(contact_jid, attributes, groups) - def _entityDataUpdatedCb(self, entity_jid_s, key, value): - raise Exception # FIXME should not be here - if key == "avatar": - avatar = '/' + C.AVATARS_DIR + value - self.avatars_cache[entity_jid_s] = avatar - self.contact_panel.updateAvatar(entity_jid_s, avatar) - - for lib_wid in self.libervia_widgets: - if isinstance(lib_wid, blog.MicroblogPanel): - if lib_wid.isJidAccepted(entity_jid_s) or (self.whoami and entity_jid_s == self.whoami.bare): - lib_wid.updateValue('avatar', entity_jid_s, avatar) - - # def _chatStateReceivedCb(self, from_jid_s, state): - # """Callback when a new chat state is received. - # @param from_jid_s: JID of the contact who sent his state, or '@ALL@' - # @param state (unicode): new state - # """ - # if from_jid_s == '@ALL@': - # for lib_wid in self.libervia_widgets: - # if isinstance(lib_wid, panel.ChatPanel): - # lib_wid.setState(state, nick=C.ALL_OCCUPANTS) - # return - # from_jid = jid.JID(from_jid_s) - # lib_wid = self.getLiberviaWidget(panel.ChatPanel, {'item': from_jid}, ignoreOtherTabs=False) - # lib_wid.setState(state, nick=from_jid.resource) - def askConfirmationHandler(self, confirmation_id, confirmation_type, data): answer_data = {} @@ -1013,44 +718,6 @@ "Your message can't be sent", Width="400px").center() log.error("sendError: %s" % unicode(errorData)) - # FIXME: this method is fat too complicated and depend of widget type - # must be refactored and moved to each widget instead - # def send(self, targets, text, extra={}): - # """Send a message to any target type. - # @param targets: list of tuples (type, entities, addr) with: - # - type in ("PUBLIC", "GROUP", "COMMENT", "STATUS" , "groupchat" , "chat") - # - entities could be a JID, a list groups, a node hash... depending the target - # - addr in ("To", "Cc", "Bcc") - ignore case - # @param text: the message content - # @param extra: options - # """ - # # FIXME: too many magic strings, we should use constants instead - # addresses = [] - # for target in targets: - # type_, entities, addr = target[0], target[1], 'to' if len(target) < 3 else target[2].lower() - # if type_ in ("PUBLIC", "GROUP"): - # self.bridge.call("sendMblog", None, type_, entities if type_ == "GROUP" else None, text, extra) - # elif type_ == "COMMENT": - # self.bridge.call("sendMblogComment", None, entities, text, extra) - # elif type_ == "STATUS": - # assert(isinstance(self.status_panel, main_panel.PresenceStatusPanel)) - # self.bridge.call('setStatus', None, self.status_panel.presence, text) # pylint: disable=E1103 - # elif type_ in ("groupchat", "chat"): - # addresses.append((addr, entities)) - # else: - # log.error("Unknown target type") - # if addresses: - # if len(addresses) == 1 and addresses[0][0] == 'to': - # to_jid_s = addresses[0][1] - # for plugin in self.plugins.values(): - # if hasattr(plugin, 'sendMessageTrigger'): - # if not plugin.sendMessageTrigger(jid.JID(to_jid_s), text, type_, extra): - # return # plugin returned False to interrupt the process - # self.bridge.call('sendMessage', (None, self.sendError), to_jid_s, text, '', type_, extra) - # else: - # extra.update({'address': '\n'.join([('%s:%s' % entry) for entry in addresses])}) - # self.bridge.call('sendMessage', (None, self.sendError), self.whoami.domain, text, '', type_, extra) - def showWarning(self, type_=None, msg=None): """Display a popup information message, e.g. to notify the recipient of a message being composed. If type_ is None, a popup being currently displayed will be hidden. diff -r c2f22ca12e23 -r b395d1309936 src/browser/sat_browser/chat.py --- a/src/browser/sat_browser/chat.py Mon Apr 20 08:51:25 2015 +0200 +++ b/src/browser/sat_browser/chat.py Mon Apr 20 09:14:03 2015 +0200 @@ -147,17 +147,6 @@ def plugin_menu_context(self): return (C.MENU_ROOM,) if self.type == C.CHAT_GROUP else (C.MENU_SINGLE,) - # @classmethod - # def createPanel(cls, host, item, type_=C.CHAT_ONE2ONE): - # assert(item) - # _contact = item if isinstance(item, jid.JID) else jid.JID(item) - # host.contact_panel.setContactMessageWaiting(_contact.bare, False) - # _new_panel = Chat(host, _contact, type_) # XXX: pyjamas doesn't seems to support creating with cls directly - # _new_panel.historyPrint() - # host.setSelected(_new_panel) - # _new_panel.refresh() - # return _new_panel - def onKeyDown(self, sender, keycode, modifiers): if keycode == KEY_ENTER: self.host.showWarning(None, None) @@ -214,21 +203,6 @@ self.host.removeListener('presence', self.presenceListener) self.host.bridge.call('mucLeave', None, unicode(self.target.bare)) - # def historyPrint(self, size=C.HISTORY_LIMIT_DEFAULT): - # """Print the initial history""" - # def getHistoryCB(history): - # # display day change - # day_format = "%A, %d %b %Y" - # previous_day = datetime.now().strftime(day_format) - # for line in history: - # timestamp, from_jid_s, to_jid_s, message, mess_type, extra = line - # message_day = datetime.fromtimestamp(float(timestamp or time())).strftime(day_format) - # if previous_day != message_day: - # self.printInfo("* " + message_day) - # previous_day = message_day - # self.printMessage(jid.JID(from_jid_s), message, extra, timestamp) - # self.host.bridge.call('getHistory', getHistoryCB, self.host.whoami.bare, self.target.bare, size, True) - def printInfo(self, msg, type_='normal', extra=None, link_cb=None): """Print general info @param msg: message to print diff -r c2f22ca12e23 -r b395d1309936 src/browser/sat_browser/contact_list.py --- a/src/browser/sat_browser/contact_list.py Mon Apr 20 08:51:25 2015 +0200 +++ b/src/browser/sat_browser/contact_list.py Mon Apr 20 09:14:03 2015 +0200 @@ -233,18 +233,6 @@ if box: box.update() - def hasVisibleMembers(self, group): - """Tell if the given group actually has visible members - - @param group (unicode): the group to check - @return: boolean - """ - raise Exception # FIXME: remove this method - for jid_ in self.groups[group]: - if self._contacts_panel.updateContactBox(jid_).isVisible(): - return True - return False - def offlineContactsToShow(self): """Tell if offline contacts should be visible according to the user settings @@ -265,27 +253,6 @@ if box: # box doesn't exist for MUC bare entity, don't create it box.update() - # def updateVisibility(self, jids, groups): - # """Set the widgets visibility for the given contacts and groups - - # @param jids (list[unicode]): list of JID - # @param groups (list[unicode]): list of groups - # """ - # for jid_s in jids: - # try: - # self._contacts_panel.getContactBox(jid_s).setVisible(jid_s in self.connected or self.offlineContactsToShow()) - # except TypeError: - # log.warning('No box for contact %s: this code line should not be reached' % jid_s) - # for group in groups: - # try: - # self._group_panel.getGroupBox(group).setVisible(self.hasVisibleMembers(group) or self.emtyGroupsToShow()) - # except TypeError: - # log.warning('No box for group %s: this code line should not be reached' % group) - - # def refresh(self): - # """Show or hide disconnected contacts and empty groups""" - # self.updateVisibility(self._contacts_panel.contacts, self.groups.keys()) - class JIDList(list): """JID-friendly list implementation for Pyjamas""" diff -r c2f22ca12e23 -r b395d1309936 src/browser/sat_browser/json.py --- a/src/browser/sat_browser/json.py Mon Apr 20 08:51:25 2015 +0200 +++ b/src/browser/sat_browser/json.py Mon Apr 20 09:14:03 2015 +0200 @@ -126,13 +126,6 @@ except KeyError: pass else: - # if isinstance(_cb, tuple): - # #we have arguments attached to the callback - # #we send them after the answer - # callback, args = _cb - # callback(response, *args) - # else: - # #No additional argument, we call directly the callback _cb(response) del self.cb[request_info.id] @@ -188,6 +181,7 @@ "syntaxConvert", "getAccountDialogUI", "getMainResource", "getWaitingConf", "getEntitiesData", "getVersion", "getLiberviaVersion", "getDefaultMUC", ]) + def __call__(self, *args, **kwargs): return LiberviaJsonProxy.__call__(self, *args, **kwargs) diff -r c2f22ca12e23 -r b395d1309936 src/browser/sat_browser/libervia_widget.py --- a/src/browser/sat_browser/libervia_widget.py Mon Apr 20 08:51:25 2015 +0200 +++ b/src/browser/sat_browser/libervia_widget.py Mon Apr 20 09:14:03 2015 +0200 @@ -388,15 +388,6 @@ if self._selectable: self.addClickListener(self) - # FIXME - # def onClose(sender): - # """Check dynamically if the unibox is enable or not""" - # if self.host.uni_box: - # self.host.uni_box.onWidgetClosed(sender) - - # self.addCloseListener(onClose) - # self.host.registerWidget(self) # FIXME - @property def plugin_menu_context(self): return self._plugin_menu_context