This commit is contained in:
Marco Pesenti Gritti 2006-05-23 12:48:29 -04:00
parent 178468e2c0
commit dde63625a5
2 changed files with 35 additions and 23 deletions

View File

@ -19,6 +19,7 @@ from sugar.p2p import Buddy
from sugar.p2p.Group import LocalGroup
from sugar.p2p.Service import Service
from sugar.p2p.Stream import Stream
from sugar.p2p import network
from sugar.session.LogWriter import LogWriter
from sugar.chat.sketchpad.Toolbox import Toolbox
from sugar.chat.sketchpad.SketchPad import SketchPad
@ -281,15 +282,15 @@ class Chat(activity.Activity):
print "act %d: in activity_on_close_from_user" % self.activity_get_id()
self.activity_shutdown()
def _scroll_chat_view_to_bottom(self):
# Only scroll to bottom if the view is already close to the bottom
vadj = self._chat_sw.get_vadjustment()
if vadj.value + vadj.page_size > vadj.upper * 0.8:
vadj.value = vadj.upper - vadj.page_size
self._chat_sw.set_vadjustment(vadj)
def _scroll_chat_view_to_bottom(self):
# Only scroll to bottom if the view is already close to the bottom
vadj = self._chat_sw.get_vadjustment()
if vadj.value + vadj.page_size > vadj.upper * 0.8:
vadj.value = vadj.upper - vadj.page_size
self._chat_sw.set_vadjustment(vadj)
def _message_inserted(self):
gobject.idle_add(self._scroll_chat_view_to_bottom)
gobject.idle_add(self._scroll_chat_view_to_bottom)
self.activity_set_has_changes(True)
def _insert_buddy(self, buf, nick):
@ -400,6 +401,9 @@ class Chat(activity.Activity):
def recv_message(self, buddy, msg):
"""Insert a remote chat message into the chat buffer."""
if not buddy:
return
chunk = self._get_first_richtext_chunk(msg)
if chunk:
self._insert_rich_message(buddy.get_nick_name(), chunk)
@ -598,14 +602,16 @@ class GroupChat(Chat):
self._chats[buddy] = chat
chat.activity_connect_to_shell()
def _request_buddy_icon_cb(self, response, user_data):
def _request_buddy_icon_cb(self, result_status, response, user_data):
icon = response
buddy = user_data
if icon and len(icon):
icon = base64.b64decode(icon)
print "Buddy icon for '%s' is size %d" % (buddy.get_nick_name(), len(icon))
buddy.set_icon(icon)
else:
if result_status == network.RESULT_SUCCESS:
if icon and len(icon):
icon = base64.b64decode(icon)
print "Buddy icon for '%s' is size %d" % (buddy.get_nick_name(), len(icon))
buddy.set_icon(icon)
if result_status == network.RESULT_FAILED or not icon:
# What the heck, try again!
gobject.timeout_add(1000, self._request_buddy_icon, buddy)

View File

@ -10,6 +10,9 @@ import SimpleXMLRPCServer
import SocketServer
RESULT_FAILED = 0
RESULT_SUCCESS = 1
__authinfos = {}
def _add_authinfo(authinfo):
@ -176,7 +179,7 @@ class GlibXMLRPCTransport(xmlrpclib.Transport):
if request_cb:
if len(response) == 1:
response = response[0]
gobject.idle_add(request_cb, response, user_data)
gobject.idle_add(request_cb, RESULT_SUCCESS, response, user_data)
class _Method:
"""Right, so python people thought it would be funny to make this
@ -209,7 +212,7 @@ class GlibServerProxy(xmlrpclib.ServerProxy):
Here, 'xmlrpc_test_cb' is the callback function, which has the following
signature:
def xmlrpc_test_cb(response, user_data=None):
def xmlrpc_test_cb(result_status, response, user_data=None):
...
"""
def __init__(self, uri, encoding=None, verbose=0, allow_none=0):
@ -236,14 +239,17 @@ class GlibServerProxy(xmlrpclib.ServerProxy):
request = xmlrpclib.dumps(params, methodname, encoding=self._encoding,
allow_none=self._allow_none)
response = self._transport.start_request(
self._host,
self._handler,
request,
verbose=self._verbose,
request_cb=request_cb,
user_data=user_data
)
try:
response = self._transport.start_request(
self._host,
self._handler,
request,
verbose=self._verbose,
request_cb=request_cb,
user_data=user_data
)
except socket.error, exc:
gobject.idle_add(request_cb, RESULT_FAILED, None, user_data)
def __getattr__(self, name):
# magic method dispatcher