annotate plugins/psychic.c @ 12859:02e1ef5bc3d5

[gaim-migrate @ 15210] adding a psychic mode plugin, replacing a preference which gaim-meanwhile used to offer committer: Tailor Script <tailor@pidgin.im>
author Christopher O'Brien <siege@pidgin.im>
date Fri, 13 Jan 2006 17:30:20 +0000
parents
children 6cc43e23ad36
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12859
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
2
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
3 #include "internal.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
4
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
5 #include "blist.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
6 #include "conversation.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
7 #include "debug.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
8 #include "signals.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
9 #include "version.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
10
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
11 #include "plugin.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
12 #include "pluginpref.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
13 #include "prefs.h"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
14
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
15
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
16 #define DEBUG_INFO(a...) gaim_debug_info("psychic", a)
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
17
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
18
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
19 #define PLUGIN_ID "core-psychic"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
20 #define PLUGIN_NAME N_("Psychic Mode")
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
21 #define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation")
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
22 #define PLUGIN_DESC N_("Causes conversation windows to appear as other" \
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
23 " users begin to message you")
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
24 #define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
25
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
26
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
27 #define PREFS_BASE "/plugins/core/psychic"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
28 #define PREF_BUDDIES PREFS_BASE "/buddies_only"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
29 #define PREF_NOTICE PREFS_BASE "/show_notice"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
30
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
31
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
32 static void
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
33 buddy_typing_cb(GaimAccount *acct, const char *name, void *data) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
34 GaimConversation *gconv;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
35
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
36 if(gaim_prefs_get_bool(PREF_BUDDIES)) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
37 if(! gaim_find_buddy(acct, name)) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
38 DEBUG_INFO("not in blist, doing nothing\n");
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
39 return;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
40 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
41 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
42
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
43 gconv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, acct);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
44 if(! gconv) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
45 DEBUG_INFO("no previous conversation exists\n");
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
46 gconv = gaim_conversation_new(GAIM_CONV_TYPE_IM, acct, name);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
47 gaim_conversation_present(gconv);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
48
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
49 if(gaim_prefs_get_bool(PREF_NOTICE)) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
50 gaim_conversation_write(gconv, NULL, _("Psychic mode"),
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
51 GAIM_MESSAGE_NO_LOG, time(NULL));
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
52 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
53 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
54 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
55
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
56
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
57 static GaimPluginPrefFrame *
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
58 get_plugin_pref_frame(GaimPlugin *plugin) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
59
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
60 GaimPluginPrefFrame *frame;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
61 GaimPluginPref *pref;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
62
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
63 frame = gaim_plugin_pref_frame_new();
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
64
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
65 pref = gaim_plugin_pref_new_with_name(PREF_BUDDIES);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
66 gaim_plugin_pref_set_label(pref, _("Only enable for users in buddy list"));
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
67 gaim_plugin_pref_frame_add(frame, pref);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
68
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
69 pref = gaim_plugin_pref_new_with_name(PREF_NOTICE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
70 gaim_plugin_pref_set_label(pref, _("Display notification message in"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
71 " conversations"));
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
72 gaim_plugin_pref_frame_add(frame, pref);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
73
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
74 return frame;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
75 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
76
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
77
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
78 static gboolean
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
79 plugin_load(GaimPlugin *plugin) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
80
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
81 void *convs_handle;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
82 convs_handle = gaim_conversations_get_handle();
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
83
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
84 gaim_signal_connect(convs_handle, "buddy-typing", plugin,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
85 GAIM_CALLBACK(buddy_typing_cb), NULL);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
86
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
87 return TRUE;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
88 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
89
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
90
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
91 static GaimPluginUiInfo prefs_info = {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
92 get_plugin_pref_frame,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
93 0, /* page_num (Reserved) */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
94 NULL, /* frame (Reserved) */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
95 };
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
96
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
97
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
98 static GaimPluginInfo info = {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
99 GAIM_PLUGIN_MAGIC,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
100 GAIM_MAJOR_VERSION,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
101 GAIM_MINOR_VERSION,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
102 GAIM_PLUGIN_STANDARD, /**< type */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
103 NULL, /**< ui_requirement */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
104 0, /**< flags */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
105 NULL, /**< dependencies */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
106 GAIM_PRIORITY_DEFAULT, /**< priority */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
107
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
108 PLUGIN_ID, /**< id */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
109 PLUGIN_NAME, /**< name */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
110 VERSION, /**< version */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
111 PLUGIN_SUMMARY, /**< summary */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
112 PLUGIN_DESC, /**< description */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
113 PLUGIN_AUTHOR, /**< author */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
114 GAIM_WEBSITE, /**< homepage */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
115
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
116 plugin_load, /**< load */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
117 NULL, /**< unload */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
118 NULL, /**< destroy */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
119
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
120 NULL, /**< ui_info */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
121 NULL, /**< extra_info */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
122 &prefs_info, /**< prefs_info */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
123 NULL, /**< actions */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
124 };
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
125
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
126
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
127 static void
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
128 init_plugin(GaimPlugin *plugin) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
129 gaim_prefs_add_none(PREFS_BASE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
130 gaim_prefs_add_bool(PREF_BUDDIES, FALSE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
131 gaim_prefs_add_bool(PREF_NOTICE, TRUE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
132 }
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
133
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
134
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
135 GAIM_INIT_PLUGIN(psychic, init_plugin, info)