I decided to try something different this Hackweek to learn a programming language and get involved into another exciting software libre project. There were too many options, too many good projects to work on. I selected gwibber because of three reasons:
- gwibber supports several microblogging services, including my favorites: Twitter and Facebook.
- gwibber is written in Python.
- gwibber doesn't integrate with other gnome applications, for example Cheese or Nautilus.
So... what's the new cool feature?
Something I like to call "Sharing Services". What's a sharing service? A sharing service is a service using an online provider to share data, easier impossible. For example: Images would be shared using Twitpic, Videos would use yfrog, Files would use Drop.io and Plaint Text files would use Pastebin (this is configurable, in case you were wondering) I'm sure you got the idea.
The implementation is based on the following UML class diagram:
The idea is simple, subclass Provider and override share method and you are pretty much all set. I already implemented 3 services: twitpic to share images, yfrog to share images and video, and pastebin.ca to share plain text files. My plans include to implement the following providers:
To allow communication between gnome/gtk/dbus-based applications I added a new dbus method: share(filename,message), that way you can "share" your file using a message, you don't need to explicitly tell the provider+service to use, gwibber will use the filename's mime-type to get the valid provider and the configured service, convenient isn't it?
Where to get it?
I branched trunk to implement this feature, you can read launchpad to get more information, basically you need to:
bzr branch lp:~mario-carrion/gwibber/gwibber-services
I also included a patch for cheese, I'm using gnome-2-26 branch, in case you want to share your videos and images on gwibber using cheese.
Known bugs and issues
I'm aware of several bugs, for example: web timeouts, invalid responses and random deadlocks, so take it easy, remember: this is a preview, be happy. Also I need to think about multiple instances and implementing a real HTTP handler instead of using the MultiPartForm class, will decide it later.
OpenSUSE 11.1 Users: you may need to install python-related dependencies. OpenSUSE 11.1-64, if you want to use the nautilus extension, you will need create a symbolic link in /usr/lib/ for libpython2.6.so. I'm going to report the packing bug as soon as possible.
BTW, you can always follow me on twitter: @mariocarrion in case you want to recommend me a new provider.