[Telepathy] Account and AccountManager objects
Simon McVittie
simon.mcvittie at collabora.co.uk
Fri Jan 25 06:43:19 PST 2008
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Here are some more attempts to nail down concepts before we get into API
design.
Preset
======
Presets consist of:
* the connection manager to use
* the protocol
* an internal preset name, not for UI (either globally unique or unique
per (CM, protocol) pair), e.g. gtalk
* parameter defaults (overriding those given by the CM, and overridden
by those given by the account)
Also worth considering:
* capability info
- e.g. we know ahead of time that all GTalk accounts have the same server
features - we can use this to pre-seed the Account's capabilities
- CM protocol implementations have this too, though
* the displayed name of the preset (localizable somehow)
- can probably also be used as (part of?) the default displayed name
for new accounts
* some specified way to select a default icon from a theme:
e.g. for the gtalk preset (which uses gabble) for the jabber protocol, use
telepathy-jabber-gabble-gtalk falling back to telepathy-jabber-gabble
and telepathy-jabber?
(Should the CM be part of the calculation or not? If so, it should be
less "important" than the protocol - users care about XMPP vs MSN
rather than Gabble vs Haze)
Presets should perhaps be exposed as read-only D-Bus objects by MC.
Nokia MC on the Internet Tablets has some extra info, but some of that should
be provided "out of band" by the UIs (e.g. accounts-plugin-gabble
knows how to handle gtalk specially, but that's between it and the
accounts UI).
Account
=======
Stored attributes of an account
- -------------------------------
An Account is uniquely identified in the API by an object path.
s: Displayed name
User-selected. Account creation UI is responsible for picking a default
value appropriate for the user's locale - something like
g_strdup_printf (_("Google Talk (%s)"), my_jid) would be reasonable
u (Connection_Presence_Type): Desired status
The status MC is or should be trying to achieve *when this account
is able to connect*.
May be set to Offline by the user, to disable accounts.
If you call methods to set this, MC acts on it, but only if the account is
able to connect.
(Rationale: if we define this to be "when able to connect", we don't
have to change it in response to network connectivity - MC can use some
other mechanism to know which accounts can connect when - and we can
remember presence across connectivity changes)
(TODO: Possibly we should store desired presence (the finer-grained
string one) and status message, per account, too? They probably don't
make sense globally, but they do make sense per account)
(TODO: The Nokia UI also has a concept of "whatever you need to do to
make this account go online, try to make it happen". The API will need
some sort of support for that - but that should be global or
group-based convenience API, probably)
s (/connection manager name/ as defined by Tp spec text): CM
s (Protocol): Protocol
s? nullable o?: Preset
Must be nullable somehow, for what used to be called "vanilla profiles"
a{sv}: CM parameter overrides
(ays): Avatar
To be uploaded to services that don't have server-stored avatars
- how can we tell? For the moment we have to assume they don't
s: Nickname
To be set as an alias once per connect on services that don't have
server-stored aliases
- same comments as Avatar
- terminology change in preparation for splitting the "petname set by me"
and "nickname set by them" functionality of Aliasing into separate
PetNames and Nicknames interfaces, which is a change we should make in
the Telepathy spec - see http://www.xmpp.org/extensions/xep-0165.html
§2.2 'The Roster as a Petname System'
Also worth considering:
* server capabilities (save capabilities so we know which accounts are
capable of doing what, even while offline, so UIs can present appropriate
info)
Transient attributes of an account
- ----------------------------------
Only valid during one MC run; never stored; set by MC in response to the
environment, rather than being user-settable.
b: Able to connect
Determined dynamically by requirements of the CM/protocol (some
possibilities: whether we have network connectivity, whether we're
logged-in to any VPNs, whether avahi-daemon is running...) and whether
they're met.
Also, always FALSE if the stored params are no longer enough
to make the CM happy, or if we have some stored params that the CM
no longer supports (CM-specific UI code can either perform a migration
automatically, or require user input; the best a UI can do in the
absence of CM-specific knowledge is to notify the user and disable the
account until they've fixed it)
nullable o: Connection (either it has one or it doesn't)
u (Connection_Status): Connection status
Might not actually need this, it can probably be implicit from whether
there's a connection, what the presence type is, and whether MC ought
to be trying to connect?
u (Connection_Presence_Type): Connection presence
Always Connection_Presence_Type_Offline unless connected.
Account Group
=============
There seem to be two sorts of "group" floating around:
* user-assigned groups (personal and work accounts)
* automatic capability-based grouping (accounts that need a network connection,
accounts that can run all the time like Salut, accounts that should only try
to connect when explicitly requested like gnome-phone-manager)
I think the term "account group" should only apply to the user-assigned
groups. Magical groups that the user can't assign should be something
separate; above, I suggest a way to deal with these.
UIs and business rules will tend to be impossibly complex if this isn't
exclusive, so perhaps we can declare that each account is in exactly one
group, defaulting to the special default group "" (which UIs can render as
_("(no group set)") or something).
This can just be a shortcut for setting the "desired status" attribute
on all Accounts in the group, probably? In that way, it's just a special
case of setting status on individual accounts.
-----BEGIN PGP SIGNATURE-----
iD8DBQFHmfWHWSc8zVUw7HYRAvLHAKDGektbrO47fJQWLzQw8ooqo2+JUwCg1yen
w1XVU9NJ6zhlvS20Yim0WWU=
=E9mv
-----END PGP SIGNATURE-----
More information about the Telepathy
mailing list