Connection Manager Developer's Reference - TelepathyIM/telepathy-qt GitHub Wiki

Project structure

Reference project layout:

cmake/modules/Find<Libname>.cmake
rpm/telepathy-<name>.spec
src/<name>.manager
src/CMakeLists.txt
src/connection.cpp
src/connection.hpp
src/dbus-service.in
src/main.cpp
src/protocol.cpp
src/protocol.hpp
CMakeLists.txt
README.md
COPYING

Code style

It is recommended to follow the KDE/Qt coding conventions.

Common patterns in the source code

Connection class

A typical Connection class definition starts like this:

class <Name>Connection : public Tp::BaseConnection
{
    Q_OBJECT
public:
    <Name>Connection(const QDBusConnection &dbusConnection,
            const QString &cmName, const QString &protocolName,
            const QVariantMap &parameters);
    ~<Name>Connection() override;
    
    static Tp::AvatarSpec getAvatarSpec();
    static Tp::SimpleStatusSpecMap getSimpleStatusSpecMap();
    static Tp::RequestableChannelClassSpecList getRequestableChannelList();
    
    void doConnect(Tp::DBusError *error);
    void doDisconnect();
    
    Tp::BaseChannelPtr createChannelCB(const QVariantMap &request, Tp::DBusError *error);

    QStringList inspectHandles(uint handleType, const Tp::UIntList &handles, Tp::DBusError *error);
    Tp::UIntList requestHandles(uint handleType, const QStringList &identifiers, Tp::DBusError *error);

Feature check list

Possible Connection Manager features (including trivial things):

  • Contact presence
  • Contact alias (first/last name)
  • Contact avatars
  • Contact info (names, phone)
  • Text messaging (1-1 chat)
  • Text messaging (group chat)
  • Chat state (typing status)
  • File Transfers
  • Registration (a user can create a new account via Telepathy)
  • An option to add a contact
  • An option to create a group chat
  • An option to set own avatar
  • An option to set own alias
  • An option to set own contact info
⚠️ **GitHub.com Fallback** ⚠️