libpurple/protocols/facebook/facebook.c

Tue, 18 Aug 2015 00:04:50 -0400

author
James Geboski <jgeboski@gmail.com>
date
Tue, 18 Aug 2015 00:04:50 -0400
branch
facebook
changeset 37355
047c6f5d4392
parent 37351
914c79d327a9
child 37360
3734d8d9a905
permissions
-rw-r--r--

facebook: display thread URL for videos

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"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
25 #include "accountopt.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
26 #include "blistnode.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
27 #include "blistnodetypes.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
28 #include "buddyicon.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
29 #include "buddylist.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
30 #include "cmds.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
31 #include "connection.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
32 #include "conversation.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
33 #include "conversations.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
34 #include "conversationtypes.h"
37309
556eea7a45da facebook: merged local glibcompat.h into libpurple's
James Geboski <jgeboski@gmail.com>
parents: 37308
diff changeset
35 #include "glibcompat.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
36 #include "message.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
37 #include "notify.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
38 #include "plugins.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
39 #include "presence.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
40 #include "protocol.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
41 #include "protocols.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
42 #include "request.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
43 #include "roomlist.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
44 #include "server.h"
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
45 #include "signals.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
46 #include "sslconn.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
47 #include "status.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
48 #include "util.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
49 #include "version.h"
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
50
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
51 #include "api.h"
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
52 #include "data.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
53 #include "facebook.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
54 #include "http.h"
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
55 #include "util.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
56
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
57 static GSList *fb_cmds = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
58 static PurpleProtocol *fb_protocol = NULL;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
59
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
60 static void
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
61 fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
62
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
63 static PurpleGroup *
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
64 fb_get_group(gboolean friend)
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
65 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
66 PurpleBlistNode *n;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
67 PurpleBlistNode *node;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
68 PurpleGroup *grp;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
69
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
70 if (friend) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
71 return purple_blist_get_default_group();
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
72 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
73
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
74 grp = purple_blist_find_group(_("Facebook Non-Friends"));
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
75
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
76 if (G_UNLIKELY(grp == NULL)) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
77 grp = purple_group_new(_("Facebook Non-Friends"));
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
78 node = NULL;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
79
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
80 for (n = purple_blist_get_root(); n != NULL; n = n->next) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
81 node = n;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
82 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
83
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
84 /* Append to the end of the buddy list */
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
85 purple_blist_add_group(grp, node);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
86
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
87 node = PURPLE_BLIST_NODE(grp);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
88 purple_blist_node_set_transient(node, TRUE);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
89 purple_blist_node_set_bool(node, "collapsed", TRUE);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
90 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
91
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
92 return grp;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
93 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
94
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
95 static void
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
96 fb_buddy_add_nonfriend(PurpleAccount *acct, FbApiUser *user)
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
97 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
98 gchar uid[FB_ID_STRMAX];
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
99 PurpleBlistNode *node;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
100 PurpleBuddy *bdy;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
101 PurpleGroup *grp;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
102
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
103 FB_ID_TO_STR(user->uid, uid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
104 bdy = purple_buddy_new(acct, uid, NULL);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
105 grp = fb_get_group(FALSE);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
106 node = PURPLE_BLIST_NODE(bdy);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
107
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
108 purple_blist_node_set_transient(node, TRUE);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
109 purple_buddy_set_server_alias(bdy, user->name);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
110 purple_blist_add_buddy(bdy, NULL, grp, NULL);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
111 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
112
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
113 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
114 fb_cb_api_auth(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
115 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
116 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
117 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
118
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
119 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
120
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
121 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
122 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
123 fb_api_contacts(api);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
124 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
125
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
126 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
127 fb_cb_api_connect(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
128 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
129 FbData *fata = data;
37326
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
130 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
131 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
132
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
133 gc = fb_data_get_connection(fata);
37326
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
134 acct = purple_connection_get_account(gc);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
135
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
136 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
137 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED);
37326
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
138
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
139 if (purple_account_get_bool(acct, "show-unread", TRUE)) {
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
140 fb_api_unread(api);
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
141 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
142 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
143
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
144 static void
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
145 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
146 gpointer data)
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
147 {
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
148 const gchar *csum;
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
149 const gchar *name;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
150 const gchar *str;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
151 FbDataIcon *icon = data;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
152 FbHttpParams *params;
37263
5fb3e4d02954 facebook: fixed potential segfault on HTTP error
James Geboski <jgeboski@gmail.com>
parents: 37258
diff changeset
153 GError *err = NULL;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
154 gsize size;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
155 guchar *idata;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
156 PurpleAccount *acct;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
157 PurpleHttpRequest *req;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
158
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
159 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
160 name = purple_buddy_get_name(icon->buddy);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
161
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
162 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
163 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
164 name, err->message);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
165 g_error_free(err);
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
166 return;
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
167 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
168
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
169 req = purple_http_conn_get_request(con);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
170 str = purple_http_request_get_url(req);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
171 params = fb_http_params_new_parse(str, TRUE);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
172 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
173 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
174
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
175 idata = g_memdup(str, size);
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
176 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
177 fb_http_params_free(params);
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
178 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
179
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
180 static void
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
181 fb_cb_api_contact(FbApi *api, FbApiUser *user, gpointer data)
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
182 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
183 FbData *fata = data;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
184 gchar uid[FB_ID_STRMAX];
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
185 GSList *msgs;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
186 PurpleAccount *acct;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
187 PurpleConnection *gc;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
188
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
189 gc = fb_data_get_connection(fata);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
190 acct = purple_connection_get_account(gc);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
191 FB_ID_TO_STR(user->uid, uid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
192
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
193 if (purple_blist_find_buddy(acct, uid) == NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
194 fb_buddy_add_nonfriend(acct, user);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
195 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
196
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
197 msgs = fb_data_take_messages(fata, user->uid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
198
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
199 if (msgs != NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
200 fb_cb_api_messages(api, msgs, fata);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
201 g_slist_free_full(msgs, (GDestroyNotify) fb_api_message_free);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
202 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
203 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
204
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
205 static gboolean
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
206 fb_cb_sync_contacts(gpointer data)
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
207 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
208 FbApi *api;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
209 FbData *fata = data;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
210
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
211 api = fb_data_get_api(fata);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
212 fb_data_clear_timeout(fata, "sync-contacts", FALSE);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
213 fb_api_contacts(api);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
214 return FALSE;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
215 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
216
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
217 static void
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
218 fb_cb_api_contacts(FbApi *api, GSList *users, gboolean complete, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
219 {
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
220 const gchar *alias;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
221 const gchar *csum;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
222 FbApiUser *user;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
223 FbData *fata = data;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
224 FbId muid;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
225 gchar uid[FB_ID_STRMAX];
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
226 gint sync;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
227 gpointer bata;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
228 GSList *buddies;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
229 GSList *l;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
230 GValue val = G_VALUE_INIT;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
231 PurpleAccount *acct;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
232 PurpleBuddy *bdy;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
233 PurpleConnection *gc;
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
234 PurpleConnectionState state;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
235 PurpleGroup *grp;
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
236 PurpleGroup *grpn;
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
237 PurpleStatus *status;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
238 PurpleStatusPrimitive pstat;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
239 PurpleStatusType *type;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
240
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
241 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
242 acct = purple_connection_get_account(gc);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
243 grp = fb_get_group(TRUE);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
244 grpn = fb_get_group(FALSE);
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
245 alias = purple_account_get_private_alias(acct);
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
246 state = purple_connection_get_state(gc);
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
247
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
248 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
249 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
250 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
251 g_value_unset(&val);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
252
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
253 for (l = users; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
254 user = l->data;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
255 FB_ID_TO_STR(user->uid, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
256
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
257 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
258 if (G_UNLIKELY(alias != NULL)) {
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
259 continue;
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
260 }
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
261
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
262 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
263 continue;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
264 }
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
265
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
266 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
267
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
268 if (purple_buddy_get_group(bdy) == grpn) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
269 purple_blist_remove_buddy(bdy);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
270 bdy = NULL;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
271 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
272
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
273 if (bdy == NULL) {
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
274 bdy = purple_buddy_new(acct, uid, NULL);
37256
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
275 purple_blist_add_buddy(bdy, NULL, grp, NULL);
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
276 }
36e822e078c8 facebook: only set buddy icons, not account icons
James Geboski <jgeboski@gmail.com>
parents: 37255
diff changeset
277
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
278 purple_buddy_set_protocol_data(bdy, GINT_TO_POINTER(TRUE));
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
279 purple_buddy_set_server_alias(bdy, user->name);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
280 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
281
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
282 if (!purple_strequal(csum, user->csum)) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
283 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
284 fb_cb_data_icon);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
285 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
286 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
287
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37275
diff changeset
288 fb_data_icon_queue(fata);
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
289
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
290 if (!complete) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
291 return;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
292 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
293
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
294 buddies = purple_blist_find_buddies(acct, NULL);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
295
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
296 while (buddies != NULL) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
297 bdy = buddies->data;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
298 bata = purple_buddy_get_protocol_data(bdy);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
299 buddies = g_slist_delete_link(buddies, buddies);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
300
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
301 if (GPOINTER_TO_INT(bata)) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
302 purple_buddy_set_protocol_data(bdy, NULL);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
303 } else if (purple_buddy_get_group(bdy) != grpn) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
304 purple_blist_remove_buddy(bdy);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
305 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
306 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
307
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
308 if (state != PURPLE_CONNECTION_CONNECTED) {
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
309 status = purple_account_get_active_status(acct);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
310 type = purple_status_get_status_type(status);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
311 pstat = purple_status_type_get_primitive(type);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
312
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
313 purple_connection_update_progress(gc, _("Connecting"), 3, 4);
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
314 fb_api_connect(api, pstat == PURPLE_STATUS_INVISIBLE);
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
315 }
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
316
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
317 sync = purple_account_get_int(acct, "sync-interval", 30);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
318
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
319 if (sync < 5) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
320 purple_account_set_int(acct, "sync-interval", 5);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
321 sync = 5;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
322 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
323
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
324 sync *= 60 * 1000;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
325 fb_data_add_timeout(fata, "sync-contacts", sync, fb_cb_sync_contacts,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
326 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
327 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
328
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
329 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
330 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
331 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
332 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
333 PurpleConnection *gc;
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
334 PurpleConnectionError errc;
37293
dc35ba3e7fac facebook: fixed all errors being marked as fatal
James Geboski <jgeboski@gmail.com>
parents: 37292
diff changeset
335
37311
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
336 gc = fb_data_get_connection(fata);
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
337
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
338 if (error->domain == FB_MQTT_SSL_ERROR) {
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
339 purple_connection_ssl_error(gc, error->code);
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
340 return;
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
341 }
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
342
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
343 if ((error->domain == FB_HTTP_ERROR) &&
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
344 (error->code >= 400) &&
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
345 (error->code <= 500))
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
346 {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
347 errc = PURPLE_CONNECTION_ERROR_OTHER_ERROR;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
348 } else if (g_error_matches(error, FB_API_ERROR, FB_API_ERROR_AUTH)) {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
349 errc = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
350 } else {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
351 errc = PURPLE_CONNECTION_ERROR_NETWORK_ERROR;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
352 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
353
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
354 purple_connection_error(gc, errc, error->message);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
355 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
356
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
357 static void
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
358 fb_cb_api_events(FbApi *api, GSList *events, gpointer data)
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
359 {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
360 FbData *fata = data;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
361 FbApiEvent *event;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
362 gchar uid[FB_ID_STRMAX];
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
363 gchar tid[FB_ID_STRMAX];
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
364 GHashTable *fetch;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
365 GHashTableIter iter;
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
366 GSList *l;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
367 PurpleAccount *acct;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
368 PurpleChatConversation *chat;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
369 PurpleConnection *gc;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
370
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
371 gc = fb_data_get_connection(fata);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
372 acct = purple_connection_get_account(gc);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
373 fetch = g_hash_table_new(fb_id_hash, fb_id_equal);
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
374
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
375 for (l = events; l != NULL; l = l->next) {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
376 event = l->data;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
377
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
378 FB_ID_TO_STR(event->tid, tid);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
379 chat = purple_conversations_find_chat_with_account(tid, acct);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
380
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
381 if (chat == NULL) {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
382 continue;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
383 }
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
384
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
385 FB_ID_TO_STR(event->uid, uid);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
386
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
387 switch (event->type) {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
388 case FB_API_EVENT_TYPE_THREAD_USER_ADDED:
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
389 if (purple_blist_find_buddy(acct, uid) == NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
390 g_hash_table_insert(fetch, &event->uid, event);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
391 break;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
392 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
393
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
394 purple_chat_conversation_add_user(chat, uid, NULL, 0,
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
395 TRUE);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
396 break;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
397
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
398 case FB_API_EVENT_TYPE_THREAD_USER_REMOVED:
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
399 purple_chat_conversation_remove_user(chat, uid, NULL);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
400 break;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
401 }
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
402 }
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
403
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
404 g_hash_table_iter_init(&iter, fetch);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
405
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
406 while (g_hash_table_iter_next(&iter, NULL, (gpointer) &event)) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
407 fb_api_thread(api, event->tid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
408 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
409
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
410 g_hash_table_destroy(fetch);
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
411 }
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
412
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
413 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
414 fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
415 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
416 FbApiMessage *msg;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
417 FbData *fata = data;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
418 gboolean mark;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
419 gboolean open;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
420 gchar *html;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
421 gchar tid[FB_ID_STRMAX];
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
422 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
423 gint id;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
424 GSList *l;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
425 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
426 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
427 PurpleConnection *gc;
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
428 PurpleMessageFlags flags;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
429
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
430 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
431 acct = purple_connection_get_account(gc);
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
432 mark = purple_account_get_bool(acct, "mark-read", TRUE);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
433 open = purple_account_get_bool(acct, "group-chat-open", TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
434
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
435 for (l = msgs; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
436 msg = l->data;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
437 html = purple_markup_escape_text(msg->text, -1);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
438 FB_ID_TO_STR(msg->uid, uid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
439
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
440 if (purple_blist_find_buddy(acct, uid) == NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
441 msg = fb_api_message_dup(msg, FALSE);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
442 msg->text = html;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
443 fb_data_add_message(fata, msg);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
444 fb_api_contact(api, msg->uid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
445 continue;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
446 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
447
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
448 flags = (msg->isself) ? PURPLE_MESSAGE_SEND
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
449 : PURPLE_MESSAGE_RECV;
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
450
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
451 if (msg->tid == 0) {
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
452 if (mark && !msg->isself) {
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
453 fb_data_set_unread(fata, msg->uid, TRUE);
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
454 }
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
455
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
456 fb_util_serv_got_im(gc, uid, html, flags, time(NULL));
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
457 g_free(html);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
458 continue;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
459 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
460
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
461 FB_ID_TO_STR(msg->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
462 chat = purple_conversations_find_chat_with_account(tid, acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
463
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
464 if (chat == NULL) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
465 if (!open) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
466 g_free(html);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
467 continue;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
468 }
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
469
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
470 id = fb_id_hash(&msg->tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
471 purple_serv_got_joined_chat(gc, id, tid);
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
472 fb_api_thread(api, msg->tid);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
473 } else {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
474 id = purple_chat_conversation_get_id(chat);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
475 }
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
476
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
477 if (mark && !msg->isself) {
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
478 fb_data_set_unread(fata, msg->tid, TRUE);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
479 }
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
480
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
481 fb_util_serv_got_chat_in(gc, id, uid, html, flags, time(NULL));
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
482 g_free(html);
37250
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
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
486 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
487 fb_cb_api_presences(FbApi *api, GSList *press, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
488 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
489 const gchar *statid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
490 FbApiPresence *pres;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
491 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
492 gchar uid[FB_ID_STRMAX];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
493 GSList *l;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
494 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
495 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
496 PurpleStatusPrimitive pstat;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
497
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
498 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
499 acct = purple_connection_get_account(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
500
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
501 for (l = press; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
502 pres = l->data;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
503
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
504 if (pres->active) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
505 pstat = PURPLE_STATUS_AVAILABLE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
506 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
507 pstat = PURPLE_STATUS_OFFLINE;
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
37271
5a13f12c6fbd facebook: fixed the setting of buddy statuses
James Geboski <jgeboski@gmail.com>
parents: 37263
diff changeset
510 FB_ID_TO_STR(pres->uid, uid);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
511 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
512 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
513 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
514 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
515
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
516 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
517 fb_cb_api_thread(FbApi *api, FbApiThread *thrd, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
518 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
519 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
520 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
521 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
522 gchar uid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
523 gint id;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
524 GSList *l;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
525 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
526 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
527 PurpleConnection *gc;
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 gc = fb_data_get_connection(fata);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
530 acct = purple_connection_get_account(gc);
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
531 id = fb_id_hash(&thrd->tid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
532 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
533
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
534 chat = purple_conversations_find_chat_with_account(tid, acct);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
535
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
536 if (chat == NULL) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
537 chat = purple_serv_got_joined_chat(gc, id, tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
538 }
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
539
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
540 purple_chat_conversation_set_topic(chat, NULL, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
541
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
542 for (l = thrd->users; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
543 user = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
544 FB_ID_TO_STR(user->uid, uid);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
545
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
546 if (purple_chat_conversation_has_user(chat, uid)) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
547 continue;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
548 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
549
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
550 if (purple_blist_find_buddy(acct, uid) == NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
551 fb_buddy_add_nonfriend(acct, user);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
552 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
553
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
554 purple_chat_conversation_add_user(chat, uid, NULL, 0, TRUE);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
555 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
556 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
557
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
558 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
559 fb_cb_api_thread_create(FbApi *api, FbId tid, gpointer data)
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
560 {
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
561 FbData *fata = data;
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
562 gchar sid[FB_ID_STRMAX];
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
563 GHashTable *table;
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
564 PurpleConnection *gc;
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
565
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
566 gc = fb_data_get_connection(fata);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
567 FB_ID_TO_STR(tid, sid);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
568
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
569 table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
570 g_hash_table_insert(table, "name", g_strdup(sid));
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
571 purple_serv_join_chat(gc, table);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
572 g_hash_table_destroy(table);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
573 }
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
574
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
575 static void
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
576 fb_cb_api_threads(FbApi *api, GSList *thrds, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
577 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
578 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
579 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
580 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
581 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
582 GSList *m;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
583 GString *gstr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
584 FbApiThread *thrd;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
585 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
586 PurpleRoomlistRoom *room;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
587
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
588 list = fb_data_get_roomlist(fata);
37323
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
589
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
590 if (G_UNLIKELY(list == NULL)) {
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
591 return;
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
592 }
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
593
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
594 gstr = g_string_new(NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
595
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
596 for (l = thrds; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
597 thrd = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
598 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
599 g_string_truncate(gstr, 0);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
600
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
601 for (m = thrd->users; m != NULL; m = m->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
602 user = m->data;
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 if (gstr->len > 0) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
605 g_string_append(gstr, ", ");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
606 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
607
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
608 g_string_append(gstr, user->name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
609 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
610
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
611 room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
612 tid, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
613 purple_roomlist_room_add_field(list, room, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
614 purple_roomlist_room_add_field(list, room, gstr->str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
615 purple_roomlist_room_add(list, room);
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
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
618 purple_roomlist_set_in_progress(list, FALSE);
37323
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
619 fb_data_set_roomlist(fata, NULL);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
620 g_string_free(gstr, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
621 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
622
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
623 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
624 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
625 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
626 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
627 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
628 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
629
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
630 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
631 FB_ID_TO_STR(typg->uid, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
632
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
633 if (typg->state) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
634 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
635 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
636 purple_serv_got_typing_stopped(gc, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
637 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
638 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
639
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
640 static gboolean
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
641 fb_cb_conv_read(gpointer data)
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
642 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
643 const gchar *name;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
644 FbApi *api;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
645 FbData *fata;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
646 FbId id;
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
647 gchar *tname;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
648 PurpleConnection *gc;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
649 PurpleConversation *conv = data;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
650
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
651 gc = purple_conversation_get_connection(conv);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
652 fata = purple_connection_get_protocol_data(gc);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
653 name = purple_conversation_get_name(conv);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
654 id = FB_ID_FROM_STR(name);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
655
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
656 tname = g_strconcat("conv-read-", name, NULL);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
657 fb_data_clear_timeout(fata, tname, FALSE);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
658 g_free(tname);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
659
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
660 if (!purple_conversation_has_focus(conv) ||
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
661 !fb_data_get_unread(fata, id))
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
662 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
663 return FALSE;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
664 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
665
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
666 api = fb_data_get_api(fata);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
667 fb_data_set_unread(fata, id, FALSE);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
668 fb_api_read(api, id, PURPLE_IS_CHAT_CONVERSATION(conv));
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
669 return FALSE;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
670 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
671
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
672 static void
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
673 fb_cb_conv_updated(PurpleConversation *conv, PurpleConversationUpdateType type,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
674 gpointer data)
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
675 {
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
676 const gchar *name;
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
677 const gchar *pid;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
678 FbData *fata = data;
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
679 gchar *tname;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
680 PurpleAccount *acct;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
681
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
682 acct = purple_conversation_get_account(conv);
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
683 pid = purple_account_get_protocol_id(acct);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
684
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
685 if ((type == PURPLE_CONVERSATION_UPDATE_UNSEEN) &&
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
686 purple_strequal(pid, FB_PROTOCOL_ID) &&
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
687 purple_account_get_bool(acct, "mark-read", TRUE))
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
688 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
689 /* Use event loop for purple_conversation_has_focus() */
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
690 name = purple_conversation_get_name(conv);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
691 tname = g_strconcat("conv-read-", name, NULL);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
692 fb_data_add_timeout(fata, tname, 1, fb_cb_conv_read, conv);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
693 g_free(tname);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
694 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
695 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
696
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
697 static void
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
698 fb_cb_conv_deleting(PurpleConversation *conv, gpointer data)
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
699 {
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
700 const gchar *name;
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
701 const gchar *pid;
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
702 FbData *fata = data;
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
703 gchar *tname;
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
704 PurpleAccount *acct;
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
705
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
706 acct = purple_conversation_get_account(conv);
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
707 pid = purple_account_get_protocol_id(acct);
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
708
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
709 if (!purple_strequal(pid, FB_PROTOCOL_ID)) {
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
710 return;
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
711 }
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
712
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
713 name = purple_conversation_get_name(conv);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
714 tname = g_strconcat("conv-read-", name, NULL);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
715 fb_data_clear_timeout(fata, tname, TRUE);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
716 g_free(tname);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
717 }
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
718
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
719 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
720 fb_blist_chat_create(GSList *buddies, gpointer data)
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 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
723 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
724 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
725 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
726 gpointer mptr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
727 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
728 GSList *uids = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
729 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
730 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
731
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
732 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
733 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
734
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
735 if (g_slist_length(buddies) < 2) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
736 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
737 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
738 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
739 _("Failed to Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
740 _("At least two initial chat participants"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
741 " are required."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
742 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
743 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
744 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
745
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
746 for (l = buddies; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
747 name = purple_buddy_get_name(l->data);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
748 uid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
749 mptr = g_memdup(&uid, sizeof uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
750 uids = g_slist_prepend(uids, mptr);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
751 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
752
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
753 fb_api_thread_create(api, uids);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
754 g_slist_free_full(uids, g_free);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
755 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
756
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
757 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
758 fb_blist_chat_init(PurpleBlistNode *node, gpointer data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
759 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
760 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
761 GSList *select = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
762 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
763
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
764 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
765 return;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
766 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
767
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
768 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
769 select = g_slist_prepend(select, PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
770
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
771 fb_util_request_buddy(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
772 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
773 _("Initial Chat Participants"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
774 _("Select at least two initial participants."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
775 select, TRUE,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
776 G_CALLBACK(fb_blist_chat_create), NULL,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
777 fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
778 g_slist_free(select);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
779 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
780
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
781 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
782 fb_login(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
783 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
784 const gchar *pass;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
785 const gchar *user;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
786 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
787 FbData *fata;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
788 gpointer convh;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
789 PurpleConnection *gc;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
790
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
791 gc = purple_account_get_connection(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
792 //purple_connection_set_flags(gc, );
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
793
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
794 if (!purple_ssl_is_supported()) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
795 purple_connection_error(gc,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
796 PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
797 _("SSL support unavailable"));
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
798 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
799 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
800
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
801 fata = fb_data_new(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
802 api = fb_data_get_api(fata);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
803 convh = purple_conversations_get_handle();
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
804 purple_connection_set_protocol_data(gc, fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
805
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
806 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
807 "auth",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
808 G_CALLBACK(fb_cb_api_auth),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
809 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
810 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
811 "connect",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
812 G_CALLBACK(fb_cb_api_connect),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
813 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
814 g_signal_connect(api,
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
815 "contact",
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
816 G_CALLBACK(fb_cb_api_contact),
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
817 fata);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
818 g_signal_connect(api,
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
819 "contacts",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
820 G_CALLBACK(fb_cb_api_contacts),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
821 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
822 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
823 "error",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
824 G_CALLBACK(fb_cb_api_error),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
825 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
826 g_signal_connect(api,
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
827 "events",
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
828 G_CALLBACK(fb_cb_api_events),
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
829 fata);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
830 g_signal_connect(api,
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
831 "messages",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
832 G_CALLBACK(fb_cb_api_messages),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
833 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
834 g_signal_connect(api,
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
835 "presences",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
836 G_CALLBACK(fb_cb_api_presences),
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
837 fata);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
838 g_signal_connect(api,
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
839 "thread",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
840 G_CALLBACK(fb_cb_api_thread),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
841 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
842 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
843 "thread-create",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
844 G_CALLBACK(fb_cb_api_thread_create),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
845 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
846 g_signal_connect(api,
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
847 "threads",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
848 G_CALLBACK(fb_cb_api_threads),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
849 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
850 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
851 "typing",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
852 G_CALLBACK(fb_cb_api_typing),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
853 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
854
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
855 purple_signal_connect(convh,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
856 "conversation-updated",
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
857 gc,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
858 G_CALLBACK(fb_cb_conv_updated),
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
859 fata);
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
860 purple_signal_connect(convh,
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
861 "deleting-conversation",
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
862 gc,
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
863 G_CALLBACK(fb_cb_conv_deleting),
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
864 fata);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
865
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
866 if (!fb_data_load(fata)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
867 user = purple_account_get_username(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
868 pass = purple_connection_get_password(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
869 purple_connection_update_progress(gc, _("Authenticating"),
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
870 1, 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
871 fb_api_auth(api, user, pass);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
872 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
873 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
874
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
875 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
876 fb_api_contacts(api);
37249
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
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
879 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
880 fb_close(PurpleConnection *gc)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
881 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
882 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
883 FbData *fata;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
884
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
885 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
886 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
887
37288
bd9cacc05e09 facebook: ensure updated API settings are saved
James Geboski <jgeboski@gmail.com>
parents: 37286
diff changeset
888 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
889 fb_api_disconnect(api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
890 g_object_unref(fata);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
891
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
892 purple_connection_set_protocol_data(gc, NULL);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
893 purple_signals_disconnect_by_handle(gc);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
894 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
895
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
896 static GList *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
897 fb_status_types(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
898 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
899 PurpleStatusType *type;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
900 GList *types = NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
901
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
902 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
903 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
904 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
905
37303
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
906 /* Just a NULL state (as of now) for compatibility */
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
907 type = purple_status_type_new(PURPLE_STATUS_AWAY,
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
908 NULL, NULL, TRUE);
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
909 types = g_list_prepend(types, type);
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
910
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
911 type = purple_status_type_new(PURPLE_STATUS_INVISIBLE,
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
912 NULL, NULL, TRUE);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
913 types = g_list_prepend(types, type);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
914
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
915 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
916 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
917 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
918
37303
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
919 return g_list_reverse(types);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
920 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
921
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
922 static const char *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
923 fb_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
924 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
925 return "facebook";
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
926 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
927
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
928 static void
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
929 fb_client_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *info,
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
930 gboolean full)
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
931 {
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
932 const gchar *name;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
933 PurplePresence *pres;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
934 PurpleStatus *status;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
935
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
936 pres = purple_buddy_get_presence(buddy);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
937 status = purple_presence_get_active_status(pres);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
938
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
939 if (!PURPLE_BUDDY_IS_ONLINE(buddy)) {
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
940 /* Prevent doubles statues for Offline buddies */
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
941 /* See: pidgin_get_tooltip_text() in gtkblist.c */
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
942 purple_notify_user_info_remove_last_item(info);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
943 }
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
944
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
945 name = purple_status_get_name(status);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
946 purple_notify_user_info_add_pair_plaintext(info, _("Status"), name);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
947 }
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
948
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
949 static GList *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
950 fb_client_blist_node_menu(PurpleBlistNode *node)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
951 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
952 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
953 GList *acts = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
954 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
955 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
956 PurpleMenuAction *act;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
957
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
958 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
959 return NULL;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
960 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
961
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
962 acct = purple_buddy_get_account(PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
963 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
964 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
965
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
966 act = purple_menu_action_new(_("Initiate _Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
967 PURPLE_CALLBACK(fb_blist_chat_init),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
968 fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
969 acts = g_list_prepend(acts, act);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
970
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
971 return g_list_reverse(acts);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
972 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
973
37294
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
974 static gboolean
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
975 fb_client_offline_message(const PurpleBuddy *buddy)
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
976 {
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
977 return TRUE;
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
978 }
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
979
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
980 static void
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
981 fb_server_set_status(PurpleAccount *acct, PurpleStatus *status)
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
982 {
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
983 FbApi *api;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
984 FbData *fata;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
985 gboolean invis;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
986 PurpleConnection *gc;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
987 PurpleStatusPrimitive pstat;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
988 PurpleStatusType *type;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
989
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
990 gc = purple_account_get_connection(acct);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
991 fata = purple_connection_get_protocol_data(gc);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
992 api = fb_data_get_api(fata);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
993
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
994 type = purple_status_get_status_type(status);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
995 pstat = purple_status_type_get_primitive(type);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
996 invis = fb_api_is_invisible(api);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
997
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
998 if ((pstat == PURPLE_STATUS_INVISIBLE) && !invis) {
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
999 fb_api_connect(api, TRUE);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1000 } else if ((pstat != PURPLE_STATUS_OFFLINE) && invis) {
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1001 fb_api_connect(api, FALSE);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1002 }
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1003 }
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1004
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1005 static gint
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1006 fb_im_send(PurpleConnection *gc, PurpleMessage *msg)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1007 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1008 const gchar *name;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1009 const gchar *text;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1010 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1011 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1012 FbId uid;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1013 gchar *sext;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1014
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1015 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1016 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1017
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1018 name = purple_message_get_recipient(msg);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1019 uid = FB_ID_FROM_STR(name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1020
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1021 text = purple_message_get_contents(msg);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1022 sext = purple_markup_strip_html(text);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1023 fb_api_message(api, uid, FALSE, sext);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1024 g_free(sext);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1025 return 1;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1026 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1027
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1028 static guint
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1029 fb_im_send_typing(PurpleConnection *gc, const gchar *name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1030 PurpleIMTypingState state)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1031 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1032 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1033 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1034 FbId uid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1035
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1036 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1037 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1038 uid = FB_ID_FROM_STR(name);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1039
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1040 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
1041 return 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1042 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1043
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1044 static GList *
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1045 fb_chat_info()
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1046 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1047 GList *pces = NULL;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1048 PurpleProtocolChatEntry *pce;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1049
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1050 pce = g_new0(PurpleProtocolChatEntry, 1);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1051 pce->label = _("Chat _Name:");
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1052 pce->identifier = "name";
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1053 pce->required = TRUE;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1054 pces = g_list_prepend(pces, pce);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1055
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1056 return g_list_reverse(pces);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1057 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1058
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1059 static GHashTable *
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1060 fb_chat_info_defaults(PurpleConnection *gc, const gchar *name)
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1061 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1062 GHashTable *data;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1063
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1064 data = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1065 g_hash_table_insert(data, "name", g_strdup(name));
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1066
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1067 return data;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1068 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1069
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1070 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1071 fb_chat_join(PurpleConnection *gc, GHashTable *data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1072 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1073 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1074 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1075 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1076 FbId tid;
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1077 gint id;
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1078 PurpleChatConversation *chat;
37349
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1079 PurpleRequestCommonParameters *cpar;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1080
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1081 name = g_hash_table_lookup(data, "name");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1082 g_return_if_fail(name != NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1083
37349
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1084 if (!FB_ID_IS_STR(name)) {
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1085 cpar = purple_request_cpar_from_connection(gc);
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1086 purple_notify_error(gc,
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1087 _("Join a Chat"),
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1088 _("Failed to Join Chat"),
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1089 _("Invalid Facebook identifier."),
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1090 cpar);
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1091 return;
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1092 }
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1093
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1094 tid = FB_ID_FROM_STR(name);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1095 id = fb_id_hash(&tid);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1096 chat = purple_conversations_find_chat(gc, id);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1097
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1098 if (chat != NULL) {
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1099 purple_conversation_present(PURPLE_CONVERSATION(chat));
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1100 return;
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1101 }
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1102
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1103 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1104 api = fb_data_get_api(fata);
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1105 fb_api_thread(api, tid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1106 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1107
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1108 static gchar *
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1109 fb_chat_get_name(GHashTable *data)
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1110 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1111 const gchar *name;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1112
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1113 name = g_hash_table_lookup(data, "name");
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1114 g_return_val_if_fail(name != NULL, NULL);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1115
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1116 return g_strdup(name);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1117 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1118
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1119 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1120 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
1121 const gchar *who)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1122 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1123 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1124 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1125 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1126 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1127 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1128 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1129 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1130
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1131 if (!FB_ID_IS_STR(who)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1132 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1133 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1134 _("Invite Buddy Into Chat Room"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1135 _("Failed to Invite User"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1136 _("Invalid Facebook identifier."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1137 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1138 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1139 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1140
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1141 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1142 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1143 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1144
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1145 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1146 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1147 uid = FB_ID_FROM_STR(who);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1148
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1149 fb_api_thread_invite(api, tid, uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1150 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1151
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1152 static gint
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1153 fb_chat_send(PurpleConnection *gc, gint id, PurpleMessage *msg)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1154 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1155 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1156 const gchar *text;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1157 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1158 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1159 FbId tid;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1160 gchar *sext;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1161 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1162 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1163
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1164 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1165 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1166 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1167 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1168
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1169 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1170 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1171
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1172 text = purple_message_get_contents(msg);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1173 sext = purple_markup_strip_html(text);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1174 fb_api_message(api, tid, TRUE, sext);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1175 g_free(sext);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1176
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1177 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1178 purple_serv_got_chat_in(gc, id, name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1179 purple_message_get_flags(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1180 purple_message_get_contents(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1181 time(NULL));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1182 return 0;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1183 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1184
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1185 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1186 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
1187 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1188 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1189 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1190 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1191 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1192 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1193 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1194
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1195 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1196 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1197 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1198 chat = purple_conversations_find_chat(gc, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1199
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1200 name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1201 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1202
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1203 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1204 purple_chat_conversation_set_topic(chat, name, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1205 fb_api_thread_topic(api, tid, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1206 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1207
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1208 static PurpleRoomlist *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1209 fb_roomlist_get_list(PurpleConnection *gc)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1210 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1211 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1212 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1213 GList *flds = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1214 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1215 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1216 PurpleRoomlistField *fld;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1217
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1218 fata = purple_connection_get_protocol_data(gc);
37323
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
1219 list = fb_data_get_roomlist(fata);
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
1220 g_return_val_if_fail(list == NULL, NULL);
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
1221
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1222 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1223 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1224 list = purple_roomlist_new(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1225 fb_data_set_roomlist(fata, list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1226
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1227 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1228 _("Topic"), "topic", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1229 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1230
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1231 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1232 _("Users"), "users", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1233 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1234
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1235 flds = g_list_reverse(flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1236 purple_roomlist_set_fields(list, flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1237
37323
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
1238 purple_roomlist_set_in_progress(list, TRUE);
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1239 fb_api_threads(api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1240 return list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1241 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1242
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1243 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1244 fb_roomlist_cancel(PurpleRoomlist *list)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1245 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1246 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1247 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1248 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1249 PurpleRoomlist *cist;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1250
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1251 acct = purple_roomlist_get_account(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1252 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1253 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1254 cist = fb_data_get_roomlist(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1255
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1256 if (G_LIKELY(cist == list)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1257 fb_data_set_roomlist(fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1258 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1259
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1260 purple_roomlist_set_in_progress(list, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1261 g_object_unref(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1262 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1263
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1264 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1265 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
1266 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1267 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1268 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1269 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1270 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1271 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1272 FbId uid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1273 GError *err = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1274 PurpleAccount *acct;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1275 PurpleBuddy *bdy;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1276 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1277 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1278
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1279 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
1280 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1281
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1282 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1283 acct = purple_connection_get_account(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1284 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1285 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
1286
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1287 if (err != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1288 *error = g_strdup_printf(_("%s."), err->message);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1289 g_error_free(err);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1290 return PURPLE_CMD_RET_FAILED;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1291 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1292
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1293 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1294 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1295
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1296 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1297 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1298
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1299 name = purple_buddy_get_name(bdy);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1300 uid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1301
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1302 fb_api_thread_remove(api, tid, uid);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1303 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1304 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1305
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1306 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1307 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
1308 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1309 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1310 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1311 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1312 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1313 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1314 gint id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1315 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1316 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1317
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1318 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
1319 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1320
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1321 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1322 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1323 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1324
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1325 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1326 id = purple_chat_conversation_get_id(chat);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1327
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1328 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1329 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1330
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1331 purple_serv_got_chat_left(gc, id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1332 fb_api_thread_remove(api, tid, 0);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1333 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1334 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1335
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1336 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1337 facebook_protocol_init(PurpleProtocol *protocol)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1338 {
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1339 GList *opts = NULL;
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1340 PurpleAccountOption *opt;
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1341
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
1342 protocol->id = FB_PROTOCOL_ID;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1343 protocol->name = "Facebook";
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1344 protocol->options = OPT_PROTO_CHAT_TOPIC;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1345
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
1346 opt = purple_account_option_int_new(_("Buddy list sync interval"),
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
1347 "sync-interval", 30);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
1348 opts = g_list_prepend(opts, opt);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
1349
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1350 opt = purple_account_option_bool_new(_("Mark messages as read"),
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1351 "mark-read", TRUE);
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1352 opts = g_list_prepend(opts, opt);
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
1353
37326
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
1354 opt = purple_account_option_bool_new(_("Show unread messages"),
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
1355 "show-unread", TRUE);
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
1356 opts = g_list_prepend(opts, opt);
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
1357
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
1358 opt = purple_account_option_bool_new(_("Open new group chats with "
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
1359 "incoming messages"),
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
1360 "group-chat-open", TRUE);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
1361 opts = g_list_prepend(opts, opt);
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
1362 protocol->account_options = g_list_reverse(opts);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1363 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1364
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1365 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1366 facebook_protocol_class_init(PurpleProtocolClass *klass)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1367 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1368 klass->login = fb_login;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1369 klass->close = fb_close;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1370 klass->status_types = fb_status_types;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1371 klass->list_icon = fb_list_icon;
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1372 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1373
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1374 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1375 facebook_protocol_client_iface_init(PurpleProtocolClientIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1376 {
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1377 iface->tooltip_text = fb_client_tooltip_text;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1378 iface->blist_node_menu = fb_client_blist_node_menu;
37294
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
1379 iface->offline_message = fb_client_offline_message;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1380 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1381
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1382 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1383 facebook_protocol_server_iface_init(PurpleProtocolServerIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1384 {
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1385 iface->set_status = fb_server_set_status;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1386 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1387
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1388 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1389 facebook_protocol_im_iface_init(PurpleProtocolIMIface *iface)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1390 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1391 iface->send = fb_im_send;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1392 iface->send_typing = fb_im_send_typing;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1393 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1394
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1395 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1396 facebook_protocol_chat_iface_init(PurpleProtocolChatIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1397 {
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1398 iface->info = fb_chat_info;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1399 iface->info_defaults = fb_chat_info_defaults;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1400 iface->join = fb_chat_join;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1401 iface->get_name = fb_chat_get_name;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1402 iface->invite = fb_chat_invite;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1403 iface->send = fb_chat_send;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1404 iface->set_topic = fb_chat_set_topic;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1405 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1406
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1407 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1408 facebook_protocol_privacy_iface_init(PurpleProtocolPrivacyIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1409 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1410
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1411 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1412
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1413 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1414 facebook_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1415 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1416 iface->get_list = fb_roomlist_get_list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1417 iface->cancel = fb_roomlist_cancel;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1418 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1419
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1420 PURPLE_DEFINE_TYPE_EXTENDED(
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1421 FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1422
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1423 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1424 facebook_protocol_client_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1425 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1426 facebook_protocol_server_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1427 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1428 facebook_protocol_im_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1429 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1430 facebook_protocol_chat_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1431 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1432 facebook_protocol_privacy_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1433 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1434 facebook_protocol_roomlist_iface_init)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1435 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1436
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1437 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1438 fb_cmds_register(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1439 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1440 PurpleCmdId id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1441
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1442 static PurpleCmdFlag cflags =
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1443 PURPLE_CMD_FLAG_CHAT |
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1444 PURPLE_CMD_FLAG_PROTOCOL_ONLY;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1445
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1446 g_return_if_fail(fb_cmds == NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1447
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1448 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
1449 fb_protocol->id, fb_cmd_kick,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1450 _("kick: Kick someone from the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1451 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1452 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
1453
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1454 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
1455 fb_protocol->id, fb_cmd_leave,
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1456 _("leave: Leave the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1457 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1458 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
1459 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1460
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1461 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1462 fb_cmds_unregister_free(gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1463 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1464 PurpleCmdId id = GPOINTER_TO_UINT(data);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1465 purple_cmd_unregister(id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1466 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1467
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1468 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1469 fb_cmds_unregister(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1470 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1471 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
1472 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1473
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1474 static PurplePluginInfo *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1475 plugin_query(GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1476 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1477 return purple_plugin_info_new(
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
1478 "id", FB_PROTOCOL_ID,
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1479 "name", "Facebook Protocol",
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1480 "version", DISPLAY_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1481 "category", N_("Protocol"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1482 "summary", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1483 "description", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1484 "website", PURPLE_WEBSITE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1485 "abi-version", PURPLE_ABI_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1486 "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL |
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1487 PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1488 NULL
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1489 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1490 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1491
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1492 static gboolean
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1493 plugin_load(PurplePlugin *plugin, GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1494 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1495 facebook_protocol_register_type(plugin);
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1496 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
1497
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1498 if (fb_protocol == NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1499 return FALSE;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1500 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1501
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1502 fb_cmds_register();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1503 return TRUE;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1504 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1505
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1506 static gboolean
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1507 plugin_unload(PurplePlugin *plugin, GError **error)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1508 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1509 fb_cmds_unregister();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1510 return purple_protocols_remove(fb_protocol, error);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1511 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1512
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1513 PURPLE_PLUGIN_INIT(facebook, plugin_query, plugin_load, plugin_unload);

mercurial