message sending bug fixes + sortilege update

- sortilege now use default profile. /!\ sortilege is really buggy currently, need some attention
This commit is contained in:
Goffi 2010-02-04 01:06:36 +11:00
commit 9fd444d937
8 changed files with 31 additions and 27 deletions

View file

@ -30,18 +30,18 @@ class QuickChat():
self.to_jid = to_jid
self.host = host
def historyPrint(self, size=20, keep_last=False):
def historyPrint(self, size=20, keep_last=False, profile='@NONE@'):
"""Print the initial history"""
debug ("now we print history")
history=self.host.bridge.getHistory(self.host.whoami.short, self.to_jid, 20)
history=self.host.bridge.getHistory(self.host.profiles[profile]['whoami'].short, self.to_jid, 20)
stamps=history.keys()
stamps.sort()
for stamp in stamps:
self.printMessage(JID(history[stamp][0]), history[stamp][1], stamp)
self.printMessage(JID(history[stamp][0]), history[stamp][1], profile, stamp)
if keep_last: ##FIXME hack for sortilege
self.last_history = stamps[-1] if stamps else None
def printMessage(self, from_jid, msg, timestamp):
def printMessage(self, from_jid, msg, profile, timestamp):
"""Print message in chat window. Must be implemented by child class"""
raise NotImplementedError

View file

@ -67,8 +67,8 @@ class DBusBridgeFrontend(BridgeFrontend):
def getWaitingSub(self, profile_key='@DEFAULT@'):
return self.db_comm_iface.getWaitingSub(profile_key)
def sendMessage(self, to, message, profile_key='@DEFAULT@'):
return self.db_comm_iface.sendMessage(to, message, profile_key)
def sendMessage(self, to, message, type='chat', profile_key='@DEFAULT@'):
return self.db_comm_iface.sendMessage(to, message, type, profile_key)
def setPresence(self, to="", show="", priority=0, statuses={}, profile_key='@DEFAULT@'):
return self.db_comm_iface.setPresence(to, show, priority, statuses, profile_key)

View file

@ -48,7 +48,7 @@ class Chat(Window, QuickChat):
Window.__init__(self, self.__parent, self.__parent.getmaxyx()[0]-2, self.__parent.getmaxyx()[1]-30, 0,30, code=host.code)
#history
self.historyPrint(50, True)
self.historyPrint(50, True, profile=self.host.profile)
self.hide()
@ -68,7 +68,7 @@ class Chat(Window, QuickChat):
if self.host.chatParams["timestamp"]:
header = header + '[%s] ' % strftime("%H:%M", localtime(float(line[0])))
if self.host.chatParams['short_nick']:
header = header + ('> ' if line[1]==self.host.whoami.short else '** ')
header = header + ('> ' if line[1]==self.host.profiles[self.host.profile]['whoami'] else '** ')
else:
header = header + '<%s> ' % line[1]
return header
@ -85,7 +85,7 @@ class Chat(Window, QuickChat):
header=self.__getHeader(self.content[idx])
msg=self.content[idx][2]
part=0 #part of the text
if JID(self.content[idx][1]).short==self.host.whoami.short:
if JID(self.content[idx][1]).short==self.host.profiles[self.host.profile]['whoami'].short:
att_header=curses.color_pair(1)
else:
att_header=curses.color_pair(2)
@ -137,7 +137,7 @@ class Chat(Window, QuickChat):
self.__scollIdx = self.__scollIdx - 1
self.update()
def printMessage(self, jid, msg, timestamp=""):
def printMessage(self, jid, msg, profile, timestamp=""):
if timestamp=="":
current_time=time()
timestamp=str(current_time)

View file

@ -222,6 +222,7 @@ class SortilegeApp(QuickApp):
self.chat_wins=ChatList(self)
QuickApp.__init__(self) #XXX: yes it's an unusual place for the constructor of a parent class, but the init order is important
self.plug_profile()
signal (SIGWINCH, self.onResize) #we manage SIGWINCH ourselves, because the loop is not called otherwise
@ -271,8 +272,8 @@ class SortilegeApp(QuickApp):
def onTextEntered(self, text):
jid=JID(self.whoami)
self.bridge.sendMessage(self.currentChat, text)
jid=JID(self.profiles[self.profile]['whoami'])
self.bridge.sendMessage(self.currentChat, text, profile_key=self.profile)
def showDialog(self, message, title, type="info"):
if type==question:
@ -280,8 +281,8 @@ class SortilegeApp(QuickApp):
pass
def presenceUpdate(self, jabber_id, show, priority, statuses):
QuickApp.presenceUpdate(self, jabber_id, show, priority, statuses)
def presenceUpdate(self, jabber_id, show, priority, statuses, profile):
QuickApp.presenceUpdate(self, jabber_id, show, priority, statuses, profile)
self.editBar.replace_cur()
curses.doupdate()
@ -293,8 +294,8 @@ class SortilegeApp(QuickApp):
#FIXME
info ("FIXME: actionResult not implemented")
def newMessage(self, from_jid, msg, type, to_jid):
QuickApp.newMessage(self, from_jid, msg, type, to_jid)
def newMessage(self, from_jid, msg, type, to_jid, profile):
QuickApp.newMessage(self, from_jid, msg, type, to_jid, profile)
sender=JID(from_jid)
addr=JID(to_jid)
win = addr if sender.short == self.whoami.short else sender #FIXME: duplicate code with QuickApp

View file

@ -56,7 +56,7 @@ class Chat(wx.Frame, QuickChat):
self.font["points"] = self.chatWindow.GetFont().GetPointSize()
self.font["family"] = self.chatWindow.GetFont().GetFamily()
self.historyPrint()
self.historyPrint(profile=self.host.profile)
#misc
self.textBox.SetFocus()
@ -87,7 +87,7 @@ class Chat(wx.Frame, QuickChat):
def onEnterPressed(self, event):
"""Behaviour when enter pressed in send line."""
self.host.bridge.sendMessage(self.to_jid, event.GetString())
self.host.bridge.sendMessage(self.to_jid, event.GetString(), profile_key=self.host.profile)
self.textBox.Clear()

View file

@ -290,8 +290,8 @@ class MainWindow(wx.Frame, QuickApp):
wx.EVT_MENU(self, idFIND_GATEWAYS, self.onFindGateways)
def newMessage(self, from_jid, msg, type, to_jid):
QuickApp.newMessage(self, from_jid, msg, type, to_jid)
def newMessage(self, from_jid, msg, type, to_jid, profile):
QuickApp.newMessage(self, from_jid, msg, type, to_jid, profile)
def showAlert(self, message):
# TODO: place this in a separate class

View file

@ -125,7 +125,8 @@ class SatMessageProtocol(xmppim.MessageProtocol):
debug (u"got_message from: %s", message["from"])
for e in message.elements():
if e.name == "body":
self.host.bridge.newMessage(message["from"], e.children[0], self.parent.profile)
type = message['type'] if message.hasAttribute('type') else 'chat' #FIXME: check specs
self.host.bridge.newMessage(message["from"], e.children[0], type, profile=self.parent.profile)
self.host.memory.addToHistory(self.parent.jid, jid.JID(message["from"]), self.parent.jid, "chat", e.children[0])
break
@ -573,6 +574,7 @@ class SAT(service.Service):
## jabber methods ##
def sendMessage(self,to,msg,type='chat', profile_key='@DEFAULT@'):
print "sendtype=", type #gof
#FIXME: check validity of recipient
profile = self.memory.getProfileName(profile_key)
assert(profile)
@ -585,7 +587,7 @@ class SAT(service.Service):
message.addElement("body", "jabber:client", msg)
self.profiles[profile].xmlstream.send(message)
self.memory.addToHistory(current_jid, current_jid, jid.JID(to), message["type"], unicode(msg))
self.bridge.newMessage(message['from'], unicode(msg), to=message['to'], profile=profile) #We send back the message, so all clients are aware of it
self.bridge.newMessage(message['from'], unicode(msg), to=message['to'], type=type, profile=profile) #We send back the message, so all clients are aware of it
def setPresence(self, to="", show="", priority = 0, statuses={}, profile_key='@DEFAULT@'):

View file

@ -60,7 +60,7 @@ class DbusObject(dbus.service.Object):
@dbus.service.signal(const_INT_PREFIX+const_COMM_SUFFIX,
signature='sssss')
def newMessage(self, from_jid, msg, type='chat', to='', profile='@NONE@'):
def newMessage(self, from_jid, msg, type, to, profile):
debug("new message signal (from:%s msg:%s type:%s to:%s) sended", from_jid, msg, type, to)
@dbus.service.signal(const_INT_PREFIX+const_COMM_SUFFIX,
@ -165,10 +165,11 @@ class DbusObject(dbus.service.Object):
return self.cb["getWaitingSub"](profile_key)
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='sss', out_signature='')
def sendMessage(self, to, message, profile_key='@DEFAULT@'):
in_signature='ssss', out_signature='')
def sendMessage(self, to, message, type='chat', profile_key='@DEFAULT@'):
debug("sendMessage...")
self.cb["sendMessage"](to, message, profile_key)
print "sendtype=", type #gof
self.cb["sendMessage"](to, message, type, profile_key)
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='ssia{ss}s', out_signature='')
@ -293,7 +294,7 @@ class DBusBridge(Bridge):
def newContact(self, contact, attributes, groups, profile):
self.dbus_bridge.newContact(contact, attributes, groups, profile)
def newMessage(self,from_jid, msg, type, to, profile):
def newMessage(self, from_jid, msg, type='chat', to='', profile='@NONE@'):
debug("sending message...")
self.dbus_bridge.newMessage(from_jid, msg, type, to, profile)