1 #include "internal.h" // #defines needed for Gaim headers
2
3 #include <blist.h>
4 #include <debug.h>
5 #include <gtkutils.h>
6
7 #include "pe_blist.h"
8 #include "state.h"
9 #include "nls.h"
10
PE_get_buddy_default_autoencrypt(const PurpleAccount * account,const char * buddyname)11 gboolean PE_get_buddy_default_autoencrypt(const PurpleAccount* account, const char* buddyname) {
12 PurpleBuddy *buddy;
13 gboolean retval;
14
15 purple_debug(PURPLE_DEBUG_MISC, "pidgin-encryption",
16 "get_buddy_default_autoencrypt for %p:%s\n", account, buddyname);
17
18 if (!account) return FALSE;
19
20 buddy = purple_find_buddy((PurpleAccount*)account, buddyname);
21
22 if (buddy) {
23 if (!buddy->node.settings) {
24 /* Some users have been getting a crash because buddy->node.settings is/was
25 null. I can't replicate the problem on my system... So we sanity check
26 until the bug in Gaim is found/fixed */
27 purple_debug(PURPLE_DEBUG_MISC, "pidgin-encryption",
28 "Bad buddy settings for %s\n", buddyname);
29 return FALSE;
30 }
31
32 retval = purple_blist_node_get_bool(&buddy->node, "PE_Auto_Encrypt");
33 purple_debug(PURPLE_DEBUG_MISC, "pidgin-encryption", "Found buddy:%s:%d\n", buddyname, retval);
34
35 return retval;
36 }
37
38 purple_debug(PURPLE_DEBUG_MISC, "pidgin-encryption", "No setting found for buddy:%s\n", buddyname);
39 return FALSE;
40 }
41
buddy_autoencrypt_callback(PurpleBuddy * buddy,gpointer data)42 static void buddy_autoencrypt_callback(PurpleBuddy* buddy, gpointer data) {
43 gboolean setting;
44
45 purple_debug(PURPLE_DEBUG_INFO, "pidgin-encryption",
46 "encrypt callback hit (%p) %s\n", buddy, buddy->name);
47
48 setting = purple_blist_node_get_bool(&buddy->node, "PE_Auto_Encrypt");
49 purple_blist_node_set_bool(&buddy->node, "PE_Auto_Encrypt", !setting);
50
51 /* could iterate through conversations to set encryption status */
52 /* PE_set_tx_encryption(buddy->account, buddy->name, !setting); */
53 }
54
PE_buddy_menu_cb(PurpleBlistNode * node,GList ** menu,void * data)55 void PE_buddy_menu_cb(PurpleBlistNode* node, GList **menu, void* data) {
56 PurpleMenuAction *action;
57 PurpleBuddy* buddy;
58 gboolean setting;
59
60 if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) return;
61 /* else upcast to the buddy that we know it is: */
62 buddy = (PurpleBuddy*) node;
63
64 setting = purple_blist_node_get_bool(node, "PE_Auto_Encrypt");
65
66 if (setting) {
67 action = purple_menu_action_new(_("Turn Auto-Encrypt Off"), /* it is now turned on */
68 PURPLE_CALLBACK(buddy_autoencrypt_callback), buddy->account->gc, 0);
69 } else {
70 action = purple_menu_action_new(_("Turn Auto-Encrypt On"), /* it is now turned off */
71 PURPLE_CALLBACK(buddy_autoencrypt_callback), buddy->account->gc, 0);
72 }
73 *menu = g_list_append(*menu, action);
74 }
75