Mercurial > pidgin
annotate plugins/statenotify.c @ 13810:a84523152a24
[gaim-migrate @ 16240]
This is not a completed update, but it has useful bits and bug fixes
and the completed update will take some more time.
This adds support for some of the status API to Tcl, as well as
improving the handling of several of the pointer types (by introducing
a gaim reference object type and appropriate string roundtrip
functions) and introducing some "type safety".
committer: Tailor Script <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Sat, 10 Jun 2006 18:01:11 +0000 |
parents | 465c368366f8 |
children |
rev | line source |
---|---|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
1 #include "internal.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
2 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
3 #include "blist.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
4 #include "conversation.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5 #include "debug.h" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
6 #include "signals.h" |
9943 | 7 #include "version.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
8 |
9583 | 9 #include "plugin.h" |
10 #include "pluginpref.h" | |
11 #include "prefs.h" | |
12 | |
13 #define STATENOTIFY_PLUGIN_ID "core-statenotify" | |
14 | |
5267 | 15 static void |
6695 | 16 write_status(GaimBuddy *buddy, const char *message) |
5267 | 17 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5587
diff
changeset
|
18 GaimConversation *conv; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
19 const char *who; |
5267 | 20 char buf[256]; |
10167 | 21 char *escaped; |
5267 | 22 |
11338 | 23 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, |
10246 | 24 buddy->name, buddy->account); |
5267 | 25 |
26 if (conv == NULL) | |
27 return; | |
13476
465c368366f8
[gaim-migrate @ 15852]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
28 g_return_if_fail(conv->type == GAIM_CONV_TYPE_IM); |
5267 | 29 |
9620 | 30 who = gaim_buddy_get_alias(buddy); |
10167 | 31 escaped = g_markup_escape_text(who, -1); |
5267 | 32 |
10167 | 33 g_snprintf(buf, sizeof(buf), message, escaped); |
34 g_free(escaped); | |
5267 | 35 |
13476
465c368366f8
[gaim-migrate @ 15852]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
36 gaim_conv_im_write(conv->u.im, NULL, buf, GAIM_MESSAGE_SYSTEM | GAIM_MESSAGE_ACTIVE_ONLY, time(NULL)); |
5267 | 37 } |
38 | |
39 static void | |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
40 buddy_status_changed_cb(GaimBuddy *buddy, GaimStatus *old_status, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
41 GaimStatus *status, void *data) |
5267 | 42 { |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
43 gboolean available, old_available; |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
44 |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
45 available = gaim_status_is_available(status); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
46 old_available = gaim_status_is_available(old_status); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
47 |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
48 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
49 if (available && !old_available) |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
50 write_status(buddy, _("%s is no longer away.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
51 else if (!available && old_available) |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
52 write_status(buddy, _("%s has gone away.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
53 } |
5267 | 54 } |
55 | |
56 static void | |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
57 buddy_idle_changed_cb(GaimBuddy *buddy, gboolean old_idle, gboolean idle, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
58 void *data) |
5267 | 59 { |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
60 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
61 if (idle) { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
62 write_status(buddy, _("%s has become idle.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
63 } else { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
64 write_status(buddy, _("%s is no longer idle.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
65 } |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
66 } |
9583 | 67 } |
68 | |
11901 | 69 static void |
70 buddy_signon_cb(GaimBuddy *buddy, void *data) | |
71 { | |
72 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_signon")) | |
73 write_status(buddy, _("%s has signed on.")); | |
74 } | |
75 | |
76 static void | |
77 buddy_signoff_cb(GaimBuddy *buddy, void *data) | |
78 { | |
79 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_signon")) | |
80 write_status(buddy, _("%s has signed off.")); | |
81 } | |
82 | |
9583 | 83 static GaimPluginPrefFrame * |
84 get_plugin_pref_frame(GaimPlugin *plugin) | |
85 { | |
86 GaimPluginPrefFrame *frame; | |
87 GaimPluginPref *ppref; | |
88 | |
89 frame = gaim_plugin_pref_frame_new(); | |
90 | |
9648 | 91 ppref = gaim_plugin_pref_new_with_label(_("Notify When")); |
9583 | 92 gaim_plugin_pref_frame_add(frame, ppref); |
93 | |
9648 | 94 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_away", _("Buddy Goes _Away")); |
9583 | 95 gaim_plugin_pref_frame_add(frame, ppref); |
10246 | 96 |
9648 | 97 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_idle", _("Buddy Goes _Idle")); |
9583 | 98 gaim_plugin_pref_frame_add(frame, ppref); |
10246 | 99 |
11901 | 100 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_signon", _("Buddy _Signs On/Off")); |
101 gaim_plugin_pref_frame_add(frame, ppref); | |
102 | |
9583 | 103 return frame; |
5267 | 104 } |
105 | |
106 static gboolean | |
107 plugin_load(GaimPlugin *plugin) | |
108 { | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
109 void *blist_handle = gaim_blist_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
110 |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
111 gaim_signal_connect(blist_handle, "buddy-status-changed", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
112 GAIM_CALLBACK(buddy_status_changed_cb), NULL); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
113 gaim_signal_connect(blist_handle, "buddy-idle-changed", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
114 GAIM_CALLBACK(buddy_idle_changed_cb), NULL); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
115 gaim_signal_connect(blist_handle, "buddy-signed-on", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
116 GAIM_CALLBACK(buddy_signon_cb), NULL); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
117 gaim_signal_connect(blist_handle, "buddy-signed-off", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
118 GAIM_CALLBACK(buddy_signoff_cb), NULL); |
5267 | 119 |
120 return TRUE; | |
121 } | |
122 | |
9583 | 123 static GaimPluginUiInfo prefs_info = |
124 { | |
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
11935
diff
changeset
|
125 get_plugin_pref_frame, |
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
11935
diff
changeset
|
126 0, /* page_num (Reserved) */ |
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
11935
diff
changeset
|
127 NULL /* frame (Reserved) */ |
9583 | 128 }; |
129 | |
5267 | 130 static GaimPluginInfo info = |
131 { | |
9943 | 132 GAIM_PLUGIN_MAGIC, |
133 GAIM_MAJOR_VERSION, | |
134 GAIM_MINOR_VERSION, | |
5267 | 135 GAIM_PLUGIN_STANDARD, /**< type */ |
136 NULL, /**< ui_requirement */ | |
137 0, /**< flags */ | |
138 NULL, /**< dependencies */ | |
139 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
140 | |
9583 | 141 STATENOTIFY_PLUGIN_ID, /**< id */ |
5267 | 142 N_("Buddy State Notification"), /**< name */ |
143 VERSION, /**< version */ | |
144 /** summary */ | |
145 N_("Notifies in a conversation window when a buddy goes or returns from " | |
146 "away or idle."), | |
147 /** description */ | |
148 N_("Notifies in a conversation window when a buddy goes or returns from " | |
149 "away or idle."), | |
150 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
151 GAIM_WEBSITE, /**< homepage */ |
5267 | 152 |
153 plugin_load, /**< load */ | |
154 NULL, /**< unload */ | |
155 NULL, /**< destroy */ | |
156 | |
157 NULL, /**< ui_info */ | |
8993 | 158 NULL, /**< extra_info */ |
9583 | 159 &prefs_info, /**< prefs_info */ |
8993 | 160 NULL |
5267 | 161 }; |
162 | |
163 static void | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
164 init_plugin(GaimPlugin *plugin) |
5267 | 165 { |
9583 | 166 gaim_prefs_add_none("/plugins/core/statenotify"); |
167 gaim_prefs_add_bool("/plugins/core/statenotify/notify_away", TRUE); | |
168 gaim_prefs_add_bool("/plugins/core/statenotify/notify_idle", TRUE); | |
11901 | 169 gaim_prefs_add_bool("/plugins/core/statenotify/notify_signon", TRUE); |
5267 | 170 } |
171 | |
6063 | 172 GAIM_INIT_PLUGIN(statenotify, init_plugin, info) |