annotate plugins/psychic.c @ 12895:a355472257f4

[gaim-migrate @ 15248] Rework the buddy list only pref slightly and make the conversation notice a system message. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Mon, 16 Jan 2006 20:31:20 +0000
parents 6cc43e23ad36
children e841e23a334c
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)) {
12861
6cc43e23ad36 [gaim-migrate @ 15212]
Christopher O'Brien <siege@pidgin.im>
parents: 12859
diff changeset
50 gaim_conversation_write(gconv, NULL,
6cc43e23ad36 [gaim-migrate @ 15212]
Christopher O'Brien <siege@pidgin.im>
parents: 12859
diff changeset
51 _("You feel a disturbance in the force..."),
12895
a355472257f4 [gaim-migrate @ 15248]
Richard Laager <rlaager@wiktel.com>
parents: 12861
diff changeset
52 GAIM_MESSAGE_SYSTEM | GAIM_MESSAGE_NO_LOG,
a355472257f4 [gaim-migrate @ 15248]
Richard Laager <rlaager@wiktel.com>
parents: 12861
diff changeset
53 time(NULL));
12859
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
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
58
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
59 static GaimPluginPrefFrame *
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
60 get_plugin_pref_frame(GaimPlugin *plugin) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
61
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
62 GaimPluginPrefFrame *frame;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
63 GaimPluginPref *pref;
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 frame = gaim_plugin_pref_frame_new();
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
66
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
67 pref = gaim_plugin_pref_new_with_name(PREF_BUDDIES);
12895
a355472257f4 [gaim-migrate @ 15248]
Richard Laager <rlaager@wiktel.com>
parents: 12861
diff changeset
68 gaim_plugin_pref_set_label(pref, _("Only enable for users on the buddy list"));
12859
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
69 gaim_plugin_pref_frame_add(frame, pref);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
70
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
71 pref = gaim_plugin_pref_new_with_name(PREF_NOTICE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
72 gaim_plugin_pref_set_label(pref, _("Display notification message in"
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
73 " conversations"));
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
74 gaim_plugin_pref_frame_add(frame, pref);
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 return frame;
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
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
79
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
80 static gboolean
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
81 plugin_load(GaimPlugin *plugin) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
82
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
83 void *convs_handle;
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
84 convs_handle = gaim_conversations_get_handle();
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
85
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
86 gaim_signal_connect(convs_handle, "buddy-typing", plugin,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
87 GAIM_CALLBACK(buddy_typing_cb), NULL);
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 return TRUE;
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
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
92
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
93 static GaimPluginUiInfo prefs_info = {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
94 get_plugin_pref_frame,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
95 0, /* page_num (Reserved) */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
96 NULL, /* frame (Reserved) */
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
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
99
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
100 static GaimPluginInfo info = {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
101 GAIM_PLUGIN_MAGIC,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
102 GAIM_MAJOR_VERSION,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
103 GAIM_MINOR_VERSION,
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
104 GAIM_PLUGIN_STANDARD, /**< type */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
105 NULL, /**< ui_requirement */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
106 0, /**< flags */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
107 NULL, /**< dependencies */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
108 GAIM_PRIORITY_DEFAULT, /**< priority */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
109
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
110 PLUGIN_ID, /**< id */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
111 PLUGIN_NAME, /**< name */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
112 VERSION, /**< version */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
113 PLUGIN_SUMMARY, /**< summary */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
114 PLUGIN_DESC, /**< description */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
115 PLUGIN_AUTHOR, /**< author */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
116 GAIM_WEBSITE, /**< homepage */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
117
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
118 plugin_load, /**< load */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
119 NULL, /**< unload */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
120 NULL, /**< destroy */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
121
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
122 NULL, /**< ui_info */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
123 NULL, /**< extra_info */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
124 &prefs_info, /**< prefs_info */
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
125 NULL, /**< actions */
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
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
128
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
129 static void
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
130 init_plugin(GaimPlugin *plugin) {
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
131 gaim_prefs_add_none(PREFS_BASE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
132 gaim_prefs_add_bool(PREF_BUDDIES, FALSE);
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
133 gaim_prefs_add_bool(PREF_NOTICE, TRUE);
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
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
136
02e1ef5bc3d5 [gaim-migrate @ 15210]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
137 GAIM_INIT_PLUGIN(psychic, init_plugin, info)