Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2006-05-23 16:48:29 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2006-05-23 16:48:29 (GMT)
commitdde63625a5ab91a2ad27d189def6f4e071d01e2a (patch)
tree36125c9d2f347bd4b42463e0060661574b166abe /sugar
parent178468e2c059f5c5cca43b1359f5cfd347ed3c30 (diff)
Merge
Diffstat (limited to 'sugar')
-rwxr-xr-xsugar/chat/chat.py32
-rw-r--r--sugar/p2p/network.py26
2 files changed, 35 insertions, 23 deletions
diff --git a/sugar/chat/chat.py b/sugar/chat/chat.py
index c5c8708..8d3c3c3 100755
--- a/sugar/chat/chat.py
+++ b/sugar/chat/chat.py
@@ -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)
diff --git a/sugar/p2p/network.py b/sugar/p2p/network.py
index 684d114..b6241a9 100644
--- a/sugar/p2p/network.py
+++ b/sugar/p2p/network.py
@@ -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