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