Summer of Code/2013/Social Sugar project/Documentation
Social Sugar
Social Sugar project involves development of GUI components that can help bring user's social interactions on external platforms into Sugar.
The first component we've are working on are the mini profiles.
Mini Profiles
Mini Profiles extend Web Service code adding minimal changes to the existing models to support social features such as fetching latest posts from multiple webservices and displaying it in Group View.
Detailed Description
For identification of a user on a webservice such as Project Sharing Website, or Fedora pastebin, a unique id will be used. The API of the webservice should allow posting/fetching resources related to the user via this UID (and if required authentication credentials such as API token).
Changes to Sugar:
BuddyModel
- Each Buddy used to have properties like nick, color and current activity
- We add another property `social_ids` to the BaseBuddyModel which are populated initially from all webservice accounts.
- social_ids is a dictionary of `service name`: `public id` pairs. E.g. {'gmoksaya': 'a454', 'gpaste': 'adsfq524325'}
- As are other properties like color, serialized social_ids are broadcasted to other online Sugar users via Telepathy.
WebServices Account Interface
- Two new methods: `get_public_id()` and `get_latest_post()` are added to Account class. (webservice.account.Account)
- `get_public_id` returns the public id associated with that account.
- It is used to populate social_ids property initially
- Public ids are used to fetch posts from the external webservice, e.g. latest project uploaded on Project Sharing Website. (This is implemented in the service specific extension.)
- `get_latest_post` returns the latest post on the service.
New Classes:
WebServicePost
- This is an abstract class for WebService posts returned by `get_latest_post`
- Has unimplemented methods for title, message, image and hyperlink.
Testing
You can test the current implementation by following these steps:
- Set up your Sugar development environment
- Clone the social-sugar branch from following repositories replacing the appropriate modules in your sugar-build code:
- Clone the contents of mock-service repository inside
~/.sugar/default
. You'll end up with the directory structure as shown below. - Build Sugar and add Akshit Khurana (or other people running the service) as a friend from the neighbourhood view(F1). You can use the search to find people.
- Checkout the Friend view(F2).
- Click on the small cloud icon over the buddy icon, to view my latest mock-post!
- You should see something like: "Designed from the ground up especially for children, Sugar offers an alternative to traditional "office-desktop" software. Id: 458" in a giant speech bubble like cloud.
- Congratulations! You've got mock service running on Mini Profiles.
Directory Structure
~/.sugar/default/extensions/webservice/ ├── __init__.py └── mock-service ├── __init__.py ├── account.py ├── mock-service │ ├── __init__.py │ └── mock-service.py └── icons └── mock-service.svg ~/.sugar/default/extensions/cpsection/ ├── __init__.py └── webaccount ├── __init__.py └── services ├── __init__.py └── mock-service ├── __init__.py └── service.py