Table of Contents
1. Announcements
We're looking for people who would be interested in helping with a port to MacOS X. Specifically, working ports of D-BUS that people can just download and develop against. In time, Galago will have a more abstract communication method, so the native formats of IPC on Windows and MacOS X will be usable, but in the meantime, D-BUS will have to do.
Also, we're still looking for people to write Qt widgets for Galago, scripting language wrappers, documentation, and language translation. If you're interested, please contact me.
2. Status Redesign
Galago's status functionality was a bit too hard to use until this week. It used to be that a feed could stick any number of any kind of statuses into a presence. This made things overly complicated, as it couldn't easily go from being offline to online, or online to away, etc. The feeds, as a hack, were clearing the statuses before setting the new status. This of course was undesirable, as the change would propagate to all programs listening in on Galago's status updates.
The new design simplified the whole process without adding any real complexity to the API. There are now two types of statuses: Independent and Exclusive. Independent statuses act like the old statuses. If you set one, you had to explicitly remove it. However, exclusive statuses work a bit differently. Only one exclusive status may be set at a time. If the current exclusive status for a presence is "away," and the user goes offline, the feed simply needs to set a new exclusive status of "offline." The "away" status will be unset.
The API changes required were minimal. galago_status_new has a new boolean parameter, exclusive. Run-time warnings will be outputted if a feed attempts to remove an exclusive status. If you were to remove one, there wouldn't be any other status to revert back to. The proper way to change the exclusive status is just to set a new one. A couple of utility functions were added to work with statuses easier, but are not required.
The changes above have fixed the major headaches involved with statuses, and should ease the learning curve for working with Galago.
3. Evolution Integration
Integration with Evolution has progressed. Until this past week, the integration was very buggy. We had hacked in support for presence icons in the Contact Detail view, but they wouldn't update when a status or idle time was changed. Now, we directly include the GalagoGtkPresenceIcon widget from libgalago-gtk. This allows for instantaneous updates whenever any feed notifies galago-daemon of an idle or status change. The following is from an actual screenshot from Evolution:

The eds-feed module, which provides a GalagoPerson for every person in the address book, as well as a GalagoAccount for each account listed, has been updated with the latest libebook API in evolution-data-server CVS. For the moment, anybody wishing to test this will need a recent CVS snapshot of evolution-data-server. Backwards-compatibility with evolution-data-server 0.0.93 (the last version released as of this time) will be added shortly.
The next task will be to add more informative displays for the presence icons, such as a tooltip and possibly descriptive text next to the username (idle time, online/offline/away state). Then work on the e-mail portion of Evolution will begin, which is where the fun and impressive screenshots will come from.
4. Bug Fixes
A number of large, critical bugs have been fixed the past week. Unfortunately, there is one more critical bug that I had hoped to fix before this status report, but it should be taken care of shortly. The following are the major bugs fixed during the past week.
libgalago
- Fixed an infinite loop problem when destroying presences.
- Fixed idle time transmissions across D-BUS.
- Fixed a bug that caused a crash in galago-daemon. The connected/disconnected flag of an account was being sent before a presence was sent. This was causing libgalago to make a presence for the account, which didn't have a MetaPresence assigned. As every presence requires a MetaPresence in the daemon, problems resulted. Now we simply emit the SetConnected message after creating and sending the new presence.
galago-daemon
- When merging MetaPersons (which causes the source MetaPerson to be destroyed after the contents are copied to the destination), all associated accounts that were transferred over had an invalid parent pointer. This pointer is now updated, preventing a variety of problems and invalid memory access.
- Fixed status transmission and idle time updates.
- Freed memory leaks caused by not destroying MetaPresences when the MetaAccounts were destroyed.
- Statuses are no longer set for presences if another status instance with the same ID is already set.
- Prevented a possible race condition.
gaim-galago
- Fixed incorrect idle times.
- Idle times are now sent every time they're updated in Gaim.
- We now send statuses a bit more correctly.
- Prevent several run-time warnings involving duplicated statuses.
Posted by chipx86