static void extended_menu_cb(PurpleBlistNode *node, GList **menu, gpointer data) { GList *submenu = NULL, *submenu_1 = NULL, *submenu_2 = NULL; PurpleMenuAction *action = NULL; PurpleBlistNode *group; PurpleMenuAction *action_submenu = NULL, *action_submenu_1 = NULL, *action_submenu_2 = NULL; const gchar *group_name = NULL; if (!PURPLE_IS_BUDDY(node)) return; for (group = purple_blist_get_root(); group; group = purple_blist_node_get_sibling_next(group)) { if (!PURPLE_IS_GROUP(group)) continue; group_name = purple_group_get_name((PurpleGroup *)group); action_submenu_1 = purple_menu_action_new(group_name, PURPLE_CALLBACK(send_buddy_list_cb), group, NULL); submenu_1 = g_list_append (submenu_1, action_submenu_1); } for (group = purple_blist_get_root(); group; group = purple_blist_node_get_sibling_next(group)) { if (!PURPLE_IS_GROUP(group)) continue; group_name = purple_group_get_name((PurpleGroup *)group); action_submenu_2 = purple_menu_action_new(group_name, PURPLE_CALLBACK(send_online_buddy_cb), group, NULL); submenu_2 = g_list_append (submenu_2, action_submenu_2); } action_submenu = purple_menu_action_new(_("Group list"), PURPLE_CALLBACK(send_group_list_cb), NULL, NULL); submenu = g_list_append (submenu, action_submenu); action_submenu = purple_menu_action_new(_("Buddy List for"), NULL, NULL, submenu_1); submenu = g_list_append (submenu, action_submenu); action_submenu = purple_menu_action_new(_("Online Buddies for"), NULL, NULL, submenu_2); submenu = g_list_append (submenu, action_submenu); action = purple_menu_action_new(_("Send"), NULL, NULL, submenu); *menu = g_list_append (*menu, action); }
static gpointer nested_group_find_parent(PurpleBlistNode *node) { char *name; PurpleGroup *group; char *sep; PurpleBlistNode *ret, *parent; GntTree *tree; if (!PURPLE_IS_GROUP(node)) return default_manager->find_parent(node); group = PURPLE_GROUP(node); name = g_strdup(purple_group_get_name(group)); if (!(sep = strchr(name, '/'))) { g_free(name); return default_manager->find_parent(node); } tree = finch_blist_get_tree(); parent = NULL; while (sep) { *sep = 0; if (*(sep + 1) && (ret = PURPLE_BLIST_NODE(purple_blist_find_group(name)))) { finch_blist_manager_add_node(ret); parent = ret; } else if (!(ret = g_hash_table_lookup(groups, name))) { ret = g_object_new(FINCH_TYPE_GROUPING_NODE, NULL); g_hash_table_insert(groups, g_strdup(name), ret); gnt_tree_add_row_last(tree, ret, gnt_tree_create_row(tree, name), parent); parent = ret; } *sep = '/'; sep = strchr(sep + 1, '/'); } g_free(name); return ret; }
static gboolean nested_group_can_add_node(PurpleBlistNode *node) { PurpleBlistNode *group; int len; if (!PURPLE_IS_GROUP(node)) return default_manager->can_add_node(node); if (default_manager->can_add_node(node)) return TRUE; len = strlen(purple_group_get_name(PURPLE_GROUP(node))); group = purple_blist_get_root(); for (; group; group = purple_blist_node_get_sibling_next(group)) { if (group == node) continue; if (strncmp(purple_group_get_name(PURPLE_GROUP(node)), purple_group_get_name(PURPLE_GROUP(group)), len) == 0 && default_manager->can_add_node(group)) return TRUE; } return FALSE; }
static void send_online_buddy_cb (PurpleBlistNode *cnode, gpointer data) { PurplePlugin *plugin = (PurplePlugin *)data; PurpleConnection *gc; GSList *blist; PurpleBlistNode *gnode, *node; PurpleBuddy *b, *buddy; PurpleGroup *g, *check_group; const char *name, *gname, *receiver; int count = 0; PurpleAccount *account; PurpleIMConversation *im; gchar *buddylist = NULL; int total, flag = 0, counter = 0; gchar *group_info; const gchar *groupname = purple_group_get_name(data); purple_debug_info("send-option", "The group selected is: %s", groupname); buddy = (PurpleBuddy *)cnode; purple_debug_info("send-option", "Inside send_online_buddy_cb"); receiver = purple_buddy_get_name(buddy); purple_debug_info("send-option", "Receiver name: %s", receiver); account = purple_buddy_get_account(buddy); gc = purple_account_get_connection(account); im = purple_conversations_find_im_with_account(receiver, purple_connection_get_account(gc)); if(im) purple_debug_info("send-option", "Yayy, IM!"); else purple_debug_info("send-option", "Boo! No IM :("); if (im == NULL) im = purple_im_conversation_new(purple_connection_get_account(gc), receiver); for(gnode = purple_blist_get_buddy_list()->root; gnode != NULL; gnode = gnode->next) { if (PURPLE_IS_GROUP(gnode)) { g = (PurpleGroup*)gnode; /*fishy. It says g may be uninitiliazed here. What can I initilalie g to in the else, to get rid of the warning*/ if (g != data) continue; else break; } } gname = purple_group_get_name(g); total = purple_counting_node_get_online_count(PURPLE_COUNTING_NODE(g));; purple_debug_info("send-option", "%s (%d): \n",gname, total); group_info = g_strdup_printf("%s (%d):\n",gname, total); buddylist = g_strconcat(group_info, "\t","\t", NULL); for (blist = purple_blist_get_buddies(); blist != NULL; blist = blist->next) { node = blist->data; if (PURPLE_IS_BUDDY(node)) { b = (PurpleBuddy*)node; name = purple_buddy_get_alias(b); check_group = purple_buddy_get_group(b); if (data == check_group && PURPLE_BUDDY_IS_ONLINE(b)) { ++count; ++counter; if (flag == 1 && counter != total) { buddylist = g_strconcat(name, ",\t", NULL); flag = 0; } else if (flag == 1 && counter == total) { buddylist = g_strconcat(name, ".\t", NULL); purple_debug_info(NULL, "%s", buddylist); purple_conversation_send(PURPLE_CONVERSATION(im), buddylist); buddylist = NULL; count = 0; } else{ if (count <= 20 && counter != total) { buddylist = g_strconcat(buddylist, name, ",\t", NULL); /*fishy cant insert newline*/ } else { if (counter == total) buddylist = g_strconcat(buddylist, name, ".\t", NULL); else buddylist = g_strconcat(buddylist, name, ",\t", NULL); purple_debug_info(NULL, "%s", buddylist); purple_conversation_send(PURPLE_CONVERSATION(im), buddylist); buddylist = NULL; count = 0; flag = 1; } } } } } purple_debug_info("send-option", "The counter is (%d): \n",counter); purple_notify_message (plugin, PURPLE_NOTIFY_MSG_INFO, "Send online buddies", "Successfully sent your online buddies :)", NULL, NULL, NULL, NULL); g_free(buddylist); }
static void send_group_list_cb (PurpleBlistNode *cnode, gpointer data) { PurplePlugin *plugin = (PurplePlugin *)data; PurpleBuddy *buddy; const char *receiver, *gname = NULL; PurpleAccount *account; PurpleIMConversation *im; PurpleConnection *gc; PurpleBlistNode *gnode; PurpleGroup *g; gchar *grouptotal, *grouplist = NULL; int count = 0, counter = 0, flag = 0, total = 0; buddy = (PurpleBuddy *)cnode; purple_debug_info("send-option", "Inside send_group_list_cb"); receiver = purple_buddy_get_name(buddy); purple_debug_info("send-option", "Receiver name: %s", receiver); account = purple_buddy_get_account(buddy); gc = purple_account_get_connection(account); im = purple_conversations_find_im_with_account(receiver, purple_connection_get_account(gc)); if(im) purple_debug_info("send-option", "Yayy, IM!"); else purple_debug_info("send-option", "Boo! No IM :("); if (im == NULL) im = purple_im_conversation_new(purple_connection_get_account(gc), receiver); for(gnode = purple_blist_get_buddy_list()->root; gnode != NULL; gnode = gnode->next) { if (PURPLE_IS_GROUP(gnode)) { ++total; grouptotal = g_strdup_printf("Groups (%d):\n", total); grouplist = g_strconcat(grouptotal, gname, ",\t", NULL); } } for(gnode = purple_blist_get_buddy_list()->root; gnode != NULL; gnode = gnode->next) { if (PURPLE_IS_GROUP(gnode)) { g = (PurpleGroup*)gnode; gname = purple_group_get_name(g); purple_debug_info("send-option", " Group checked: %s \n",gname); ++count; ++counter; if (flag == 1 && counter != total) { grouplist = g_strconcat(gname, ",\t", NULL); flag = 0; } else if (flag == 1 && counter == total) { grouplist = g_strconcat(gname, ".\t", NULL); purple_debug_info(NULL, "%s", grouplist); purple_conversation_send(PURPLE_CONVERSATION(im), grouplist); grouplist = NULL; count = 0; } else{ if (count <= 20 && counter != total) { grouplist = g_strconcat(grouplist, gname, ",\t", NULL); /*fishy cant insert newline*/ } else { if (counter == total) grouplist = g_strconcat(grouplist, gname, ".\t", NULL); else grouplist = g_strconcat(grouplist, gname, ",\t", NULL); purple_debug_info(NULL, "%s", grouplist); purple_conversation_send(PURPLE_CONVERSATION(im), grouplist); grouplist = NULL; count = 0; flag = 1; } } } } purple_notify_message (plugin, PURPLE_NOTIFY_MSG_INFO, "Send group list", "Successfully sent your group list :)", NULL, NULL, NULL, NULL); g_free(grouplist); }