Mercurial > pidgin
annotate plugins/statenotify.c @ 11052:8a68c933a5dd
[gaim-migrate @ 12990]
Patch #1227165 from sadrul
This patch probes plugins when the plugin page is loaded in preferences. This allows users to activate newly installed plugins without restarting Gaim.
The only way I can see this being a problem is if you installed a plugin which was version-compatible but binary incompatible. (For example, you're working on Gaim HEAD and change a public struct in a way that's binary backwards incompatible, build a plugin against it, install the plugin, and open the preferences page of a running copy of Gaim from before the change.) Even then, depending on the particular plugin and binary incompatibility, you might have to activate the plugin before Gaim would crash.
So, unless I'm missing something, this should be safe. Let's see how it goes.
committer: Tailor Script <tailor@pidgin.im>
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Sun, 03 Jul 2005 05:28:57 +0000 |
| parents | a66cf83552dc |
| children | 17142948653e |
| 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 |
| 10246 | 23 conv = gaim_find_conversation_with_account(GAIM_CONV_IM, |
| 24 buddy->name, buddy->account); | |
| 5267 | 25 |
| 26 if (conv == NULL) | |
| 27 return; | |
| 28 | |
| 9620 | 29 who = gaim_buddy_get_alias(buddy); |
| 10167 | 30 escaped = g_markup_escape_text(who, -1); |
| 5267 | 31 |
| 10167 | 32 g_snprintf(buf, sizeof(buf), message, escaped); |
| 33 g_free(escaped); | |
| 5267 | 34 |
| 6982 | 35 gaim_conversation_write(conv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
| 5267 | 36 } |
| 37 | |
| 38 static void | |
| 6695 | 39 buddy_away_cb(GaimBuddy *buddy, void *data) |
| 5267 | 40 { |
| 9583 | 41 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) |
| 42 write_status(buddy, _("%s has gone away.")); | |
| 5267 | 43 } |
| 44 | |
| 45 static void | |
| 6695 | 46 buddy_unaway_cb(GaimBuddy *buddy, void *data) |
| 5267 | 47 { |
| 9583 | 48 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) |
| 49 write_status(buddy, _("%s is no longer away.")); | |
| 5267 | 50 } |
| 51 | |
| 52 static void | |
| 6695 | 53 buddy_idle_cb(GaimBuddy *buddy, void *data) |
| 5267 | 54 { |
| 9583 | 55 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) |
| 56 write_status(buddy, _("%s has become idle.")); | |
| 5267 | 57 } |
| 58 | |
| 59 static void | |
| 6695 | 60 buddy_unidle_cb(GaimBuddy *buddy, void *data) |
| 5267 | 61 { |
| 9583 | 62 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) |
| 63 write_status(buddy, _("%s is no longer idle.")); | |
| 64 } | |
| 65 | |
| 66 static GaimPluginPrefFrame * | |
| 67 get_plugin_pref_frame(GaimPlugin *plugin) | |
| 68 { | |
| 69 GaimPluginPrefFrame *frame; | |
| 70 GaimPluginPref *ppref; | |
| 71 | |
| 72 frame = gaim_plugin_pref_frame_new(); | |
| 73 | |
| 9648 | 74 ppref = gaim_plugin_pref_new_with_label(_("Notify When")); |
| 9583 | 75 gaim_plugin_pref_frame_add(frame, ppref); |
| 76 | |
| 9648 | 77 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_away", _("Buddy Goes _Away")); |
| 9583 | 78 gaim_plugin_pref_frame_add(frame, ppref); |
| 10246 | 79 |
| 9648 | 80 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_idle", _("Buddy Goes _Idle")); |
| 9583 | 81 gaim_plugin_pref_frame_add(frame, ppref); |
| 10246 | 82 |
| 9583 | 83 return frame; |
| 5267 | 84 } |
| 85 | |
| 86 static gboolean | |
| 87 plugin_load(GaimPlugin *plugin) | |
| 88 { | |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
89 void *blist_handle = gaim_blist_get_handle(); |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
90 |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
91 gaim_signal_connect(blist_handle, "buddy-away", |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
92 plugin, GAIM_CALLBACK(buddy_away_cb), NULL); |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
93 gaim_signal_connect(blist_handle, "buddy-back", |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
94 plugin, GAIM_CALLBACK(buddy_unaway_cb), NULL); |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
95 gaim_signal_connect(blist_handle, "buddy-idle", |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
96 plugin, GAIM_CALLBACK(buddy_idle_cb), NULL); |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
97 gaim_signal_connect(blist_handle, "buddy-unidle", |
|
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
98 plugin, GAIM_CALLBACK(buddy_unidle_cb), NULL); |
| 5267 | 99 |
| 100 return TRUE; | |
| 101 } | |
| 102 | |
| 9583 | 103 static GaimPluginUiInfo prefs_info = |
| 104 { | |
| 105 get_plugin_pref_frame | |
| 106 }; | |
| 107 | |
| 5267 | 108 static GaimPluginInfo info = |
| 109 { | |
| 9943 | 110 GAIM_PLUGIN_MAGIC, |
| 111 GAIM_MAJOR_VERSION, | |
| 112 GAIM_MINOR_VERSION, | |
| 5267 | 113 GAIM_PLUGIN_STANDARD, /**< type */ |
| 114 NULL, /**< ui_requirement */ | |
| 115 0, /**< flags */ | |
| 116 NULL, /**< dependencies */ | |
| 117 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
| 118 | |
| 9583 | 119 STATENOTIFY_PLUGIN_ID, /**< id */ |
| 5267 | 120 N_("Buddy State Notification"), /**< name */ |
| 121 VERSION, /**< version */ | |
| 122 /** summary */ | |
| 123 N_("Notifies in a conversation window when a buddy goes or returns from " | |
| 124 "away or idle."), | |
| 125 /** description */ | |
| 126 N_("Notifies in a conversation window when a buddy goes or returns from " | |
| 127 "away or idle."), | |
| 128 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ | |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
129 GAIM_WEBSITE, /**< homepage */ |
| 5267 | 130 |
| 131 plugin_load, /**< load */ | |
| 132 NULL, /**< unload */ | |
| 133 NULL, /**< destroy */ | |
| 134 | |
| 135 NULL, /**< ui_info */ | |
| 8993 | 136 NULL, /**< extra_info */ |
| 9583 | 137 &prefs_info, /**< prefs_info */ |
| 8993 | 138 NULL |
| 5267 | 139 }; |
| 140 | |
| 141 static void | |
|
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
142 init_plugin(GaimPlugin *plugin) |
| 5267 | 143 { |
| 9583 | 144 gaim_prefs_add_none("/plugins/core/statenotify"); |
| 145 gaim_prefs_add_bool("/plugins/core/statenotify/notify_away", TRUE); | |
| 146 gaim_prefs_add_bool("/plugins/core/statenotify/notify_idle", TRUE); | |
| 5267 | 147 } |
| 148 | |
| 6063 | 149 GAIM_INIT_PLUGIN(statenotify, init_plugin, info) |
