01.10.2013, 09:02
Hallo,
Vielen Dank für deine Hilfe!
Hier mal der aktuelle Code:
[c]
#ifndef PURPLE_PLUGINS
#define PURPLE_PLUGINS
#endif
#include "internal.h"
#include "tapi.h"
#include "gtkplugin.h"
#include <plugin.h>
#include <version.h>
#include <gtkdebug.h>
#include <gtkutils.h>
#include <request.h>
//Für Debug-Ausgaben. Kann entfernt werden später.
#include <debug.h>
#ifndef _WIN32
static GdkAtom _Cardinal = GDK_NONE;
static GdkAtom _PurpleUnseenCount = GDK_NONE;
#endif
//static guint scan_buddies_timeout_handle;
//static void *(*notify_userinfo_ori)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);
//static PurpleBuddy *current_scanned_buddy;
static void *(*notify_userinfo_ori)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);
//static void *(*birthday_reminder_notify_userinfo)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);
/**
* Diese Methode testet den <b>Anruf</b>.
* Es wird eine Debug-Ausgabe getätigt.
*/
static void test() {
/*
* Die folgende Zeile setzt den Anruf ab. Die anzurufende Telefon-Nummer muss nur noch
* dynamisch ermittelt werden, je nach ausgewähltem User.(TODO
*
*/
// tapiRequestMakeCall("01769974796*", NULL, NULL, NULL);
//Diese Zeile blendet die Buddy-List aus.
purple_blist_set_visible(false);
purple_debug_info("plugin-call-a-buddy", "User wird angerufen.\n");
}
static void *call_a_buddy_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) {
purple_debug_warning("plugin-call-a-buddy", "In der Funktion ..._notify_userinfo");
/* Info-Fenster unterdrücken */
return NULL;
}
/**
* Hier werden die User-Informationen extrahiert und mit der dadurch gewonnenen
* Telefon-Nummer ein Anruf durchgeführt.
*/
static void call_user(PurpleBlistNode *node) {
PurpleAccount *acc = NULL;
PurpleConnection *gc = NULL;
PurplePlugin *prpl = NULL;
PurplePluginProtocolInfo *prpl_info = NULL;
PurpleNotifyUiOps *ops;
purple_debug_warning("plugin-call-a-buddy", "Variablen wurden initialisiert.\n");
const char *name = NULL;
PurpleBuddy *buddy = (PurpleBuddy*) node;
acc = purple_buddy_get_account(buddy);
purple_debug_warning("plugin-call-a-buddy", "Node Konvertiert und Acc geholt.\n");
gc = acc->gc;
purple_debug_warning("plugin-call-a-buddy", "GC wird geholt.\n");
if(!gc) {
return;
}
prpl = purple_connection_get_prpl(gc);
purple_debug_warning("plugin-call-a-buddy", "Hole Protocol.\n");
if(!prpl) {
return;
}
prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
purple_debug_warning("plugin-call-a-buddy", "Plugin_Protocol_INFO wird geholt. \n");
if(!prpl_info || !prpl_info->get_info) {
return;
}
prpl_info->get_info(gc, name);
purple_debug_warning("plugin-call-a-buddy", "Entsprechende Infos werden ermittelt \n");
ops = purple_notify_get_ui_ops();
purple_debug_warning("plugin-call-a-buddy", "Notify_Get_UI_Ops \n");
notify_userinfo_ori = ops->notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", (char*)*notify_userinfo_ori);
//Erstellt Funktionszeiger.
ops->notify_userinfo = call_a_buddy_notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", "Birthday_Reminder_Notify_Userinfo \n");
if(!PURPLE_BLIST_NODE_IS_BUDDY(node)) {
purple_debug_fatal("plugin-call-a-buddy", "Es wird versucht einen Nicht-User anzurufen.\n");
return;
}
test();
}
static void extend_buddy_context_menu(PurpleBlistNode *node, GList **menu) {
PurpleMenuAction *action = NULL;
GList *submenu = NULL;
action = purple_menu_action_new(_("User anrufen."), PURPLE_CALLBACK(call_user), NULL, NULL);
*menu = g_list_append(*menu, action);
}
static gboolean plugin_load(PurplePlugin *plugin) {
purple_signal_connect(purple_blist_get_handle(), "blist-node-extended-menu", plugin, PURPLE_CALLBACK(extend_buddy_context_menu), NULL);
purple_debug_warning("plugin-call-a-buddy", "Plugin_Load\n");
return TRUE;
}
static PurplePluginInfo info = {
PURPLE_PLUGIN_MAGIC, /**<- Magic */
PURPLE_MAJOR_VERSION, /**<- Major Version */
PURPLE_MINOR_VERSION, /**<- Minor Version */
PURPLE_PLUGIN_STANDARD, /**<- Type */
PIDGIN_PLUGIN_TYPE, /**<- UI_Requirements */
0, /**<- Flags */
NULL, /**<- Dependencies */
PURPLE_PRIORITY_DEFAULT, /**<- Priority */
"plugin-call-a-buddy", /**<- ID */
"Call a Buddy", /**<- Name */
"0.1", /**<- Version */
"Call a Buddy via Context-Menu", /**<- Summary */
"Call a Buddy via Context-Menu", /**<- Description */
"James Vornhagen <james.vornhagen@staufenbiel.de", /**<- Author */
"", /**<- Homepage */
plugin_load, /**<- load */
NULL, /**<- unload */
NULL, /**<- destroy */
NULL, /**<- ui_info */
NULL, /**<- extra_info */
NULL, /**<- prefs_info */
NULL, /**<- actions */
NULL, /**<- Reserved for next Versions */
NULL, /**<- Reserved for next Versions */
NULL, /**<- Reserved for next Versions */
NULL /**<- Reserved for next Versions */
};
static void init_plugin(PurplePlugin *plugin) {
purple_debug_warning("plugin-call-a-buddy", "Plugin initialisiert.");
}
PURPLE_INIT_PLUGIN(call_a_buddy, init_plugin, info);
[/c]
Wenn du möchtest, kann ich ihn dir auch als Anhang senden
Vielen Dank für deine Hilfe!

Hier mal der aktuelle Code:
[c]
#ifndef PURPLE_PLUGINS
#define PURPLE_PLUGINS
#endif
#include "internal.h"
#include "tapi.h"
#include "gtkplugin.h"
#include <plugin.h>
#include <version.h>
#include <gtkdebug.h>
#include <gtkutils.h>
#include <request.h>
//Für Debug-Ausgaben. Kann entfernt werden später.
#include <debug.h>
#ifndef _WIN32
static GdkAtom _Cardinal = GDK_NONE;
static GdkAtom _PurpleUnseenCount = GDK_NONE;
#endif
//static guint scan_buddies_timeout_handle;
//static void *(*notify_userinfo_ori)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);
//static PurpleBuddy *current_scanned_buddy;
static void *(*notify_userinfo_ori)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);
//static void *(*birthday_reminder_notify_userinfo)(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info);
/**
* Diese Methode testet den <b>Anruf</b>.
* Es wird eine Debug-Ausgabe getätigt.
*/
static void test() {
/*
* Die folgende Zeile setzt den Anruf ab. Die anzurufende Telefon-Nummer muss nur noch
* dynamisch ermittelt werden, je nach ausgewähltem User.(TODO

*
*/
// tapiRequestMakeCall("01769974796*", NULL, NULL, NULL);
//Diese Zeile blendet die Buddy-List aus.
purple_blist_set_visible(false);
purple_debug_info("plugin-call-a-buddy", "User wird angerufen.\n");
}
static void *call_a_buddy_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) {
purple_debug_warning("plugin-call-a-buddy", "In der Funktion ..._notify_userinfo");
/* Info-Fenster unterdrücken */
return NULL;
}
/**
* Hier werden die User-Informationen extrahiert und mit der dadurch gewonnenen
* Telefon-Nummer ein Anruf durchgeführt.
*/
static void call_user(PurpleBlistNode *node) {
PurpleAccount *acc = NULL;
PurpleConnection *gc = NULL;
PurplePlugin *prpl = NULL;
PurplePluginProtocolInfo *prpl_info = NULL;
PurpleNotifyUiOps *ops;
purple_debug_warning("plugin-call-a-buddy", "Variablen wurden initialisiert.\n");
const char *name = NULL;
PurpleBuddy *buddy = (PurpleBuddy*) node;
acc = purple_buddy_get_account(buddy);
purple_debug_warning("plugin-call-a-buddy", "Node Konvertiert und Acc geholt.\n");
gc = acc->gc;
purple_debug_warning("plugin-call-a-buddy", "GC wird geholt.\n");
if(!gc) {
return;
}
prpl = purple_connection_get_prpl(gc);
purple_debug_warning("plugin-call-a-buddy", "Hole Protocol.\n");
if(!prpl) {
return;
}
prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
purple_debug_warning("plugin-call-a-buddy", "Plugin_Protocol_INFO wird geholt. \n");
if(!prpl_info || !prpl_info->get_info) {
return;
}
prpl_info->get_info(gc, name);
purple_debug_warning("plugin-call-a-buddy", "Entsprechende Infos werden ermittelt \n");
ops = purple_notify_get_ui_ops();
purple_debug_warning("plugin-call-a-buddy", "Notify_Get_UI_Ops \n");
notify_userinfo_ori = ops->notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", (char*)*notify_userinfo_ori);
//Erstellt Funktionszeiger.
ops->notify_userinfo = call_a_buddy_notify_userinfo;
// purple_debug_warning("plugin-call-a-buddy", "Birthday_Reminder_Notify_Userinfo \n");
if(!PURPLE_BLIST_NODE_IS_BUDDY(node)) {
purple_debug_fatal("plugin-call-a-buddy", "Es wird versucht einen Nicht-User anzurufen.\n");
return;
}
test();
}
static void extend_buddy_context_menu(PurpleBlistNode *node, GList **menu) {
PurpleMenuAction *action = NULL;
GList *submenu = NULL;
action = purple_menu_action_new(_("User anrufen."), PURPLE_CALLBACK(call_user), NULL, NULL);
*menu = g_list_append(*menu, action);
}
static gboolean plugin_load(PurplePlugin *plugin) {
purple_signal_connect(purple_blist_get_handle(), "blist-node-extended-menu", plugin, PURPLE_CALLBACK(extend_buddy_context_menu), NULL);
purple_debug_warning("plugin-call-a-buddy", "Plugin_Load\n");
return TRUE;
}
static PurplePluginInfo info = {
PURPLE_PLUGIN_MAGIC, /**<- Magic */
PURPLE_MAJOR_VERSION, /**<- Major Version */
PURPLE_MINOR_VERSION, /**<- Minor Version */
PURPLE_PLUGIN_STANDARD, /**<- Type */
PIDGIN_PLUGIN_TYPE, /**<- UI_Requirements */
0, /**<- Flags */
NULL, /**<- Dependencies */
PURPLE_PRIORITY_DEFAULT, /**<- Priority */
"plugin-call-a-buddy", /**<- ID */
"Call a Buddy", /**<- Name */
"0.1", /**<- Version */
"Call a Buddy via Context-Menu", /**<- Summary */
"Call a Buddy via Context-Menu", /**<- Description */
"James Vornhagen <james.vornhagen@staufenbiel.de", /**<- Author */
"", /**<- Homepage */
plugin_load, /**<- load */
NULL, /**<- unload */
NULL, /**<- destroy */
NULL, /**<- ui_info */
NULL, /**<- extra_info */
NULL, /**<- prefs_info */
NULL, /**<- actions */
NULL, /**<- Reserved for next Versions */
NULL, /**<- Reserved for next Versions */
NULL, /**<- Reserved for next Versions */
NULL /**<- Reserved for next Versions */
};
static void init_plugin(PurplePlugin *plugin) {
purple_debug_warning("plugin-call-a-buddy", "Plugin initialisiert.");
}
PURPLE_INIT_PLUGIN(call_a_buddy, init_plugin, info);
[/c]
Wenn du möchtest, kann ich ihn dir auch als Anhang senden
