[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:
{
public:
  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, ...
  ...

signals:
  void closed();
}

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

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

  ...

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

class TextChannel : GroupChannel
{
public:
  UintList allowedMessageTypes();

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

class ContactListChannel : GroupChannel
{
}

class PendingChannel:
public:
  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?

BR
Andre


More information about the Telepathy mailing list