libpurple/protocols/facebook/facebook.c

Sun, 05 Jul 2015 14:44:14 -0400

author
James Geboski <jgeboski@gmail.com>
date
Sun, 05 Jul 2015 14:44:14 -0400
branch
facebook
changeset 37284
53cb588d8760
parent 37283
38fdbcc84bcd
child 37286
6e3ee8e18697
permissions
-rw-r--r--

facebook: implemented kicking/leaving group chats

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"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
26 #include "plugins.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
27 #include "protocol.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
28 #include "protocols.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
29 #include "roomlist.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
30 #include "version.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
31
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
32 #include "api.h"
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
33 #include "cmds.h"
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
34 #include "data.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
35 #include "facebook.h"
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
36 #include "util.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
37
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
38 static GSList *fb_cmds = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
39 static PurpleProtocol *fb_protocol = NULL;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
40
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
41 static void
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
42 fb_cb_api_error(FbApi *api, GError *error, gpointer data);
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
43
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
44 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
45 fb_cb_api_auth(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
46 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
47 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
48 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
49
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
50 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
51
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
52 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
53 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
54 fb_api_contacts(api);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
55 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
56
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
57 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
58 fb_cb_api_connect(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
59 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
60 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
61 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
62
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
63 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
64
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
65 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
66 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
67 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
68
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
69 static void
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
70 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
71 gpointer data)
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
72 {
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
73 const gchar *csum;
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
74 const gchar *name;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
75 const gchar *str;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
76 FbDataIcon *icon = data;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
77 FbHttpParams *params;
37263
5fb3e4d02954 facebook: fixed potential segfault on HTTP error
James Geboski <jgeboski@gmail.com>
parents: 37258
diff changeset
78 GError *err = NULL;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
79 gsize size;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
80 guchar *idata;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
81 PurpleAccount *acct;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
82 PurpleHttpRequest *req;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
83
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
84 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
85 name = purple_buddy_get_name(icon->buddy);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
86
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
87 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
88 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
89 name, err->message);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
90 g_error_free(err);
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
91 return;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
92 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
93
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
94 req = purple_http_conn_get_request(con);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
95 str = purple_http_request_get_url(req);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
96 params = fb_http_params_new_parse(str, TRUE);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
97 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
98 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
99
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
100 idata = g_memdup(str, size);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
101 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
102 fb_http_params_free(params);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
103 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
104
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
105 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
106 fb_cb_api_contacts(FbApi *api, GSList *users, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
107 {
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
108 const gchar *alias;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
109 const gchar *csum;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
110 FbApiUser *user;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
111 FbData *fata = data;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
112 FbId muid;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
113 gchar uid[FB_ID_STRMAX];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
114 GSList *l;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
115 GValue val = G_VALUE_INIT;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
116 PurpleAccount *acct;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
117 PurpleBuddy *bdy;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
118 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
119 PurpleGroup *grp;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
120
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
121 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
122 acct = purple_connection_get_account(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
123 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
124 alias = purple_account_get_private_alias(acct);
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) {
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
147 bdy = purple_buddy_new(acct, uid, user->name);
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);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
149 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
150 fb_cb_data_icon);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
151 continue;
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
152 }
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
153
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
154 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
155
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
156 if (!purple_strequal(csum, user->csum)) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
157 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
158 fb_cb_data_icon);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
159 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
160 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
161
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
162 fb_data_icon_queue(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
163 purple_connection_update_progress(gc, _("Connecting"), 3, 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
164 fb_api_connect(api);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
165 }
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 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
168 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
169 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
170 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
171 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
172
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
173 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
174 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
175 error->message);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
176 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
177
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
178 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
179 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
180 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
181 FbApiMessage *msg;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
182 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
183 gchar tid[FB_ID_STRMAX];
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
184 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
185 gint id;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
186 GSList *l;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
187 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
188 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
189 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
190
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
191 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
192 acct = purple_connection_get_account(gc);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
193
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
194 for (l = msgs; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
195 msg = l->data;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
196 chat = NULL;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
197 FB_ID_TO_STR(msg->uid, uid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
198
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
199 if (msg->tid == 0) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
200 purple_serv_got_im(gc, uid, msg->text,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
201 PURPLE_MESSAGE_RECV,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
202 time(NULL));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
203 continue;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
204 }
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 FB_ID_TO_STR(msg->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
207 chat = purple_conversations_find_chat_with_account(tid, acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
208
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
209 if (chat != NULL) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
210 id = purple_chat_conversation_get_id(chat);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
211 purple_serv_got_chat_in(gc, id, uid,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
212 PURPLE_MESSAGE_RECV,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
213 msg->text, time(NULL));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
214 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
215 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
216 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
217
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
218 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
219 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
220 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
221 const gchar *statid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
222 FbApiPresence *pres;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
223 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
224 gchar uid[FB_ID_STRMAX];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
225 GSList *l;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
226 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
227 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
228 PurpleStatusPrimitive pstat;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
229
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
230 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
231 acct = purple_connection_get_account(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
232
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
233 for (l = press; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
234 pres = l->data;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
235
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
236 if (pres->active) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
237 pstat = PURPLE_STATUS_AVAILABLE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
238 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
239 pstat = PURPLE_STATUS_OFFLINE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
240 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
241
37271
5a13f12c6fbd facebook: fixed the setting of buddy statuses
James Geboski <jgeboski@gmail.com>
parents: 37263
diff changeset
242 FB_ID_TO_STR(pres->uid, uid);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
243 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
244 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
245 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
246 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
247
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
248 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
249 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
250 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
251 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
252 gchar sid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
253 GHashTable *table;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
254 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
255
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
256 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
257 FB_ID_TO_STR(tid, sid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
259 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
260 g_hash_table_insert(table, "name", g_strdup(sid));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
261 purple_serv_join_chat(gc, table);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
262 g_hash_table_destroy(table);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
263 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
264
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
265 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
266 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
267 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
268 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
269 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
270 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
271 gchar uid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
272 gint id;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
273 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
274 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
275 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
276
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
277 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
278 id = fb_data_get_chatid(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
279 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
280
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
281 chat = purple_serv_got_joined_chat(gc, id, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
282 purple_chat_conversation_set_topic(chat, NULL, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
283
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
284 for (l = thrd->users; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
285 user = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
286 FB_ID_TO_STR(user->uid, uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
287 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
288 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
289 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
290
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
291 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
292 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
293 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
294 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
295 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
296 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
297 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
298 GSList *m;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
299 GString *gstr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
300 FbApiThread *thrd;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
301 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
302 PurpleRoomlistRoom *room;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
303
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
304 list = fb_data_get_roomlist(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
305 gstr = g_string_new(NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
306
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
307 for (l = thrds; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
308 thrd = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
309 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
310 g_string_truncate(gstr, 0);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
311
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
312 for (m = thrd->users; m != NULL; m = m->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
313 user = m->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
314
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
315 if (gstr->len > 0) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
316 g_string_append(gstr, ", ");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
317 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
318
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
319 g_string_append(gstr, user->name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
320 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
321
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
322 room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
323 tid, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
324 purple_roomlist_room_add_field(list, room, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
325 purple_roomlist_room_add_field(list, room, gstr->str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
326 purple_roomlist_room_add(list, room);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
327 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
328
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
329 purple_roomlist_set_in_progress(list, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
330 g_string_free(gstr, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
331 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
332
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
333 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
334 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
335 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
336 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
337 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
338 PurpleConnection *gc;
37250
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 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
341 FB_ID_TO_STR(typg->uid, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
342
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
343 if (typg->state) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
344 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
345 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
346 purple_serv_got_typing_stopped(gc, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
347 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
348 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
349
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
350 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
351 fb_blist_chat_create(GSList *buddies, gpointer data)
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 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
354 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
355 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
356 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
357 gpointer mptr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
358 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
359 GSList *uids = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
360 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
361 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
362
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
363 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
364 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
365
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
366 if (g_slist_length(buddies) < 2) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
367 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
368 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
369 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
370 _("Failed to Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
371 _("At least two initial chat participants"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
372 " are required."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
373 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
374 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
375 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
376
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
377 for (l = buddies; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
378 name = purple_buddy_get_name(l->data);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
379 uid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
380 mptr = g_memdup(&uid, sizeof uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
381 uids = g_slist_prepend(uids, mptr);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
382 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
383
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
384 fb_api_thread_create(api, uids);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
385 g_slist_free_full(uids, g_free);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
386 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
387
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
388 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
389 fb_blist_chat_init(PurpleBlistNode *node, gpointer data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
390 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
391 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
392 GSList *select = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
393 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
394
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
395 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
396 return;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
397 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
398
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
399 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
400 select = g_slist_prepend(select, PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
401
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
402 fb_util_request_buddy(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
403 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
404 _("Initial Chat Participants"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
405 _("Select at least two initial participants."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
406 select, TRUE,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
407 G_CALLBACK(fb_blist_chat_create), NULL,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
408 fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
409 g_slist_free(select);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
410 }
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 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
413 fb_login(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
414 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
415 const gchar *pass;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
416 const gchar *user;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
417 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
418 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
419 PurpleConnection *gc;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
420
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
421 gc = purple_account_get_connection(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
422 //purple_connection_set_flags(gc, );
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
423
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
424 if (!purple_ssl_is_supported()) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
425 purple_connection_error(gc,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
426 PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
427 _("SSL support unavailable"));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
428 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
429 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
430
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
431 fata = fb_data_new(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
432 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
433 purple_connection_set_protocol_data(gc, fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
434
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
435 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
436 "auth",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
437 G_CALLBACK(fb_cb_api_auth),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
438 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
439 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
440 "connect",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
441 G_CALLBACK(fb_cb_api_connect),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
442 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
443 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
444 "contacts",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
445 G_CALLBACK(fb_cb_api_contacts),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
446 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
447 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
448 "error",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
449 G_CALLBACK(fb_cb_api_error),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
450 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
451 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
452 "message",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
453 G_CALLBACK(fb_cb_api_message),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
454 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
455 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
456 "presence",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
457 G_CALLBACK(fb_cb_api_presence),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
458 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
459 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
460 "thread-create",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
461 G_CALLBACK(fb_cb_api_thread_create),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
462 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
463 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
464 "thread-info",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
465 G_CALLBACK(fb_cb_api_thread_info),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
466 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
467 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
468 "thread-list",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
469 G_CALLBACK(fb_cb_api_thread_list),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
470 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
471 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
472 "typing",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
473 G_CALLBACK(fb_cb_api_typing),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
474 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
475
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
476 if (!fb_data_load(fata)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
477 user = purple_account_get_username(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
478 pass = purple_connection_get_password(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
479 purple_connection_update_progress(gc, _("Authenticating"),
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
480 1, 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
481 fb_api_auth(api, user, pass);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
482 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
483 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
484
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
485 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
486 fb_api_contacts(api);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
487 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
488
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
489 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
490 fb_close(PurpleConnection *gc)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
491 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
492 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
493 FbData *fata;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
494
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
495 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
496 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
497
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
498 fb_api_disconnect(api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
499 g_object_unref(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
500 purple_connection_set_protocol_data(gc, NULL);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
501 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
502
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
503 static GList *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
504 fb_status_types(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
505 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
506 PurpleStatusType *type;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
507 GList *types = NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
508
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
509 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
510 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
511 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
512
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
513 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
514 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
515 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
516
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
517 return types;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
518 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
519
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
520 static const char *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
521 fb_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
522 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
523 return "facebook";
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
524 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
525
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
526 static GList *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
527 fb_client_blist_node_menu(PurpleBlistNode *node)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
528 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
529 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
530 GList *acts = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
531 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
532 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
533 PurpleMenuAction *act;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
534
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
535 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
536 return NULL;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
537 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
538
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
539 acct = purple_buddy_get_account(PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
540 gc = purple_account_get_connection(acct);
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
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
543 act = purple_menu_action_new(_("Initiate _Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
544 PURPLE_CALLBACK(fb_blist_chat_init),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
545 fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
546 acts = g_list_prepend(acts, act);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
547
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
548 return g_list_reverse(acts);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
549 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
550
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
551 static gint
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
552 fb_im_send(PurpleConnection *gc, PurpleMessage *msg)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
553 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
554 const gchar *name;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
555 const gchar *text;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
556 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
557 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
558 FbId uid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
559
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
560 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
561 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
562
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
563 name = purple_message_get_recipient(msg);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
564 uid = FB_ID_FROM_STR(name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
565
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
566 text = purple_message_get_contents(msg);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
567 fb_api_message(api, uid, FALSE, text);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
568 return 1;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
569 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
570
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
571 static guint
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
572 fb_im_send_typing(PurpleConnection *gc, const gchar *name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
573 PurpleIMTypingState state)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
574 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
575 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
576 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
577 FbId uid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
578
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
579 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
580 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
581 uid = FB_ID_FROM_STR(name);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
582
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
583 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
584 return 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
585 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
586
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
587 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
588 fb_chat_join(PurpleConnection *gc, GHashTable *data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
589 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
590 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
591 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
592 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
593 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
594
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
595 name = g_hash_table_lookup(data, "name");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
596 g_return_if_fail(name != NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
597
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
598 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
599 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
600 tid = FB_ID_FROM_STR(name);
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 fb_api_thread_info(api, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
603 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
604
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
605 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
606 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
607 const gchar *who)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
608 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
609 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
610 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
611 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
612 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
613 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
614 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
615 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
616
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
617 if (!FB_ID_IS_STR(who)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
618 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
619 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
620 _("Invite Buddy Into Chat Room"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
621 _("Failed to Invite User"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
622 _("Invalid Facebook identifier."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
623 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
624 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
625 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
626
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
627 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
628 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
629 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
630
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
631 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
632 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
633 uid = FB_ID_FROM_STR(who);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
634
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
635 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
636 fb_api_thread_invite(api, tid, uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
637 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
638
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
639 static gint
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
640 fb_chat_send(PurpleConnection *gc, gint id, PurpleMessage *msg)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
641 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
642 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
643 const gchar *text;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
644 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
645 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
646 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
647 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
648 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
649
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
650 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
651 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
652 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
653 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
654
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
655 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
656 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
657
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
658 text = purple_message_get_contents(msg);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
659 fb_api_message(api, tid, TRUE, text);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
660
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
661 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
662 purple_serv_got_chat_in(gc, id, name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
663 purple_message_get_flags(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
664 purple_message_get_contents(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
665 time(NULL));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
666 return 0;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
667 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
668
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
669 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
670 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
671 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
672 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
673 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
674 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
675 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
676 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
677 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
678
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
679 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
680 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
681 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
682 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
683
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
684 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
685 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
686
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
687 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
688 purple_chat_conversation_set_topic(chat, name, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
689 fb_api_thread_topic(api, tid, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
690 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
691
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
692 static PurpleRoomlist *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
693 fb_roomlist_get_list(PurpleConnection *gc)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
694 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
695 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
696 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
697 GList *flds = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
698 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
699 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
700 PurpleRoomlistField *fld;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
701
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
702 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
703 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
704 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
705 list = purple_roomlist_new(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
706 fb_data_set_roomlist(fata, list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
707
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
708 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
709 _("Topic"), "topic", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
710 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
711
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
712 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
713 _("Users"), "users", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
714 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
715
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
716 flds = g_list_reverse(flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
717 purple_roomlist_set_fields(list, flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
718
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
719 fb_api_thread_list(api);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
720 return list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
721 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
722
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
723 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
724 fb_roomlist_cancel(PurpleRoomlist *list)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
725 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
726 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
727 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
728 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
729 PurpleRoomlist *cist;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
730
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
731 acct = purple_roomlist_get_account(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
732 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
733 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
734 cist = fb_data_get_roomlist(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
735
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
736 if (G_LIKELY(cist == list)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
737 fb_data_set_roomlist(fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
738 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
739
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
740 purple_roomlist_set_in_progress(list, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
741 g_object_unref(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
742 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
743
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
744 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
745 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
746 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
747 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
748 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
749 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
750 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
751 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
752 FbId uid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
753 GError *err = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
754 PurpleAccount *acct;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
755 PurpleBuddy *bdy;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
756 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
757 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
758
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
759 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
760 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
761
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
762 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
763 acct = purple_connection_get_account(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
764 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
765 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
766
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
767 if (err != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
768 *error = g_strdup_printf(_("%s."), err->message);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
769 g_error_free(err);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
770 return PURPLE_CMD_RET_FAILED;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
771 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
772
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
773 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
774 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
775
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
776 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
777 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
778
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
779 name = purple_buddy_get_name(bdy);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
780 uid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
781
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
782 purple_chat_conversation_remove_user(chat, name, NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
783 fb_api_thread_remove(api, tid, uid);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
784 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
785 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
786
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
787 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
788 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
789 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
790 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
791 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
792 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
793 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
794 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
795 gint id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
796 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
797 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
798
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
799 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
800 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
801
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
802 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
803 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
804 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
805
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
806 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
807 id = purple_chat_conversation_get_id(chat);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
808
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
809 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
810 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
811
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
812 purple_serv_got_chat_left(gc, id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
813 fb_api_thread_remove(api, tid, 0);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
814 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
815 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
816
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
817 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
818 facebook_protocol_init(PurpleProtocol *protocol)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
819 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
820 protocol->id = "prpl-facebook";
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
821 protocol->name = "Facebook";
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
822 protocol->options = OPT_PROTO_CHAT_TOPIC;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
823 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
824
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
825 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
826 facebook_protocol_class_init(PurpleProtocolClass *klass)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
827 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
828 klass->login = fb_login;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
829 klass->close = fb_close;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
830 klass->status_types = fb_status_types;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
831 klass->list_icon = fb_list_icon;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
832 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
833
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
834 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
835 facebook_protocol_client_iface_init(PurpleProtocolClientIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
836 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
837 iface->blist_node_menu = fb_client_blist_node_menu;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
838 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
839
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
840 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
841 facebook_protocol_server_iface_init(PurpleProtocolServerIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
842 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
843
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
844 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
845
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
846 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
847 facebook_protocol_im_iface_init(PurpleProtocolIMIface *iface)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
848 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
849 iface->send = fb_im_send;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
850 iface->send_typing = fb_im_send_typing;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
851 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
852
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
853 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
854 facebook_protocol_chat_iface_init(PurpleProtocolChatIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
855 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
856 iface->join = fb_chat_join;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
857 iface->invite = fb_chat_invite;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
858 iface->send = fb_chat_send;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
859 iface->set_topic = fb_chat_set_topic;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
860 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
861
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
862 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
863 facebook_protocol_privacy_iface_init(PurpleProtocolPrivacyIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
864 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
865
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
866 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
867
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
868 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
869 facebook_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
870 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
871 iface->get_list = fb_roomlist_get_list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
872 iface->cancel = fb_roomlist_cancel;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
873 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
874
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
875 PURPLE_DEFINE_TYPE_EXTENDED(
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
876 FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
877
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
878 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
879 facebook_protocol_client_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
880 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
881 facebook_protocol_server_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
882 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
883 facebook_protocol_im_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
884 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
885 facebook_protocol_chat_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
886 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
887 facebook_protocol_privacy_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
888 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
889 facebook_protocol_roomlist_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
890 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
891
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
892 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
893 fb_cmds_register(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
894 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
895 PurpleCmdId id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
896
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
897 static PurpleCmdFlag cflags =
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
898 PURPLE_CMD_FLAG_CHAT |
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
899 PURPLE_CMD_FLAG_PROTOCOL_ONLY;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
900
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
901 g_return_if_fail(fb_cmds == NULL);
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 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
904 fb_protocol->id, fb_cmd_kick,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
905 _("kick: Kick someone from the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
906 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
907 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
908
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
909 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
910 fb_protocol->id, fb_cmd_leave,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
911 _("leave: Leave the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
912 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
913 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
914 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
915
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
916 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
917 fb_cmds_unregister_free(gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
918 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
919 PurpleCmdId id = GPOINTER_TO_UINT(data);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
920 purple_cmd_unregister(id);
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
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
923 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
924 fb_cmds_unregister(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
925 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
926 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
927 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
928
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
929 static PurplePluginInfo *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
930 plugin_query(GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
931 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
932 return purple_plugin_info_new(
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
933 "id", "prpl-facebook",
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
934 "name", "Facebook Protocol",
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
935 "version", DISPLAY_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
936 "category", N_("Protocol"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
937 "summary", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
938 "description", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
939 "website", PURPLE_WEBSITE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
940 "abi-version", PURPLE_ABI_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
941 "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL |
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
942 PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
943 NULL
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
944 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
945 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
946
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
947 static gboolean
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
948 plugin_load(PurplePlugin *plugin, GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
949 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
950 facebook_protocol_register_type(plugin);
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
951 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
952
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
953 if (fb_protocol == NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
954 return FALSE;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
955 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
956
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
957 fb_cmds_register();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
958 return TRUE;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
959 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
960
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
961 static gboolean
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
962 plugin_unload(PurplePlugin *plugin, GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
963 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
964 fb_cmds_unregister();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
965 return purple_protocols_remove(fb_protocol, error);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
966 }
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 PURPLE_PLUGIN_INIT(facebook, plugin_query, plugin_load, plugin_unload);

mercurial