Conn.I.ContactGroups — Telepathy D-Bus Interface Specification

# Interface Connection.Interface.ContactGroups

Interface Index (Compact) | Summary | Description | Methods | Signals | Properties | Contact Attributes

### Methods

SetContactGroups | (u: Contact, as: Groups) | → | nothing |
SetGroupMembers | (s: Group, au: Members) | → | nothing |
AddToGroup | (s: Group, au: Members) | → | nothing |
RemoveFromGroup | (s: Group, au: Members) | → | nothing |
RemoveGroup | (s: Group) | → | nothing |
RenameGroup | (s: Old_Name, s: New_Name) | → | nothing |

### Signals

GroupsChanged | (au: Contact, as: Added, as: Removed) |
GroupsCreated | (as: Names) |
GroupRenamed | (s: Old_Name, s: New_Name) |
GroupsRemoved | (as: Names) |

### Properties

DisjointGroups | b | Read only |  |
GroupStorage | u (Contact_Metadata_Storage_Type) | Read only |  |
Groups | as | Read only |  |

### Contact Attributes

org.freedesktop.Telepathy.Connection.Interface.ContactGroups/groups | as

Added in 0.21.0. (as stable API)
Objects implementing this interface must also implement:

- org.freedesktop.Telepathy.Connection
- org.freedesktop.Telepathy.Connection.Interface.ContactList

### Description

An interface for connections in which contacts can be placed in user-defined groups.

The most basic functionality of this interface is to list and monitor a contact's set of groups. To do this, use the GroupsChanged signal, and the groups contact attribute (this should usually be done by connecting to the GroupsChanged signal, then calling GetContactListAttributes with this interface included in the Interfaces argument). Simple user interfaces can limit themselves to displaying that information, and ignore the rest of this interface: to ensure that this works, GroupsChanged is emitted for every change, even if that change could be inferred from another signal such as GroupsRemoved.

Looking at contacts' lists of groups is sufficient to present a user interface resembling XMPP's data model, in which groups behave like tags applied to contacts, and so an empty group cannot exist or is not interesting. However, some protocols model groups as objects in their own right. User interfaces may either track the set of groups via the Groups property and the GroupsCreated and GroupsRemoved signals, or ignore this extra information.

Similarly, in some protocols it is possible to rename a group as a single atomic operation. Simpler user interfaces will see the new name being created, the old name being removed, and the members moving to the new name, via the signals described above. More advanced user interfaces can optionally distinguish between an atomic rename and a create/remove pair, and display renamed groups differently, by monitoring the GroupRenamed signal.

This interface also provides various methods to manipulate user-defined groups, which can be expected to work if GroupStorage is not None.

Depending on the protocol, some methods might be implemented by more than one protocol operation; for instance, in a "contact-centric" protocol like XMPP, SetContactGroups is a single protocol operation and SetGroupMembers requires a protocol operation per contact, whereas in a more "group-centric" protocol it might be the other way around. User interfaces SHOULD call whichever method most closely resembles the way in which the user's action was represented in the UI, and let the connection manager deal with the details.

# Methods

(Permalink)

## SetContactGroups (u: Contact, as: Groups) → nothing

### Parameters

- Contact — u (Contact_Handle)
The contact to alter.
- Groups — as
The set of groups which the contact should be in.

Add the given contact to the given groups (creating new groups if necessary), and remove them from all other groups.

##### Rationale:

This is the easiest and most correct way to implement user interfaces that display a single contact with a list of groups, resulting in a user expectation that when they apply the changes, the contact's set of groups will become exactly what was displayed.

If the user is removed from a group of which they were the only member, the group MAY be removed automatically.

##### Rationale:

In protocols like XMPP where groups behave like tags, a group with no members has no protocol representation.

Any GroupsCreated, GroupsChanged and GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

### Possible Errors

- Disconnected
The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None.

##### Rationale:

The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.
- Invalid Handle
The handle specified is unknown on this channel or connection.
- Network Error
Raised when there is an error reading from or writing to the network.
- Not Available
Raised if DisjointGroups is true and the list of groups has more than one member.
- Not Implemented
Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
- Not Yet
Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

(Permalink)

## SetGroupMembers (s: Group, au: Members) → nothing

### Parameters

- Group — s
The group to alter.
- Members — au (Contact_Handle_List)
The set of members for the group. If this set is empty, this method MAY remove the group.

Add the given members to the given group (creating it if necessary), and remove all other members.

##### Rationale:

This is the easiest and most correct way to implement user interfaces that display a single group with a list of contacts, resulting in a user expectation that when they apply the changes, the groups's set of members will become exactly what was displayed.

If DisjointGroups is true, this will also remove each member from their previous group.

If the user is removed from a group of which they were the only member, the group MAY be removed automatically.

Any GroupsCreated, GroupsChanged and GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

### Possible Errors

- Disconnected
The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None.

##### Rationale:

The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.
- Invalid Handle
The handle specified is unknown on this channel or connection.
- Network Error
Raised when there is an error reading from or writing to the network.
- Not Implemented
Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
- Not Yet
Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

(Permalink)

## AddToGroup (s: Group, au: Members) → nothing

### Parameters

- Group — s
The group to alter.
- Members — au (Contact_Handle_List)
The set of members to include in the group.

Add the given members to the given group, creating it if necessary.

If DisjointGroups is true, this will also remove each member from their previous group.

##### Rationale:

This is good for user interfaces in which you can edit groups via drag-and-drop.

Any GroupsCreated, GroupsChanged and GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

### Possible Errors

- Disconnected
The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None.

##### Rationale:

The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.
- Invalid Handle
The handle specified is unknown on this channel or connection.
- Network Error
Raised when there is an error reading from or writing to the network.
- Not Implemented
Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
- Not Yet
Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

(Permalink)

## RemoveFromGroup (s: Group, au: Members) → nothing

### Parameters

- Group — s
The group to alter. If it does not exist, then it has no members by definition, so this method SHOULD return successfully.
- Members — au (Contact_Handle_List)
The set of members to remove from the group. It is not an error to remove members who are already not in the group. If there are no members left in the group afterwards, the group MAY itself be removed.

Remove the given members from the given group.

##### Rationale:

This is good for user interfaces in which you can edit groups via drag-and-drop.

Any GroupsChanged or GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

### Possible Errors

- Disconnected
The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None.

##### Rationale:

The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.
- Invalid Handle
The handle specified is unknown on this channel or connection.
- Network Error
Raised when there is an error reading from or writing to the network.
- Not Implemented
Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
- Not Yet
Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

(Permalink)

## RemoveGroup (s: Group) → nothing

### Parameters

- Group — s
The group to remove.

Remove all members from the given group, then remove the group itself. If the group already does not exist, this method SHOULD return successfully.

Any GroupsChanged or GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

### Possible Errors

- Disconnected
The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None.

##### Rationale:

The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.
- Network Error
Raised when there is an error reading from or writing to the network.
- Not Implemented
Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
- Not Yet
Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

(Permalink)

## RenameGroup (s: Old_Name, s: New_Name) → nothing

### Parameters

- Old_Name — s
The group to rename.
- New_Name — s
The new name for the group.

Rename the given group.

On protocols where groups behave like tags, this is an API short-cut for adding all of the group's members to a group with the new name, then removing the old group.

##### Rationale:

Otherwise, clients can't perform this operation atomically, even if the connection could.

Any GroupRenamed or GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

### Possible Errors

- Disconnected
The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None.

##### Rationale:

The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.
- Network Error
Raised when there is an error reading from or writing to the network.
- Not Implemented
Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.
- Does Not Exist
Raised if there is no group with that name.
- Not Available
Raised if there is already a group with the new name.
- Not Yet
Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

# Signals

(Permalink)

## GroupsChanged (au: Contact, as: Added, as: Removed)

### Parameters

- Contact — au (Contact_Handle)
The relevant contacts.
- Added — as
The names of groups to which the contacts were added.
- Removed — as
The names of groups from which the contacts were removed.

Emitted when contacts' groups change.
(Permalink)

## GroupsCreated (as: Names)

### Parameters

- Names — as
The names of the new groups.

Emitted when new, empty groups are created. This will often be followed by GroupsChanged signals that add some members.
(Permalink)

## GroupRenamed (s: Old_Name, s: New_Name)

### Parameters

- Old_Name — s
The old name of the group.
- New_Name — s
The new name of the group.

Emitted when a group is renamed, in protocols where this can be distinguished from group creation, removal and membership changes.

Immediately after this signal is emitted, GroupsCreated MUST signal the creation of a group with the new name, and GroupsRemoved MUST signal the removal of a group with the old name.

##### Rationale:

Emitting these extra signals, in this order, means that clients that are interested in the set of groups that exist (but treat a rename and a create/remove pair identically) can ignore the GroupRenamed signal entirely.

If the group was not empty, immediately after those signals are emitted, GroupsChanged MUST signal that the members of that group were removed from the old name and added to the new name.

On connection managers where groups behave like tags, renaming a group MAY be signalled as a set of GroupsCreated, GroupsRemoved and GroupsChanged signals, instead of emitting this signal.

##### Rationale:

On protocols like XMPP, another resource "renaming a group" is indistinguishable from changing contacts' groups individually.

(Permalink)

## GroupsRemoved (as: Names)

### Parameters

- Names — as
The names of the groups.

Emitted when one or more groups are removed. If they had members at the time that they were removed, then immediately after this signal is emitted, GroupsChanged MUST signal that their members were removed.

##### Rationale:

Emitting the signals in this order allows for two modes of operation. A client interested only in a contact's set of groups can ignore GroupsRemoved and rely on the GroupsChanged signal that will follow; a more elaborate client wishing to distinguish between all of a group's members being removed, and the group itself being removed, can additionally watch for GroupsRemoved and use it to disambiguate.

# Properties

Accessed using the org.freedesktop.DBus.Properties interface.
(Permalink)

## DisjointGroups — b

Read only

True if each contact can be in at most one group; false if each contact can be in many groups.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

(Permalink)

## GroupStorage — u (Contact_Metadata_Storage_Type)

Read only

Indicates the extent to which contacts' groups can be set and stored.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

(Permalink)

## Groups — as

Read only

The names of all groups that currently exist. This may be a larger set than the union of all contacts' `groups` contact attributes, if the connection allows groups to be empty.

Change notification is via GroupsCreated and GroupsRemoved; clients can also distinguish between a create/remove pair and a renamed group by receiving GroupRenamed.

This property's value is not meaningful until the ContactListState has become Success.

# Contact Attributes

Attributes that a contact can have, accessed with the org.freedesktop.Telepathy.Connection.Interface.Contacts interface.
(Permalink)

## org.freedesktop.Telepathy.Connection.Interface.ContactGroups/groups — as

The names of groups of which a contact is a member.

Change notification is via GroupsChanged; clients can also get extra context for group membership changes by receiving GroupRenamed and GroupsRemoved.