2006-10-13 18:05:48 +02:00
|
|
|
from sugar.p2p.Stream import Stream
|
2006-10-13 15:46:11 +02:00
|
|
|
from sugar.presence import PresenceService
|
|
|
|
|
2006-10-13 19:04:04 +02:00
|
|
|
class _Marshaller(object):
|
|
|
|
def marshal(self, title, address):
|
|
|
|
return title + '\n' + address
|
|
|
|
|
|
|
|
def demarshal(self, message):
|
|
|
|
return message.split('\n')
|
|
|
|
|
2006-10-13 15:46:11 +02:00
|
|
|
class LinksController(object):
|
|
|
|
def __init__(self, service, model):
|
|
|
|
self._model = model
|
|
|
|
|
|
|
|
self._pservice = PresenceService.get_instance()
|
2006-10-13 19:04:04 +02:00
|
|
|
self._marshaller = _Marshaller()
|
2006-10-13 15:46:11 +02:00
|
|
|
|
|
|
|
self._stream = Stream.new_from_service(service)
|
|
|
|
self._stream.set_data_listener(self._recv_message)
|
|
|
|
self._stream_writer = self._stream.new_writer()
|
|
|
|
|
|
|
|
def post_link(self, title, address):
|
2006-10-13 19:04:04 +02:00
|
|
|
message = self._marshaller.marshal(title, address)
|
|
|
|
self._stream_writer.write(message)
|
2006-10-13 15:46:11 +02:00
|
|
|
|
|
|
|
def _recv_message(self, address, msg):
|
|
|
|
buddy = self._pservice.get_buddy_by_address(address)
|
|
|
|
if buddy:
|
2006-10-13 19:04:04 +02:00
|
|
|
link = self._marshaller.demarshal(msg)
|
|
|
|
self._model.add_link(buddy, *link)
|