3,571 bytes added
, 20:00, 21 December 2015
= Fixing Collaboration (Tubes) =
== Summary ==
Collaboration (hereon called collab) is build upon a framework called telepathy. Many years ago, the Telepathy Tubes (one type of channel) was deprecated. They have now been removed from telepathy (Fedora 22+) and therefore sugar collab does not work on newer systems.
This feature is to migrate to a new method, as well as moving the boilerplate code that activities use to do collab into an abstraction for easy porting.
== Background ==
Sugar uses telepathy to do collab. Lets look a how telepathy works from my understanding:
* Accounts (eg. jabber server, salut local network link)
* Connections - when you connect to a buddy over an account
* Channels - using a connection, you can make a channel to send data to a buddy
Let's look at some of the types of channels:
* Text - you can send text. Used for IM applications, but realistically can be used to transfer any text data. Chat activity uses this
* FileTransfer - a buddy can offer to send another buddy a file, which can be backed by anything (eg. can be send from memory to memory)
* DBusTube - a shared dbus thing
* StreamTube - shared socket thing
* Tubes - DEPRECATED. Many sugar activities use this. It is like a whole connection due to the fact that you can negotiate other tubes over your Tubes channel. For design reasons, it got replaces by DBusTUbe and StreamTube channels.
== Scope ==
# Sugar toolkit negotiates channels for the activity. It gives them a text and tubes channel. This is where the error happens, and must be changed to only give the activity a text channel. See https://github.com/sugarlabs/sugar-toolkit-gtk3/pull/270
# Activities that depend on tubes now don't work. Hypothetically, they could be ported to use DBusTube and StreamTube channels. However, that is very hard and generally a massive pain, given that most activities have about 150 lines of slightly varying boilerplate tube negotiation. This can be replaced with a high level abstraction, so that the activity only deals with what data to send, rather than how to send that data. See https://github.com/sugarlabs/sugar-toolkit-gtk3/pull/272
# However, some activities need to send large blobs to single buddies (eg. a new buddy joins read, needs a copy of the file). This is not suited to a json encoded message. However, we can use FileTransfer tubes (see the patch above). However, the shell currently claims all file transfers, so we need to have a special identifier for the shell to know to disregard these, see https://github.com/sugarlabs/sugar/pull/621
# All activities (other than Chat) need to be ported to the collab wrapper
# To maintain backwards compatability for activities, they can use a polyfill version of the CollabWrapper, see https://github.com/walterbender/physics/pull/10
= Benefit to Sugar =
For users, they get working collab on newer platforms.
For developers, they get a high level api that makes it easy to add collab to their activities. They no longer need to add 150 lines of confusing tube negotiation boilerplate or reinvent a message passing system.
= UI Design =
N/A
= How to test =
Run activities. Share them between computers with the patch, and old (fedora 18) XOs. See them working together.
This is TODO.
= Dependencies =
None
= Contingency Plan =
Collab will be broken again.
= Release Notes =
Sugar now sports a brand new collaboration engine that makes collaboration work in new and exciting places. Developers can now use the new CollabWrapper API to enable collaboration in their activities with ease.