libpurple/protocols/facebook/facebook.c

Fri, 31 Jul 2015 22:31:53 -0400

author
James Geboski <jgeboski@gmail.com>
date
Fri, 31 Jul 2015 22:31:53 -0400
branch
facebook
changeset 37309
556eea7a45da
parent 37308
27833e4fcb1f
child 37310
a1a5f0ac39f2
permissions
-rw-r--r--

facebook: merged local glibcompat.h into libpurple's

37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1 /* purple
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
2 *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
5 * source distribution.
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
6 *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
10 * (at your option) any later version.
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
11 *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
15 * GNU General Public License for more details.
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
16 *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
20 */
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
21
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
22 #include "internal.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
23
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
24 #include "account.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
25 #include "connection.h"
37309
556eea7a45da facebook: merged local glibcompat.h into libpurple's
James Geboski <jgeboski@gmail.com>
parents: 37308
diff changeset
26 #include "glibcompat.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
27 #include "plugins.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
28 #include "protocol.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
29 #include "protocols.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
30 #include "roomlist.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
31 #include "version.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
32
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
33 #include "api.h"
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
34 #include "cmds.h"
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
35 #include "data.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
36 #include "facebook.h"
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
37 #include "util.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
38
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
39 static GSList *fb_cmds = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
40 static PurpleProtocol *fb_protocol = NULL;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
41
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
42 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
43 fb_cb_api_auth(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
44 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
45 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
46 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
47
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
48 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
49
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
50 purple_connection_update_progress(gc, _("Fetching contacts"), 2, 4);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
51 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
52 fb_api_contacts(api);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
53 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
54
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
55 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
56 fb_cb_api_connect(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
57 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
58 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
59 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
60
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
61 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
62
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
63 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
64 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
65 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
66
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
67 static void
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
68 fb_cb_data_icon(PurpleHttpConnection *con, PurpleHttpResponse *res,
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
69 gpointer data)
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
70 {
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
71 const gchar *csum;
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
72 const gchar *name;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
73 const gchar *str;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
74 FbDataIcon *icon = data;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
75 FbHttpParams *params;
37263
5fb3e4d02954 facebook: fixed potential segfault on HTTP error
James Geboski <jgeboski@gmail.com>
parents: 37258
diff changeset
76 GError *err = NULL;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
77 gsize size;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
78 guchar *idata;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
79 PurpleAccount *acct;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
80 PurpleHttpRequest *req;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
81
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
82 acct = purple_buddy_get_account(icon->buddy);
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
83 name = purple_buddy_get_name(icon->buddy);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
84
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
85 if (!fb_http_error_chk(res, &err)) {
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
86 fb_util_debug_warning("Failed to retrieve icon for %s: %s",
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
87 name, err->message);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
88 g_error_free(err);
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
89 return;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
90 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
91
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
92 req = purple_http_conn_get_request(con);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
93 str = purple_http_request_get_url(req);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
94 params = fb_http_params_new_parse(str, TRUE);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
95 csum = fb_http_params_get_str(params, "oh", &err);
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
96 str = purple_http_response_get_data(res, &size);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
97
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
98 idata = g_memdup(str, size);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
99 purple_buddy_icons_set_for_user(acct, name, idata, size, csum);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
100 fb_http_params_free(params);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
101 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
102
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
103 static void
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
104 fb_cb_api_contacts(FbApi *api, GSList *users, gboolean complete, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
105 {
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
106 const gchar *alias;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
107 const gchar *csum;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
108 FbApiUser *user;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
109 FbData *fata = data;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
110 FbId muid;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
111 gchar uid[FB_ID_STRMAX];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
112 GSList *l;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
113 GValue val = G_VALUE_INIT;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
114 PurpleAccount *acct;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
115 PurpleBuddy *bdy;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
116 PurpleConnection *gc;
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
117 PurpleConnectionState state;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
118 PurpleGroup *grp;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
119
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
120 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
121 acct = purple_connection_get_account(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
122 grp = purple_blist_get_default_group();
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
123 alias = purple_account_get_private_alias(acct);
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
124 state = purple_connection_get_state(gc);
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
125
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
126 g_value_init(&val, FB_TYPE_ID);
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
127 g_object_get_property(G_OBJECT(api), "uid", &val);
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
128 muid = g_value_get_int64(&val);
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
129 g_value_unset(&val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
130
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
131 for (l = users; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
132 user = l->data;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
133 FB_ID_TO_STR(user->uid, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
134
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
135 if (G_UNLIKELY(user->uid == muid)) {
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
136 if (G_UNLIKELY(alias != NULL)) {
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
137 continue;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
138 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
139
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
140 purple_account_set_private_alias(acct, user->name);
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
141 continue;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
142 }
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
143
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
144 bdy = purple_blist_find_buddy(acct, uid);
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
145
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
146 if (bdy == NULL) {
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
147 bdy = purple_buddy_new(acct, uid, NULL);
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
148 purple_blist_add_buddy(bdy, NULL, grp, NULL);
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
149 }
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
150
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
151 purple_buddy_set_server_alias(bdy, user->name);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
152 csum = purple_buddy_icons_get_checksum_for_user(bdy);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
153
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
154 if (!purple_strequal(csum, user->csum)) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
155 fb_data_icon_add(fata, bdy, user->icon,
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
156 fb_cb_data_icon);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
157 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
158 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
159
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
160 fb_data_icon_queue(fata);
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
161
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
162 if (complete && (state != PURPLE_CONNECTION_CONNECTED)) {
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
163 purple_connection_update_progress(gc, _("Connecting"), 3, 4);
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
164 fb_api_connect(api);
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
165 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
166 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
167
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
168 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
169 fb_cb_api_error(FbApi *api, GError *error, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
170 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
171 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
172 PurpleConnection *gc;
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
173 PurpleConnectionError errc;
37293
dc35ba3e7fac facebook: fixed all errors being marked as fatal
James Geboski <jgeboski@gmail.com>
parents: 37292
diff changeset
174
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
175 if ((error->domain == FB_HTTP_ERROR) &&
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
176 (error->code >= 400) &&
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
177 (error->code <= 500))
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
178 {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
179 errc = PURPLE_CONNECTION_ERROR_OTHER_ERROR;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
180 } else if (g_error_matches(error, FB_API_ERROR, FB_API_ERROR_AUTH)) {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
181 errc = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
182 } else {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
183 errc = PURPLE_CONNECTION_ERROR_NETWORK_ERROR;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
184 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
185
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
186 gc = fb_data_get_connection(fata);
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
187 purple_connection_error(gc, errc, error->message);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
188 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
189
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
190 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
191 fb_cb_api_message(FbApi *api, GSList *msgs, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
192 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
193 FbApiMessage *msg;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
194 FbData *fata = data;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
195 gboolean mark;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
196 gboolean open;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
197 gchar *html;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
198 gchar tid[FB_ID_STRMAX];
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
199 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
200 gint id;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
201 GSList *l;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
202 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
203 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
204 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
205
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
206 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
207 acct = purple_connection_get_account(gc);
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
208 mark = purple_account_get_bool(acct, "mark-read", TRUE);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
209 open = purple_account_get_bool(acct, "group-chat-open", TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
210
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
211 for (l = msgs; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
212 msg = l->data;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
213 chat = NULL;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
214
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
215 html = purple_markup_escape_text(msg->text, -1);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
216 FB_ID_TO_STR(msg->uid, uid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
217
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
218 if (msg->tid == 0) {
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
219 if (mark) {
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
220 fb_api_read(api, msg->uid, TRUE);
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
221 }
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
222
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
223 purple_serv_got_im(gc, uid, html,
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
224 PURPLE_MESSAGE_RECV,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
225 time(NULL));
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
226 g_free(html);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
227 continue;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
228 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
229
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
230 FB_ID_TO_STR(msg->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
231 chat = purple_conversations_find_chat_with_account(tid, acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
232
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
233 if (chat == NULL) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
234 if (!open) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
235 g_free(html);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
236 continue;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
237 }
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
238
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
239 id = fb_id_hash(&msg->tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
240 purple_serv_got_joined_chat(gc, id, tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
241 fb_api_thread_info(api, msg->tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
242 } else {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
243 id = purple_chat_conversation_get_id(chat);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
244 }
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
245
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
246 if (mark) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
247 fb_api_read(api, msg->tid, TRUE);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
248 }
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
249
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
250 purple_serv_got_chat_in(gc, id, uid,
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
251 PURPLE_MESSAGE_RECV,
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
252 html, time(NULL));
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
253 g_free(html);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
254 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
255 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
256
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
257 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
258 fb_cb_api_presence(FbApi *api, GSList *press, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
259 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
260 const gchar *statid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
261 FbApiPresence *pres;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
262 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
263 gchar uid[FB_ID_STRMAX];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
264 GSList *l;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
265 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
266 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
267 PurpleStatusPrimitive pstat;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
268
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
269 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
270 acct = purple_connection_get_account(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
271
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
272 for (l = press; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
273 pres = l->data;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
274
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
275 if (pres->active) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
276 pstat = PURPLE_STATUS_AVAILABLE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
277 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
278 pstat = PURPLE_STATUS_OFFLINE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
279 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
280
37271
5a13f12c6fbd facebook: fixed the setting of buddy statuses
James Geboski <jgeboski@gmail.com>
parents: 37263
diff changeset
281 FB_ID_TO_STR(pres->uid, uid);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
282 statid = purple_primitive_get_id_from_type(pstat);
37271
5a13f12c6fbd facebook: fixed the setting of buddy statuses
James Geboski <jgeboski@gmail.com>
parents: 37263
diff changeset
283 purple_protocol_got_user_status(acct, uid, statid, NULL);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
284 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
285 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
286
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
287 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
288 fb_cb_api_thread_create(FbApi *api, FbId tid, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
289 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
290 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
291 gchar sid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
292 GHashTable *table;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
293 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
294
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
295 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
296 FB_ID_TO_STR(tid, sid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
297
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
298 table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
299 g_hash_table_insert(table, "name", g_strdup(sid));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
300 purple_serv_join_chat(gc, table);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
301 g_hash_table_destroy(table);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
302 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
303
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
304 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
305 fb_cb_api_thread_info(FbApi *api, FbApiThread *thrd, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
306 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
307 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
308 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
309 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
310 gchar uid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
311 gint id;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
312 GSList *l;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
313 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
314 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
315 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
316
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
317 gc = fb_data_get_connection(fata);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
318 acct = purple_connection_get_account(gc);
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
319 id = fb_id_hash(&thrd->tid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
320 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
321
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
322 chat = purple_conversations_find_chat_with_account(tid, acct);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
323
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
324 if (chat == NULL) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
325 chat = purple_serv_got_joined_chat(gc, id, tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
326 }
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
327
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
328 purple_chat_conversation_set_topic(chat, NULL, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
329
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
330 for (l = thrd->users; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
331 user = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
332 FB_ID_TO_STR(user->uid, uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
333 purple_chat_conversation_add_user(chat, uid, NULL, 0, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
334 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
335 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
336
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
337 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
338 fb_cb_api_thread_list(FbApi *api, GSList *thrds, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
339 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
340 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
341 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
342 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
343 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
344 GSList *m;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
345 GString *gstr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
346 FbApiThread *thrd;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
347 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
348 PurpleRoomlistRoom *room;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
349
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
350 list = fb_data_get_roomlist(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
351 gstr = g_string_new(NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
352
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
353 for (l = thrds; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
354 thrd = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
355 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
356 g_string_truncate(gstr, 0);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
357
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
358 for (m = thrd->users; m != NULL; m = m->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
359 user = m->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
360
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
361 if (gstr->len > 0) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
362 g_string_append(gstr, ", ");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
363 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
364
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
365 g_string_append(gstr, user->name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
366 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
367
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
368 room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
369 tid, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
370 purple_roomlist_room_add_field(list, room, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
371 purple_roomlist_room_add_field(list, room, gstr->str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
372 purple_roomlist_room_add(list, room);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
373 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
374
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
375 purple_roomlist_set_in_progress(list, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
376 g_string_free(gstr, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
377 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
378
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
379 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
380 fb_cb_api_typing(FbApi *api, FbApiTyping *typg, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
381 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
382 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
383 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
384 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
385
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
386 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
387 FB_ID_TO_STR(typg->uid, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
388
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
389 if (typg->state) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
390 purple_serv_got_typing(gc, uid, 0, PURPLE_IM_TYPING);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
391 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
392 purple_serv_got_typing_stopped(gc, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
393 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
394 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
395
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
396 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
397 fb_blist_chat_create(GSList *buddies, gpointer data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
398 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
399 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
400 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
401 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
402 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
403 gpointer mptr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
404 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
405 GSList *uids = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
406 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
407 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
408
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
409 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
410 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
411
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
412 if (g_slist_length(buddies) < 2) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
413 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
414 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
415 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
416 _("Failed to Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
417 _("At least two initial chat participants"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
418 " are required."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
419 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
420 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
421 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
422
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
423 for (l = buddies; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
424 name = purple_buddy_get_name(l->data);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
425 uid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
426 mptr = g_memdup(&uid, sizeof uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
427 uids = g_slist_prepend(uids, mptr);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
428 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
429
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
430 fb_api_thread_create(api, uids);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
431 g_slist_free_full(uids, g_free);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
432 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
433
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
434 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
435 fb_blist_chat_init(PurpleBlistNode *node, gpointer data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
436 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
437 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
438 GSList *select = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
439 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
440
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
441 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
442 return;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
443 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
444
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
445 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
446 select = g_slist_prepend(select, PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
447
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
448 fb_util_request_buddy(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
449 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
450 _("Initial Chat Participants"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
451 _("Select at least two initial participants."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
452 select, TRUE,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
453 G_CALLBACK(fb_blist_chat_create), NULL,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
454 fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
455 g_slist_free(select);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
456 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
457
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
458 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
459 fb_login(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
460 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
461 const gchar *pass;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
462 const gchar *user;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
463 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
464 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
465 PurpleConnection *gc;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
466
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
467 gc = purple_account_get_connection(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
468 //purple_connection_set_flags(gc, );
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
469
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
470 if (!purple_ssl_is_supported()) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
471 purple_connection_error(gc,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
472 PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
473 _("SSL support unavailable"));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
474 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
475 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
476
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
477 fata = fb_data_new(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
478 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
479 purple_connection_set_protocol_data(gc, fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
480
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
481 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
482 "auth",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
483 G_CALLBACK(fb_cb_api_auth),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
484 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
485 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
486 "connect",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
487 G_CALLBACK(fb_cb_api_connect),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
488 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
489 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
490 "contacts",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
491 G_CALLBACK(fb_cb_api_contacts),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
492 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
493 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
494 "error",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
495 G_CALLBACK(fb_cb_api_error),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
496 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
497 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
498 "message",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
499 G_CALLBACK(fb_cb_api_message),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
500 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
501 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
502 "presence",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
503 G_CALLBACK(fb_cb_api_presence),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
504 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
505 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
506 "thread-create",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
507 G_CALLBACK(fb_cb_api_thread_create),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
508 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
509 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
510 "thread-info",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
511 G_CALLBACK(fb_cb_api_thread_info),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
512 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
513 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
514 "thread-list",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
515 G_CALLBACK(fb_cb_api_thread_list),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
516 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
517 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
518 "typing",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
519 G_CALLBACK(fb_cb_api_typing),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
520 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
521
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
522 if (!fb_data_load(fata)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
523 user = purple_account_get_username(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
524 pass = purple_connection_get_password(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
525 purple_connection_update_progress(gc, _("Authenticating"),
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
526 1, 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
527 fb_api_auth(api, user, pass);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
528 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
529 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
530
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
531 purple_connection_update_progress(gc, _("Fetching contacts"), 2, 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
532 fb_api_contacts(api);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
533 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
534
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
535 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
536 fb_close(PurpleConnection *gc)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
537 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
538 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
539 FbData *fata;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
540
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
541 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
542 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
543
37288
bd9cacc05e09 facebook: ensure updated API settings are saved
James Geboski <jgeboski@gmail.com>
parents: 37286
diff changeset
544 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
545 fb_api_disconnect(api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
546 g_object_unref(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
547 purple_connection_set_protocol_data(gc, NULL);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
548 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
549
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
550 static GList *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
551 fb_status_types(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
552 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
553 PurpleStatusType *type;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
554 GList *types = NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
555
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
556 type = purple_status_type_new(PURPLE_STATUS_AVAILABLE,
37274
b9aca76e0549 facebook: enable setting of status types
James Geboski <jgeboski@gmail.com>
parents: 37271
diff changeset
557 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
558 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
559
37303
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
560 /* Just a NULL state (as of now) for compatibility */
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
561 type = purple_status_type_new(PURPLE_STATUS_AWAY,
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
562 NULL, NULL, TRUE);
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
563 types = g_list_prepend(types, type);
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
564
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
565 type = purple_status_type_new(PURPLE_STATUS_OFFLINE,
37274
b9aca76e0549 facebook: enable setting of status types
James Geboski <jgeboski@gmail.com>
parents: 37271
diff changeset
566 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
567 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
568
37303
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
569 return g_list_reverse(types);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
570 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
571
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
572 static const char *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
573 fb_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
574 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
575 return "facebook";
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
576 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
577
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
578 static void
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
579 fb_client_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *info,
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
580 gboolean full)
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
581 {
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
582 const gchar *name;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
583 PurplePresence *pres;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
584 PurpleStatus *status;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
585
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
586 pres = purple_buddy_get_presence(buddy);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
587 status = purple_presence_get_active_status(pres);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
588
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
589 if (!PURPLE_BUDDY_IS_ONLINE(buddy)) {
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
590 /* Prevent doubles statues for Offline buddies */
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
591 /* See: pidgin_get_tooltip_text() in gtkblist.c */
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
592 purple_notify_user_info_remove_last_item(info);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
593 }
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
594
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
595 name = purple_status_get_name(status);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
596 purple_notify_user_info_add_pair_plaintext(info, _("Status"), name);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
597 }
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
598
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
599 static GList *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
600 fb_client_blist_node_menu(PurpleBlistNode *node)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
601 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
602 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
603 GList *acts = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
604 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
605 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
606 PurpleMenuAction *act;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
607
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
608 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
609 return NULL;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
610 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
611
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
612 acct = purple_buddy_get_account(PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
613 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
614 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
615
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
616 act = purple_menu_action_new(_("Initiate _Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
617 PURPLE_CALLBACK(fb_blist_chat_init),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
618 fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
619 acts = g_list_prepend(acts, act);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
620
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
621 return g_list_reverse(acts);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
622 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
623
37294
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
624 static gboolean
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
625 fb_client_offline_message(const PurpleBuddy *buddy)
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
626 {
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
627 return TRUE;
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
628 }
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
629
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
630 static gint
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
631 fb_im_send(PurpleConnection *gc, PurpleMessage *msg)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
632 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
633 const gchar *name;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
634 const gchar *text;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
635 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
636 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
637 FbId uid;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
638 gchar *sext;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
639
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
640 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
641 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
642
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
643 name = purple_message_get_recipient(msg);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
644 uid = FB_ID_FROM_STR(name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
645
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
646 text = purple_message_get_contents(msg);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
647 sext = purple_markup_strip_html(text);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
648 fb_api_message(api, uid, FALSE, sext);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
649 g_free(sext);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
650 return 1;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
651 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
652
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
653 static guint
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
654 fb_im_send_typing(PurpleConnection *gc, const gchar *name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
655 PurpleIMTypingState state)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
656 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
657 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
658 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
659 FbId uid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
660
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
661 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
662 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
663 uid = FB_ID_FROM_STR(name);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
664
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
665 fb_api_typing(api, uid, state != PURPLE_IM_NOT_TYPING);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
666 return 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
667 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
668
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
669 static GList *
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
670 fb_chat_info()
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
671 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
672 GList *pces = NULL;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
673 PurpleProtocolChatEntry *pce;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
674
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
675 pce = g_new0(PurpleProtocolChatEntry, 1);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
676 pce->label = _("Chat _Name:");
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
677 pce->identifier = "name";
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
678 pce->required = TRUE;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
679 pces = g_list_prepend(pces, pce);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
680
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
681 return g_list_reverse(pces);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
682 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
683
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
684 static GHashTable *
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
685 fb_chat_info_defaults(PurpleConnection *gc, const gchar *name)
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
686 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
687 GHashTable *data;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
688
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
689 data = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
690 g_hash_table_insert(data, "name", g_strdup(name));
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
691
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
692 return data;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
693 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
694
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
695 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
696 fb_chat_join(PurpleConnection *gc, GHashTable *data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
697 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
698 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
699 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
700 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
701 FbId tid;
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
702 gint id;
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
703 PurpleChatConversation *chat;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
704
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
705 name = g_hash_table_lookup(data, "name");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
706 g_return_if_fail(name != NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
707
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
708 tid = FB_ID_FROM_STR(name);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
709 id = fb_id_hash(&tid);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
710 chat = purple_conversations_find_chat(gc, id);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
711
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
712 if (chat != NULL) {
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
713 purple_conversation_present(PURPLE_CONVERSATION(chat));
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
714 return;
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
715 }
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
716
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
717 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
718 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
719 fb_api_thread_info(api, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
720 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
721
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
722 static gchar *
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
723 fb_chat_get_name(GHashTable *data)
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
724 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
725 const gchar *name;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
726
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
727 name = g_hash_table_lookup(data, "name");
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
728 g_return_val_if_fail(name != NULL, NULL);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
729
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
730 return g_strdup(name);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
731 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
732
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
733 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
734 fb_chat_invite(PurpleConnection *gc, gint id, const gchar *msg,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
735 const gchar *who)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
736 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
737 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
738 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
739 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
740 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
741 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
742 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
743 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
744
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
745 if (!FB_ID_IS_STR(who)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
746 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
747 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
748 _("Invite Buddy Into Chat Room"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
749 _("Failed to Invite User"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
750 _("Invalid Facebook identifier."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
751 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
752 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
753 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
754
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
755 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
756 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
757 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
758
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
759 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
760 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
761 uid = FB_ID_FROM_STR(who);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
762
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
763 purple_chat_conversation_add_user(chat, who, NULL, 0, TRUE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
764 fb_api_thread_invite(api, tid, uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
765 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
766
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
767 static gint
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
768 fb_chat_send(PurpleConnection *gc, gint id, PurpleMessage *msg)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
769 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
770 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
771 const gchar *text;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
772 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
773 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
774 FbId tid;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
775 gchar *sext;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
776 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
777 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
778
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
779 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
780 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
781 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
782 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
783
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
784 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
785 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
786
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
787 text = purple_message_get_contents(msg);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
788 sext = purple_markup_strip_html(text);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
789 fb_api_message(api, tid, TRUE, sext);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
790 g_free(sext);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
791
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
792 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
793 purple_serv_got_chat_in(gc, id, name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
794 purple_message_get_flags(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
795 purple_message_get_contents(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
796 time(NULL));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
797 return 0;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
798 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
799
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
800 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
801 fb_chat_set_topic(PurpleConnection *gc, gint id, const gchar *topic)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
802 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
803 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
804 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
805 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
806 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
807 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
808 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
809
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
810 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
811 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
812 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
813 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
814
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
815 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
816 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
817
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
818 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
819 purple_chat_conversation_set_topic(chat, name, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
820 fb_api_thread_topic(api, tid, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
821 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
822
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
823 static PurpleRoomlist *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
824 fb_roomlist_get_list(PurpleConnection *gc)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
825 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
826 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
827 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
828 GList *flds = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
829 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
830 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
831 PurpleRoomlistField *fld;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
832
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
833 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
834 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
835 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
836 list = purple_roomlist_new(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
837 fb_data_set_roomlist(fata, list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
838
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
839 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
840 _("Topic"), "topic", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
841 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
842
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
843 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
844 _("Users"), "users", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
845 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
846
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
847 flds = g_list_reverse(flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
848 purple_roomlist_set_fields(list, flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
849
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
850 fb_api_thread_list(api);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
851 return list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
852 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
853
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
854 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
855 fb_roomlist_cancel(PurpleRoomlist *list)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
856 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
857 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
858 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
859 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
860 PurpleRoomlist *cist;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
861
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
862 acct = purple_roomlist_get_account(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
863 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
864 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
865 cist = fb_data_get_roomlist(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
866
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
867 if (G_LIKELY(cist == list)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
868 fb_data_set_roomlist(fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
869 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
870
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
871 purple_roomlist_set_in_progress(list, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
872 g_object_unref(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
873 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
874
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
875 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
876 fb_cmd_kick(PurpleConversation *conv, const gchar *cmd, gchar **args,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
877 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
878 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
879 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
880 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
881 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
882 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
883 FbId uid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
884 GError *err = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
885 PurpleAccount *acct;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
886 PurpleBuddy *bdy;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
887 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
888 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
889
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
890 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(conv),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
891 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
892
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
893 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
894 acct = purple_connection_get_account(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
895 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
896 bdy = fb_util_account_find_buddy(acct, chat, args[0], &err);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
897
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
898 if (err != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
899 *error = g_strdup_printf(_("%s."), err->message);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
900 g_error_free(err);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
901 return PURPLE_CMD_RET_FAILED;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
902 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
903
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
904 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
905 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
906
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
907 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
908 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
909
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
910 name = purple_buddy_get_name(bdy);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
911 uid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
912
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
913 purple_chat_conversation_remove_user(chat, name, NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
914 fb_api_thread_remove(api, tid, uid);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
915 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
916 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
917
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
918 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
919 fb_cmd_leave(PurpleConversation *conv, const gchar *cmd, gchar **args,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
920 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
921 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
922 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
923 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
924 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
925 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
926 gint id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
927 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
928 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
929
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
930 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(conv),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
931 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
932
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
933 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
934 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
935 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
936
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
937 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
938 id = purple_chat_conversation_get_id(chat);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
939
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
940 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
941 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
942
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
943 purple_serv_got_chat_left(gc, id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
944 fb_api_thread_remove(api, tid, 0);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
945 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
946 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
947
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
948 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
949 facebook_protocol_init(PurpleProtocol *protocol)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
950 {
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
951 GList *opts = NULL;
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
952 PurpleAccountOption *opt;
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
953
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
954 protocol->id = "prpl-facebook";
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
955 protocol->name = "Facebook";
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
956 protocol->options = OPT_PROTO_CHAT_TOPIC;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
957
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
958 opt = purple_account_option_bool_new(_("Mark messages as read"),
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
959 "mark-read", TRUE);
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
960 opts = g_list_prepend(opts, opt);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
961
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
962 opt = purple_account_option_bool_new(_("Open new group chats with "
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
963 "incoming messages"),
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
964 "group-chat-open", TRUE);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
965 opts = g_list_prepend(opts, opt);
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
966 protocol->account_options = g_list_reverse(opts);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
967 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
968
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
969 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
970 facebook_protocol_class_init(PurpleProtocolClass *klass)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
971 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
972 klass->login = fb_login;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
973 klass->close = fb_close;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
974 klass->status_types = fb_status_types;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
975 klass->list_icon = fb_list_icon;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
976 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
977
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
978 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
979 facebook_protocol_client_iface_init(PurpleProtocolClientIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
980 {
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
981 iface->tooltip_text = fb_client_tooltip_text;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
982 iface->blist_node_menu = fb_client_blist_node_menu;
37294
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
983 iface->offline_message = fb_client_offline_message;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
984 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
985
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
986 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
987 facebook_protocol_server_iface_init(PurpleProtocolServerIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
988 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
989
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
990 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
991
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
992 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
993 facebook_protocol_im_iface_init(PurpleProtocolIMIface *iface)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
994 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
995 iface->send = fb_im_send;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
996 iface->send_typing = fb_im_send_typing;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
997 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
998
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
999 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1000 facebook_protocol_chat_iface_init(PurpleProtocolChatIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1001 {
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1002 iface->info = fb_chat_info;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1003 iface->info_defaults = fb_chat_info_defaults;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1004 iface->join = fb_chat_join;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1005 iface->get_name = fb_chat_get_name;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1006 iface->invite = fb_chat_invite;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1007 iface->send = fb_chat_send;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1008 iface->set_topic = fb_chat_set_topic;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1009 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1010
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1011 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1012 facebook_protocol_privacy_iface_init(PurpleProtocolPrivacyIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1013 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1014
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1015 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1016
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1017 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1018 facebook_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1019 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1020 iface->get_list = fb_roomlist_get_list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1021 iface->cancel = fb_roomlist_cancel;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1022 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1023
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1024 PURPLE_DEFINE_TYPE_EXTENDED(
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1025 FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1026
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1027 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1028 facebook_protocol_client_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1029 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1030 facebook_protocol_server_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1031 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1032 facebook_protocol_im_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1033 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1034 facebook_protocol_chat_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1035 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1036 facebook_protocol_privacy_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1037 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1038 facebook_protocol_roomlist_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1039 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1040
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1041 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1042 fb_cmds_register(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1043 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1044 PurpleCmdId id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1045
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1046 static PurpleCmdFlag cflags =
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1047 PURPLE_CMD_FLAG_CHAT |
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1048 PURPLE_CMD_FLAG_PROTOCOL_ONLY;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1049
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1050 g_return_if_fail(fb_cmds == NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1051
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1052 id = purple_cmd_register("kick", "s", PURPLE_CMD_P_PROTOCOL, cflags,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1053 fb_protocol->id, fb_cmd_kick,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1054 _("kick: Kick someone from the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1055 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1056 fb_cmds = g_slist_prepend(fb_cmds, GUINT_TO_POINTER(id));
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1057
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1058 id = purple_cmd_register("leave", "", PURPLE_CMD_P_PROTOCOL, cflags,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1059 fb_protocol->id, fb_cmd_leave,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1060 _("leave: Leave the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1061 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1062 fb_cmds = g_slist_prepend(fb_cmds, GUINT_TO_POINTER(id));
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1063 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1064
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1065 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1066 fb_cmds_unregister_free(gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1067 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1068 PurpleCmdId id = GPOINTER_TO_UINT(data);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1069 purple_cmd_unregister(id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1070 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1071
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1072 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1073 fb_cmds_unregister(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1074 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1075 g_slist_free_full(fb_cmds, fb_cmds_unregister_free);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1076 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1077
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1078 static PurplePluginInfo *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1079 plugin_query(GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1080 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1081 return purple_plugin_info_new(
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1082 "id", "prpl-facebook",
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1083 "name", "Facebook Protocol",
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1084 "version", DISPLAY_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1085 "category", N_("Protocol"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1086 "summary", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1087 "description", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1088 "website", PURPLE_WEBSITE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1089 "abi-version", PURPLE_ABI_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1090 "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL |
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1091 PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1092 NULL
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1093 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1094 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1095
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1096 static gboolean
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1097 plugin_load(PurplePlugin *plugin, GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1098 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1099 facebook_protocol_register_type(plugin);
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1100 fb_protocol = purple_protocols_add(FACEBOOK_TYPE_PROTOCOL, error);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1101
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1102 if (fb_protocol == NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1103 return FALSE;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1104 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1105
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1106 fb_cmds_register();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1107 return TRUE;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1108 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1109
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1110 static gboolean
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1111 plugin_unload(PurplePlugin *plugin, GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1112 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1113 fb_cmds_unregister();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1114 return purple_protocols_remove(fb_protocol, error);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1115 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1116
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1117 PURPLE_PLUGIN_INIT(facebook, plugin_query, plugin_load, plugin_unload);

mercurial