src/sugar/activity/activity.py: If the activity is being invoked to
handle an invite, create a Client.Handler instance and share the
activity when HandleChannels is invoked.
src/sugar/activity/activityfactory.py,
src/sugar/activity/activityhandle.py,
src/sugar/activity/main.py: Add a -i switch that indicates to the
activity that it should handle the channel from an invitation.
src/sugar/presence/activity.py: Expose Activity.room_handle.
src/sugar/presence/presenceservice.py: Add get_activity_by_handle().
src/sugar/presence/util.py: Add get_account_for_connection().
* src/sugar/activity/activity.py: Get the shared activity wrapper from
sugar.presence.
* src/sugar/activity/activityfactory.py: Disable checking in the PS for
activity_id duplicates.
* src/sugar/presence/activity.py: Remove the PS dependency and query Telepathy
directly. Implemented enough to join an activity.
* src/sugar/presence/buddy.py: Remove the PS dependency and query Telepathy
directly. Implemented enough to join an activity. Added an Owner subclass of
Buddy()
* src/sugar/presence/presenceservice.py: Remove the PS dependency and query Telepathy
directly. Implemented enough to join an activity.
* src/sugar/presence/util.py: Add ConnectionManager for discovering and tracking
connections.
Some distros retain config files after removing packages, so /etc/olpc-security
might exist even if rainbow is not installed.
Signed-off-by: Sascha Silbe <sascha@silbe.org>
Future extensions:
a) we are now able to reliably detect when an activity's main process has
exited. We should take advantage of this to give better feedback on activity
crashes; e.g. by turning the frame's activity-icon into an error icon and by
inserting the activity's log into the datastore so that it appears in the
Journal.
b) in the future, I'd like rainbow to provide more narrow interfaces for
manipulating jails; e.g. for garbage-collecting them, nuking their contents, or
for reusing them. Please consider this an invitation to show me which interfaces
would work best for Sugar.
P.S. - Thanks to Sascha Silbe for testing and for improvements to this patch.
Threads and signals don't get along too well together. Instead, use
gobject's spawn_async functionality which already has the necessary zombie-
reaping integrated into the gobject event loop.