Mercurial > libervia-backend
diff frontends/sortilege/sortilege @ 51:8c67ea98ab91
frontend improved to take into account new SàT features
- quick_frontend: better use of contact management, it now manages nicks, avatars, and connected status
- quick_frontend: disconnect and remove are now 2 separate methods for contact list
- wix: new contact list using HTML items, and showing avatars. Groups are not showed for now
- wix: contact status now use tuples, to keep order, human readable status and color of contact
- wix: contact list is updated when avatar or nick is found
- wix: fixed 'question' dialog, which is renamed in 'yes/no'
- wix: action result are now ignored for unkwnown id
- sortilege refactored to work again
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 07 Jan 2010 00:17:27 +1100 |
parents | c4badbf3dd97 |
children | 6455fb62ff83 |
line wrap: on
line diff
--- a/frontends/sortilege/sortilege Thu Jan 07 00:05:15 2010 +1100 +++ b/frontends/sortilege/sortilege Thu Jan 07 00:17:27 2010 +1100 @@ -43,6 +43,7 @@ from quick_frontend.quick_chat_list import QuickChatList from quick_frontend.quick_contact_list import QuickContactList from quick_frontend.quick_app import QuickApp +from quick_frontend.quick_contact_management import QuickContactManagement ### logging configuration FIXME: put this elsewhere ### logging.basicConfig(level=logging.CRITICAL, #TODO: configure it top put messages in a log file @@ -80,8 +81,10 @@ class ContactList(Window, QuickContactList): - def __init__(self): - QuickContactList.__init__(self) + def __init__(self, host, CM): + QuickContactList.__init__(self, CM) + self.host = host + self.jid_list = [] self.__index=0 #indicate which contact is selected (ie: where we are) Window.__init__(self, stdscr, stdscr.getmaxyx()[0]-2,const_CONTACT_WIDTH,0,0, True, "Contact List", code=code) @@ -98,14 +101,15 @@ def registerEnterCB(self, CB): self.__enterCB=CB - def replace(self, jid, name="", show="", status="", group=""): + def replace(self, jid): """add a contact to the list""" - self.jid_ids[jid] = name or jid + name = self.CM.getAttr(jid,'name') + self.jid_list.append(jid.short) self.update() def indexUp(self): """increment select contact index""" - if self.__index < len(self.jid_ids)-1: #we dont want to select a missing contact + if self.__index < len(self.jid_list)-1: #we dont want to select a missing contact self.__index = self.__index + 1 self.update() @@ -115,11 +119,15 @@ self.__index = self.__index - 1 self.update() + def disconnect(self, jid): + """for now, we just remove the contact""" + self.remove(jid) + def remove(self, jid): """remove a contact from the list""" - del self.jid_ids[jid] - if self.__index >= len(self.jid_ids) and self.__index > 0: #if select index is out of border, we put it on the last contact - self.__index = len(self.jid_ids)-1 + self.jid_list.remove(jid.short) + if self.__index >= len(self.jid_list) and self.__index > 0: #if select index is out of border, we put it on the last contact + self.__index = len(self.jid_list)-1 self.update() def update(self): @@ -127,13 +135,10 @@ if self.isHidden(): return Window.update(self) - viewList=[] - for jid in self.jid_ids: - viewList.append(self.jid_ids[jid]) - viewList.sort() + self.jid_list.sort() begin=0 if self.__index<self.rHeight else self.__index-self.rHeight+1 idx=0 - for item in viewList[begin:self.rHeight+begin]: + for item in self.jid_list[begin:self.rHeight+begin]: attr = curses.A_REVERSE if ( self.isActive() and (idx+begin) == self.__index ) else 0 centered = item.center(self.rWidth) ## it's nicer in the center :) self.addYXStr(idx, 0, centered, attr) @@ -147,10 +152,10 @@ elif k == curses.KEY_DOWN: self.indexUp() elif k == ascii.NL: - if not self.jid_ids: + if not self.jid_list: return try: - self.__enterCB(self.jid_ids.keys()[self.__index]) + self.__enterCB(self.jid_list[self.__index]) except NameError: pass # TODO: thrown an error here @@ -170,6 +175,7 @@ gobject.io_add_watch(0, gobject.IO_IN, self.loopCB) ## misc init stuff ## + self.CM = QuickContactManagement() self.listWins=[] self.chatParams={'timestamp':True, 'color':True, @@ -190,7 +196,7 @@ self.color(True) ## windows ## - self.contactList = ContactList() + self.contactList = ContactList(self, self.CM) self.editBar = EditBox(stdscr, "> ", self.code) self.editBar.activate(False) self.statusBar = StatusBar(stdscr, self.code) @@ -237,10 +243,10 @@ def showChat(self, chat): debug ("show chat") if self.currentChat: - debug ("hide de %s", self.currentChat) + debug ("hiding %s", self.currentChat) self.chat_wins[self.currentChat].hide() self.currentChat=chat - debug ("show de %s", self.currentChat) + debug ("showing %s", self.currentChat) self.chat_wins[self.currentChat].show() self.chat_wins[self.currentChat].update() @@ -268,8 +274,8 @@ pass - def presenceUpdate(self, jabber_id, type, show, status, priority): - QuickApp.presenceUpdate(self, jabber_id, type, show, status, priority) + def presenceUpdate(self, jabber_id, show, priority, statuses): + QuickApp.presenceUpdate(self, jabber_id, show, priority, statuses) self.editBar.replace_cur() curses.doupdate()