libpurple/protocols/facebook/util.c

branch
facebook
changeset 37258
291b6e1acc24
parent 37250
3f5570a17b15
child 37260
473934b0c408
equal deleted inserted replaced
37257:5ba291680ac4 37258:291b6e1acc24
17 * You should have received a copy of the GNU General Public License 17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software 18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
20 */ 20 */
21 21
22 #include "internal.h"
23
22 #include <string.h> 24 #include <string.h>
23 #include <zlib.h> 25 #include <zlib.h>
24 26
25 #include "util.h" 27 #include "util.h"
26 28
53 ret[size] = 0; 55 ret[size] = 0;
54 g_rand_free(rand); 56 g_rand_free(rand);
55 return ret; 57 return ret;
56 } 58 }
57 59
60 static void
61 fb_util_request_buddy_ok(gpointer *mata, PurpleRequestFields *fields)
62 {
63 FbUtilRequestBuddyFunc func = mata[0];
64 GList *l;
65 GList *select;
66 gpointer data = mata[2];
67 GSList *ret = NULL;
68 PurpleBuddy *bdy;
69 PurpleRequestField *field;
70
71 if (func == NULL) {
72 g_free(mata);
73 return;
74 }
75
76 field = purple_request_fields_get_field(fields, "buddy");
77 select = purple_request_field_list_get_selected(field);
78
79 for (l = select; l != NULL; l = l->next) {
80 bdy = purple_request_field_list_get_data(field, l->data);
81 ret = g_slist_prepend(ret, bdy);
82 }
83
84 ret = g_slist_reverse(ret);
85 func(ret, data);
86
87 g_slist_free(ret);
88 g_free(mata);
89 }
90
91 static void
92 fb_util_request_buddy_cancel(gpointer *mata, PurpleRequestFields *fields)
93 {
94 FbUtilRequestBuddyFunc func = mata[1];
95 gpointer data = mata[2];
96
97 if (func != NULL) {
98 func(NULL, data);
99 }
100
101 g_free(mata);
102 }
103
104 gpointer
105 fb_util_request_buddy(PurpleConnection *gc, const gchar *title,
106 const gchar *primary, const gchar *secondary,
107 GSList *select, gboolean multi, GCallback ok_cb,
108 GCallback cancel_cb, gpointer data)
109 {
110 const gchar *alias;
111 const gchar *name;
112 gchar *str;
113 GList *items = NULL;
114 gpointer *mata;
115 GSList *buddies;
116 GSList *l;
117 PurpleAccount *acct;
118 PurpleRequestCommonParameters *cpar;
119 PurpleRequestField *field;
120 PurpleRequestFieldGroup *group;
121 PurpleRequestFields *fields;
122
123 mata = g_new0(gpointer, 3);
124 mata[0] = ok_cb;
125 mata[1] = cancel_cb;
126 mata[2] = data;
127
128 acct = purple_connection_get_account(gc);
129 buddies = purple_blist_find_buddies(acct, NULL);
130 buddies = g_slist_sort(buddies, (GCompareFunc) g_ascii_strcasecmp);
131
132 fields = purple_request_fields_new();
133 group = purple_request_field_group_new(NULL);
134 purple_request_fields_add_group(fields, group);
135
136 field = purple_request_field_list_new("buddy", NULL);
137 purple_request_field_list_set_multi_select(field, multi);
138 purple_request_field_set_required(field, TRUE);
139 purple_request_field_group_add_field(group, field);
140
141 for (l = buddies; l != NULL; l = l->next) {
142 name = purple_buddy_get_name(l->data);
143 alias = purple_buddy_get_alias(l->data);
144 str = g_strdup_printf("%s (%s)", alias, name);
145 purple_request_field_list_add_icon(field, str, NULL, l->data);
146 g_free(str);
147 }
148
149 for (l = select; l != NULL; l = l->next) {
150 name = purple_buddy_get_name(l->data);
151 alias = purple_buddy_get_alias(l->data);
152 str = g_strdup_printf("%s (%s)", alias, name);
153 items = g_list_append(items, str);
154 }
155
156 purple_request_field_list_set_selected(field, items);
157 g_slist_free(buddies);
158 g_list_free_full(items, g_free);
159
160 cpar = purple_request_cpar_from_connection(gc);
161 return purple_request_fields(gc, title, primary, secondary, fields,
162 _("Ok"),
163 G_CALLBACK(fb_util_request_buddy_ok),
164 _("Cancel"),
165 G_CALLBACK(fb_util_request_buddy_cancel),
166 cpar, mata);
167 }
168
169 gboolean
170 fb_util_str_is(const gchar *str, GAsciiType type)
171 {
172 gsize i;
173 gsize size;
174 guchar c;
175
176 g_return_val_if_fail(str != NULL, FALSE);
177 size = strlen(str);
178
179 for (i = 0; i < size; i++) {
180 c = (guchar) str[i];
181
182 if ((g_ascii_table[c] & type) == 0) {
183 return FALSE;
184 }
185 }
186
187 return TRUE;
188 }
189
58 static voidpf 190 static voidpf
59 fb_util_zalloc(voidpf opaque, uInt items, uInt size) 191 fb_util_zalloc(voidpf opaque, uInt items, uInt size)
60 { 192 {
61 return g_malloc(size * items); 193 return g_malloc(size * items);
62 } 194 }

mercurial