Well, things are really cooking now. To review, my TODO for this week was to get as much of the tubing (ability to send arbitrary data between IM contacts) related stuff finished. I’ve decided to adapt an idea I call a “dispatcher.” I guess it is basically a wrapper around the Telepathy Requests interface. The mechanism lets me request “activities” (basically, a tube and Dbus connection wrapped into one object) and also lets me know when there are incoming ones. I have designed this dispatcher idea so it will easily extend to file transfers (and possibly stream tubes, if needed in the future) as well. So, the tube stuff is pretty much done.
**Other notable things that happened this week: **
- No updates to Telepathy bindings! That was nice, as last week the Tube interface was undrafted and I had to update the bindings and test that everything was still working. (Forgot to mention that in last week’s report).
- Workaround for MissionControl.AccountStatusChanged duplicate events. I’ve implemented a really dirty hack to suppress duplicate events. I don’t know why Telepathy does this, but it does. I have been unable to get an answer on IRC.
- Another annoyance I have is that attempting to register and use objects on a NDesk.DBus.Connection object within the same application process (ie. single instance of Banshee) blocks indefinitely when accessing a method on the exported dbus object. So, when I am testing tube stuff, I am now using my laptop and desktop computer for a producer and a consumer. Slows me down a bit, but it works. :)
- Now, the big one: I am able to send/receive a contact’s music library over a tube!! Yes, it is working. It’s very rough at the moment, however. Maybe I’ll put together a screencast for next week’s report. For now, some screenshots will have to do:
Contact A offers Contact B a tube
Contact B accepts tube
Contact A begins loading library data
Contact A has downloaded Contact B’s library data
**TODO for this week: **
- Improve the process that takes place when IM contacts exchange library data. Namely, test more cases, do not block the UI, get tracks displaying as they are downloading instead of when finished downloading, etc.
If you’ve missed previous posts, the code is hosted on Github. So, feel free to take a peek.