[Pidgin] #13358: Add possibility to show status only to friends.
Pidgin
trac at pidgin.im
Fri Feb 11 01:35:33 EST 2011
#13358: Add possibility to show status only to friends.
-----------------------+----------------------------------------------------
Reporter: pielas | Owner: bartosz
Type: patch | Status: new
Component: Gadu-Gadu | Version:
Keywords: |
-----------------------+----------------------------------------------------
#
# old_revision [54e7873c4e78229f13e9d60f11a6e65a96bbd9dd]
#
# patch "libpurple/protocols/gg/gg.c"
# from [7f0250c8f719abd7922cac75d0eb20da58b5a991]
# to [68116fb0561c92ab8beb86a07f8af19aa0a89459]
#
# patch "libpurple/protocols/gg/gg.h"
# from [e5ca05fc0e1945e7d729acc0a9bcb7c57682b6b5]
# to [174220d8802b40f910662633c10a5312f041bec6]
#
============================================================
--- libpurple/protocols/gg/gg.c 7f0250c8f719abd7922cac75d0eb20da58b5a991
+++ libpurple/protocols/gg/gg.c 68116fb0561c92ab8beb86a07f8af19aa0a89459
@@ -49,6 +49,10 @@ static PurplePlugin *my_protocol = NULL;
static PurplePlugin *my_protocol = NULL;
+/* Prototypes */
+static void ggp_set_status(PurpleAccount *account, PurpleStatus *status);
+static int ggp_to_gg_status(PurpleStatus *status, char **msg);
+
/* ----------------------------------------------------------------------
*/
/* ----- EXTERNAL CALLBACKS ---------------------------------------------
*/
/* ----------------------------------------------------------------------
*/
@@ -755,6 +759,61 @@ static void ggp_change_passwd(PurplePlug
ggp_token_request(gc, ggp_change_passwd_dialog);
}
+/* ----- CHANGE STATUS BROADCASTING
------------------------------------------------ */
+
+static void ggp_action_change_status_broadcasting_ok(PurpleConnection
*gc, PurpleRequestFields *fields)
+{
+ GGPInfo *info = gc->proto_data;
+ int selected_field;
+ PurpleAccount *account = purple_connection_get_account(gc);
+ PurpleStatus *status;
+
+ selected_field = purple_request_fields_get_choice(fields,
"status_broadcasting");
+
+ if (selected_field == 0)
+ info->status_broadcasting = TRUE;
+ else
+ info->status_broadcasting = FALSE;
+
+ status = purple_account_get_active_status(account);
+
+ ggp_set_status(account, status);
+}
+
+static void ggp_action_change_status_broadcasting(PurplePluginAction
*action)
+{
+ PurpleConnection *gc = (PurpleConnection *)action->context;
+ GGPInfo *info = gc->proto_data;
+
+ PurpleRequestFields *fields;
+ PurpleRequestFieldGroup *group;
+ PurpleRequestField *field;
+
+ fields = purple_request_fields_new();
+ group = purple_request_field_group_new(NULL);
+ purple_request_fields_add_group(fields, group);
+
+ field = purple_request_field_choice_new("status_broadcasting",
_("Show status to:"), 0);
+ purple_request_field_choice_add(field, _("All people"));
+ purple_request_field_choice_add(field, _("Only friends"));
+ purple_request_field_group_add_field(group, field);
+
+ if (info->status_broadcasting)
+ purple_request_field_choice_set_default_value(field, 0);
+ else
+ purple_request_field_choice_set_default_value(field, 1);
+
+ purple_request_fields(gc,
+ _("Change status broadcasting"),
+ _("Change status broadcasting"),
+ _("Please, select who can see your status"),
+ fields,
+ _("OK"),
G_CALLBACK(ggp_action_change_status_broadcasting_ok),
+ _("Cancel"), NULL,
+ purple_connection_get_account(gc), NULL, NULL,
+ gc);
+}
+
/* ----- CONFERENCES ----------------------------------------------------
*/
static void ggp_callback_add_to_chat_ok(PurpleBuddy *buddy,
PurpleRequestFields *fields)
@@ -856,10 +915,6 @@ static void ggp_bmenu_block(PurpleBlistN
/* ----- INTERNAL CALLBACKS ---------------------------------------------
*/
/* ----------------------------------------------------------------------
*/
-/* Prototypes */
-static void ggp_set_status(PurpleAccount *account, PurpleStatus *status);
-static int ggp_to_gg_status(PurpleStatus *status, char **msg);
-
struct gg_fetch_avatar_data
{
PurpleConnection *gc;
@@ -1948,7 +2003,8 @@ static void ggp_login(PurpleAccount *acc
info->searches = ggp_search_new();
info->pending_richtext_messages = NULL;
info->pending_images = g_hash_table_new(g_int_hash, g_int_equal);
-
+ info->status_broadcasting = purple_account_get_bool(account,
"status_broadcasting", TRUE);
+
gc->proto_data = info;
glp->uin = ggp_get_uin(account);
@@ -1965,6 +2021,9 @@ static void ggp_login(PurpleAccount *acc
glp->status = ggp_to_gg_status(status, &glp->status_descr);
glp->tls = 0;
+ if (!info->status_broadcasting)
+ glp->status = glp->status|GG_STATUS_FRIENDS_MASK;
+
address = purple_account_get_string(account, "gg_server", "");
if (address && *address) {
/* TODO: Make this non-blocking */
@@ -2021,6 +2080,8 @@ static void ggp_close(PurpleConnection *
gg_free_session(info->session);
}
+ purple_account_set_bool(account, "status_broadcasting",
info->status_broadcasting);
+
/* Immediately close any notifications on this handle
since that process depends
* upon the contents of info->searches, which we are about
to destroy.
*/
@@ -2243,6 +2304,9 @@ static void ggp_set_status(PurpleAccount
new_status = ggp_to_gg_status(status, &new_msg);
+ if (!info->status_broadcasting)
+ new_status = new_status|GG_STATUS_FRIENDS_MASK;
+
if (new_msg == NULL) {
gg_change_status(info->session, new_status);
} else {
@@ -2431,6 +2495,10 @@ static GList *ggp_actions(PurplePlugin *
ggp_action_buddylist_load);
m = g_list_append(m, act);
+ act = purple_plugin_action_new(_("Change status broadcasting"),
+
ggp_action_change_status_broadcasting);
+ m = g_list_append(m, act);
+
return m;
}
============================================================
--- libpurple/protocols/gg/gg.h e5ca05fc0e1945e7d729acc0a9bcb7c57682b6b5
+++ libpurple/protocols/gg/gg.h 174220d8802b40f910662633c10a5312f041bec6
@@ -64,6 +64,7 @@ typedef struct {
int chats_count;
GList *pending_richtext_messages;
GHashTable *pending_images;
+ gboolean status_broadcasting; //When TRUE status is visible to
all, when FALSE status is visible only to friends.
} GGPInfo;
#endif /* _PURPLE_GG_H */
--
Ticket URL: <http://developer.pidgin.im/ticket/13358>
Pidgin <http://pidgin.im>
Pidgin
More information about the Tracker
mailing list