Fix some spacing issues; catch exceptions in XMLRPC client code and return result status (success or failure) to XMLRPC client callback

This commit is contained in:
Dan Williams 2006-05-23 12:42:26 -04:00
parent 89f9730641
commit a7a0c2cda5
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
@ -280,15 +281,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):
@ -399,6 +400,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)
@ -597,14 +601,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