[Adium-devl] Metacontact Plans for Adium 1.1
timber at lava.net
Fri Sep 29 12:22:43 UTC 2006
On Sep 29, 2006, at 1:02 AM, Andrew Harvey wrote:
> On 29/09/2006, at 7:58 PM, Andreas Monitzer wrote:
>> Right now, the contact list is a mixture of metacontacts containing
>> AIListContacts and AIListContacts themselves. Our proposal was to get
>> rid of that mixture and have a strict hierarchy, where every level of
>> the contact list uses a specific class (or a subclass of it).
>> AIContactList -> AIListGroup -> AIContact -> AIAddress (where every -
>>> is 1-to-n)
> The question then arises (and I think this is a good juncture to
> consider it at), how do we deal with addresses (or screenames or
> whatever you want to call them, but for the sake of this email I'll
> call them addresses for simplicity) which are in multiple groups? How
> do we handle an AIContact which contains an AIAddress, say for the
> sake of argument an MSN contact who is both in my Friends group and
> my School group. But that AIContact also has an account on another
> protocol, say one which does not support contacts in multiple groups.
> How do we deal with that?
> That is all going to get very confusing, not only in terms of
> architecture, as well as in terms of UI. While the cascading one to
> many relationship is nice and simple, it's not going to have all the
> functionality that we want. We can't very well do away with server-
> side groups altogether, that's just not friendly, but we do need to
> work out a nice way to show this kind of thing.
> The best way, as I see it, is that the AIContact has no group on its
> own, but picks up the relevant groups from its contents (the
> AIAddresses). From there we stray in to the world of UI, which is
> going to be interesting in terms of what is going to work best for
> the users (though I have some ideas on that for another time).
> I get the feeling that this may have already been apparent, but I
> suppose I'm just thinking aloud and checking my logic with you guys.
Ideally, contacts and addresses wouldn't know about the concept of
groups. Ideally, when you want to know what groups a contact is in,
you ask each group "is this contact (or address) in you?" For speed
you may cache this information in a table (of Contact => Set<Group> or
Address => Set<Group>), but it's a non-normative table and needs to be
updated when groups contents change.
That's my answer, anyway.
More information about the Adium-devl