KTp/Components/Chat Window/Plugin API Draft

From KDE Community Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Project logo Welcome to the
KDE Telepathy Development Wiki
Current Version: 23.07.70

Open Hub project report for KDE Telepathy

Making an API to create plugins for the chat window. These should be able to handle the following usecases:

  • Translator plugin - when messages are sent or received, it will translate them before they are displayed (or actually sent)
  • Image Embed plugin - when a URL of an image is received, it will display the image under the text
  • Grammar correction - a plugin that replaces "wont" with "won't" on messages to be sent
  • Youtube embed - embeds a youtube video in a chat


The stakeholders (components) are as follows:

  • UI - telepathy-kde-text-ui and chat-widget etc.
  • Plugin Manager
  • Plugin
  • Core (Telepathy)

<I'll upload the diagram for how they interact later>

The interactions between the components:

  • Plugin Manager and Plugin
    • Process Message
    • Return Message
    • Initialize
    • Loading
    • Destroy
    • Send-Message //still not sure about this
  • Plugin Manager and Ui
    • Display Message
    • Display Final Message
    • Send New Message //to be processed BEFORE being sent
  • Plugin Manager and Core
    • New Message Received
    • Send New Message

It will consist of the following classes

  • Interface Class : ReceivingPlugin
    • virtual methods:
      • ProcessReceivedMessage(Message message);
    • methods:
      • PreProcessReceivedMessage(Message); maybe have method like this, which PluginManager will call, that will check that that message hasn't already been processed before calling ProcessReceivedMessage().
  • Interface Class : SendingPlugin
  • Plugin Manager - Every client that wants to use the plugin system will have a single, global, static instance of this.
    • signal: displayMessage(bool final);
    • slot: processAndSendNewMessage(QString message);
    • slot: processReceivedMessage(Tp::Message message);
    • QList<SendingPlugin>
    • QList<ReceivingPlugin>