Interface Channel.Interface.Room.DRAFT

Interface Index (Compact) | Summary | Description | Properties

Properties

RoomName s Read only
Server s Read only
WARNING: This interface is experimental and is likely to cause havoc to your API/ABI if bindings are generated. Do not include this interface in libraries that care about compatibility.
Added in 0.19.UNRELEASED. (draft 1)

Description

Different IM protocols use a variety of ways to name chat rooms. The simplest example is perhaps IRC, where chat rooms have short, persistent, human-readable string names, and are generally global across the network. Skype chat rooms have persistent string names, so you can leave and re-join a room, but these names are opaque unique identifiers. MSN chat rooms are unnamed, and you can only join one by being invited. And XMPP wins the coveted “most complicated chat rooms” prize: chat rooms may be hosted by different servers with different DNS names; normally they have human-readable names, except that all MUCs on Google Talk's conference server have UUIDs as names, and XEP-0045 §10.1.4 Requesting a Unique Room Name defines a protocol for requesting a unique, opaque room name on the server.

This interface intends to support and differentiate these mechanisms more clearly than the TargetHandleType and TargetID properties can alone. It initially contains a pair of properties used to represent the human-readable parts of a Room_Handle's identifier, if any. The above examples for different protocols are represented as follows:

Requestable channel classes

If the connection supports joining text chat rooms by unique identifier, like Skype, it should advertise a Requestable_Channel_Class matching:

( Fixed = { ...ChannelType: ...Text,
            ...TargetHandleType: Room,
          },
  Allowed = [ ...TargetID,
              ...TargetHandle,
            ]
)

Channel requests should specify either TargetID or TargetHandle.

If, like IRC, the room identifiers are also human-readable, the RCC should also include RoomName in the allowed properties:

( Fixed = { ...ChannelType: ...Text,
            ...TargetHandleType: Room,
          },
  Allowed = [ ...TargetID,
              ...TargetHandle,
              ...RoomName,
            ]
)

Requests may specify the RoomName in place of TargetID or TargetHandle. If rooms may be on different servers, Server should also be included in the allowed properties, but CMs MUST use a reasonable default if Server is not explicitly specified in a channel request. FIXME: how do we specify the default room? A separate channel class with Server fixed?

If the protocol supports unnamed rooms, RoomName should be fixed to the empty string, and TargetHandleType should be None:

( Fixed = { ...ChannelType: ...Text,
            ...TargetHandleType: None,
            ...RoomName: "",
          },
  Allowed = [ ]
)

TODO: actually the classes for properties on this interface should not include THT: Room in Fixed, they should be separate. Document joining ad-hoc MUCs on different XMPP servers.

Properties

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

RoomName — s

Read only

The human-readable identifier of a chat room. FIXME: XMPP MUCs have a "name" concept which is more like a topic, except more persistent. This property is meant to be the bit before the @ in the jid.

This property cannot change during the lifetime of the channel. It should appear in the Allowed_Properties of a Requestable_Channel_Class for the connection if rooms on this connection have human-readable names, and can be joined by name.

(Permalink)

Server — s

Read only

For protocols with a concept of chatrooms on multiple servers with different DNS names (like XMPP), the DNS name of the server hosting this channel (for example, "conference.jabber.org" or "groupchat.google.com"). For other protocols, the empty string.

This property cannot change during the lifetime of the channel. It should appear in the Allowed_Properties of a Requestable_Channel_Class for the connection if and only if non-empty values are supported.