Adds support for Telegram to Pidgin, Adium, Finch and other Libpurple based messengers.
Find a file
2014-09-01 22:23:59 +02:00
purple-plugin Clean up whitespaces and ugly code 2014-09-01 22:23:59 +02:00
.gitignore Ignore gdb files 2014-08-22 16:43:45 +02:00
.travis.yml Fixed travis.yml 2014-01-12 04:56:36 +04:00
binlog.c Remove remaining global variables 2014-09-01 21:43:22 +02:00
binlog.h Move binlog globals into a structure 2014-08-22 17:05:29 +02:00
binlog.tl Added files for binlog 2013-11-13 04:11:25 +04:00
configure Remove unused code and build files 2014-08-23 12:57:38 +02:00
configure.ac Remove unused code and build files 2014-08-23 12:57:38 +02:00
constants.h Merge github.com:vysheng/tg 2014-03-21 01:03:42 +04:00
gen_constants_h.awk Added full support for layer 10 2013-11-15 14:37:14 +04:00
include.h Added GPL-headers to source files 2013-10-23 18:26:17 +04:00
LICENSE Added GPL license text 2013-10-23 18:53:22 +04:00
LICENSE.h Added some fixes required by GPL 2013-10-25 13:28:29 +04:00
loop.c Clean up out-commented code 2014-09-01 21:59:23 +02:00
loop.h Add a few comments 2014-09-01 22:17:42 +02:00
Makefile.in User State/Typing implemented 2014-08-23 16:23:37 +02:00
msglog.c Refactor Intermediate State 1 2014-07-29 15:36:59 +02:00
msglog.h Refactor Intermediate State 1 2014-07-29 15:36:59 +02:00
mtproto-client.c Free memory and close connections on disconnect 2014-09-01 21:57:35 +02:00
mtproto-client.h Remove remaining global variables 2014-09-01 21:43:22 +02:00
mtproto-common.c Log all output of verbosity-level 1 to libpurple log 2014-08-22 17:39:05 +02:00
net.c Remove remaining global variables 2014-09-01 21:43:22 +02:00
net.h Free memory and close connections on disconnect 2014-09-01 21:57:35 +02:00
no-preview.h Forgot GPL header. 2013-11-05 03:55:41 +04:00
queries.c Free memory and close connections on disconnect 2014-09-01 21:57:35 +02:00
queries.h Remove remaining global variables 2014-09-01 21:43:22 +02:00
README.md Refactor Intermediate State 1 2014-07-29 15:36:59 +02:00
structures.c Remove remaining global variables 2014-09-01 21:43:22 +02:00
structures.h Free memory and close connections on disconnect 2014-09-01 21:57:35 +02:00
telegram.c Remove "_network" from telegram connect function 2014-09-01 22:14:40 +02:00
telegram.h Remove "_network" from telegram connect function 2014-09-01 22:14:40 +02:00
tg-server.pub Enhance naming to show that the pubkey is the server's. 2014-03-11 15:10:19 +01:00
tools.c Remove unused code and build files 2014-08-23 12:57:38 +02:00
tools.h Refactor - Intermediate Commit 3 2014-08-06 19:45:46 +02:00
tree.h Added partial lua support 2014-01-12 04:43:29 +04:00

telegram-purple

Installieren

  1. Sicherstellen dass Pidgin installiert ist.

  2. Dieses Git-Repository klonen.

     git clone https://bitbucket.org/telegrampurple/telegram-purple
    
  3. Im Ordner von telegram-purple make ausführen:

     cd telgram-purple
     ./configure --disable-liblua --disable-libconfig
     make install
    

Das Protokoll Telegram sollte dann beim nächsten Start in der Accountverwaltung von Pidgin automatisch auftauchen.

Testen und Debuggen

Um telegram-purple während der Entwicklung zu testen, ist es sinnvoll vorher die Berechtigungen des Plugin-Ordners zu ändern, damit beim Kopieren nicht jedes Mal Root-Rechte benötigt werden:

    sudo chmod 777 -R `pkg-config --variable=plugindir purple`
    sudo chmod 777 -R `pkg-config --variable=datarootdir purple`pixmaps/pidgin/protocol

Testen

Zum Compilen, Testen und Ausgeben aller Debugnachrichten folgenden Befehl ausführen:

    make run

Falls die Lognachrichten nach kurzer Zeit nicht mehr angezeigt werden, und die Meldung "Wird geschlossen, da bereits ein andere libpurple-Client läuft" erscheint, die laufende Instanz von Pidgin mit folgendem Befehl beenden:

    sudo killall pidgin

Filtern der Lognachrichten

Wenn Pidgin einfach mit make run ausgeführt wird, werden alle Debugnachrichten des gesamten Programms ausgegegeben. Libpurple verwendet interne Loggingfunktionen die den Lognachrichten automatisch einen Prefix hinzufügen, z.B. "plugins:" für Nachrichten des Pluginsloaders und "prpl-telegram:" für Nachrichten dieses Plugins.

Wenn man nur Ausgaben des Plugin-Loaders und von telegram-purple haben möchte kann man unnötige Nachrichten mit grep herausfiltern.

    make run | grep -i 'prpl-telegram:\|plugins:'

Deinstallieren

Mit folgendem Befehl werden alle installierten Dateien wieder aus den Plugin-Ordnern gelöscht:

    sudo make uninstall

Coding-Guidelines

Coding Style

Wir wollen wenn möglichen den typischen Linux-C-Coding-Style verwenden. Bei Funktionen werden die Klammern auf der nächsten Zeile geschrieben, bei allem anderen auf der gleichen Zeile. Bei Funktionsargumenten zwischen Komma und dem nächsten Argument und nach Bedingungen von if/else-Blöcken immer ein Leerzeichen lassen.

    unsigned int some_function(int a, int b)
    {
        if (true) {
            // ...
        } else {
            // ...
        }
    }

Logging

Wenn irgendeine Ausgabe gemacht wird, sollte das ausschließlich über die Libpurple Debugging-Funktionen passieren (Siehe die Anleitung zum Debuggen im Libpurple-Howto).

    #include "debug.h"
    #define PLUGIN_ID "prpl-telegram"

    // ...

     purple_debug_info(PLUGIN_ID, "Debugnachricht");

GIT

git pull -> Stand aktualisieren git add -A -> Files hinzufügen git push -> Stand hochladen git commit -> Commiten

Troubleshooting

Zum löschen der angelegten Accounts rm /home/USER/.purple/accounts.xml

Die lib muss eventuell nach /usr/lib/purple-2/telegram-purple.so kopiert werden

telegram-purple

Installieren

  1. Sicherstellen dass Pidgin installiert ist.

  2. Dieses Git-Repository klonen.

     git clone https://bitbucket.org/telegrampurple/telegram-purple
    
  3. Im Ordner von telegram-purple make ausführen:

     cd telgram-purple
     ./configure --disable-liblua --disable-libconfig
     make install
    

Das Protokoll Telegram sollte dann beim nächsten Start in der Accountverwaltung von Pidgin automatisch auftauchen.

Testen und Debuggen

Um telegram-purple während der Entwicklung zu testen, ist es sinnvoll vorher die Berechtigungen des Plugin-Ordners zu ändern, damit beim Kopieren nicht jedes Mal Root-Rechte benötigt werden:

    sudo chmod 777 -R `pkg-config --variable=plugindir purple`
    sudo chmod 777 -R `pkg-config --variable=datarootdir purple`pixmaps/pidgin/protocol

Testen

Zum Compilen, Testen und Ausgeben aller Debugnachrichten folgenden Befehl ausführen:

    make run

Falls die Lognachrichten nach kurzer Zeit nicht mehr angezeigt werden, und die Meldung "Wird geschlossen, da bereits ein andere libpurple-Client läuft" erscheint, die laufende Instanz von Pidgin mit folgendem Befehl beenden:

    sudo killall pidgin

Deinstallieren

Mit folgendem Befehl werden alle installierten Dateien wieder aus den Plugin-Ordnern gelöscht:

    sudo make uninstall

Coding-Guidelines

Speicherverwaltung

Glib verwendet eigene Datentypen und eigene Funktionen zu Speicherverwaltung. Wenn diese mit den regulären Funktionen von c vermischt werden, z.B. malloc und g_free auf dem selben Pointer, kann die Anwendung abstürzen.

char *str = malloc(10);
g_free(str); // APPLICATION ERROR 

Beim Purple-Plugin müssen wir die Typen und Verwaltungsfunktionen von glib verwenden, deshalb werden im Unterordner ./purple-plugin ausschließlich g_alloc g_new und g_free zum allozieren und löschen von Objekten verwendet. Siehe ([https://developer.gnome.org/glib/2.30/glib-Memory-Allocation.html])

In Telegram-Cli werden keine glib-Funktionen verwendet, deshalb müssen wie hier ausschließlich die regulären C-Funktionen malloc und free verwenden.

Aufrufe von Telegram-CLI

Wir rufen Telegram-CLI vom Purple-Plugin aus auf. Um die verschiedenen Sorten der Speicherverwaltung nicht zu vermischen, muss Telegram-CLI seinen gesamten Speicher selbst verwalten. Wenn strings oder Structs vom Plugin aus an die Bibliothek übergeben werden müssen die Objekte deshalb kopiert werden.

void *telegram_do_something(Telegram tg, const char* string)
{
    char *dup = malloc(strlen(login) * sizeof(char));
    dup = memcpy(dup, string);
    global->login = dup;
}

Jede Komponente der Anwendung muss deshalb den Speicher den sie alloziert auch selbst verwalten, da andere Komponenten diese niemals löschen werden. Wenn der String im Plugin mit einer allozierenden Funktion wie g_strdup erstellt wurde, muss diese deshalb auch wieder mit g_free gelöscht werden, da sonst ein Memory Leak entsteht.

gchar *str = g_strdup(string);
// ...
telegram_do_something(telegram, str);
// ...
g\_gree(str);

Coding Style

Wir wollen wenn möglichen den typischen Linux-C-Coding-Style verwenden. Bei Funktionen werden die Klammern auf der nächsten Zeile geschrieben, bei allem anderen auf der gleichen Zeile. Bei Funktionsargumenten zwischen Komma und dem nächsten Argument und nach Bedingungen von if/else-Blöcken immer ein Leerzeichen lassen.

    unsigned int some_function(int a, int b)
    {
        if (true) {
            // ...
        } else {
            // ...
        }
    }

Logging

Wenn irgendeine Ausgabe gemacht wird, sollte das ausschließlich über die Libpurple Debugging-Funktionen passieren (Siehe die Anleitung zum Debuggen im Libpurple-Howto).

    #include "debug.h"
    #define PLUGIN_ID "prpl-telegram"

    // ...

     purple_debug_info(PLUGIN_ID, "Debugnachricht");

GIT

git pull -> Stand aktualisieren git add -A -> Files hinzufügen git push -> Stand hochladen git commit -> Commiten

Troubleshooting

Zum löschen der angelegten Accounts rm /home/USER/.purple/accounts.xml

Die lib muss eventuell nach /usr/lib/purple-2/telegram-purple.so kopiert werden