[Telepathy] tp-qt4 high level channel API sketch

Andre Moreira Magalhaes andre.magalhaes at collabora.co.uk
Fri Jan 30 06:37:47 PST 2009

So we are now in time to develop a high-level channel API for tp-qt4, 
this API is meant to be simple but extensible, allowing custom channel 
types to be constructed

So here is a sketch of this high-level API:

class Channel:
  string channelType();
  uint targetHandle();
  uint targetHandleType();

  // indicate whether this channel can be closed, contact list cannot be 
closed for example
  bool mayClose()
  bool isClosed()
  PendingOperation *requestClose()

  bool isReady()
  PendingReadyChannel *becomeReady()

  // interfaces(), optional interfaces, ...

  void closed();

class GroupChannel : Channel:
  Contact[] currentMembers()
  Contact[] localPendingMembers()
  Contact[] remotePendingMembers()

  bool mayAddOthers();
  // invite, accept
  PendingOperation *addContact(Contact, string);
  bool mayRemoveOthers();
  // kick, reject
  PendingOperation *removeContact(Contact, string);


  void membersChanged(Contact[] current, Contact[] local, Contact[] remote);

class TextChannel : GroupChannel
  UintList allowedMessageTypes();

  PendingOperation *acknowledgePendingMessages(UintList messagesIds)
  PendingMessages *pendingMessages();
  PendingMessageToken *sendMessage(uint type, string message)
  void messageReceived(...)
  void messageSent(...)
  void messageSendError(...)

class ContactListChannel : GroupChannel

class PendingChannel:
  string objectPath()

  Connection *connection()

  uint channelType()
  uint targetHandleType()
  uint targetHandle()

  // using this method will instantiate a specialized channel type based 
on well know channel types,
  // this method should not be used for custom type channels
  Channel *channel()


The basic idea is to have a basic Channel class that will implement 
high-level API for Channel interface,
a GroupChannel class that will implement the Group interface and 
specialized channels for Text, StreamedMedia, etc...

Requesting or receiving NewChannel signals should give the user a 
PendingChannel that can be used to create the channel.

Custom channels:
When Requesting or receiving a NewChannel signal a PendingChannel will 
be given, and this one can be used to create custom Channel types
by using its objectPath method.

Ideas, suggestions?


More information about the Telepathy mailing list