libpurple/protocols/facebook/facebook.c

Sun, 13 Mar 2022 21:59:39 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Sun, 13 Mar 2022 21:59:39 -0500
changeset 41289
bcd5530b1462
parent 41287
dd84ced2309c
child 41295
2f1bed3c4738
permissions
-rw-r--r--

Remove deep parameter from dup functions

All callers all require deep copies now.

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
40441
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
22 #include <glib/gi18n-lib.h>
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
23
40945
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
24 #include <gplugin.h>
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
25 #include <gplugin-native.h>
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
26
40358
e6fe6fc1f516 move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents: 40348
diff changeset
27 #include <purple.h>
40945
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
28
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40708
diff changeset
29 #include "libpurple/glibcompat.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
30
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
31 #include "api.h"
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
32 #include "data.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
33 #include "facebook.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
34 #include "http.h"
37281
2b60f30897d9 facebook: do not error on icon retrieval failures
James Geboski <jgeboski@gmail.com>
parents: 37276
diff changeset
35 #include "util.h"
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
36
40857
d9d347d5532b Use G_DECLARE_FINAL_TYPE for FacebookProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40813
diff changeset
37 struct _FacebookProtocol {
d9d347d5532b Use G_DECLARE_FINAL_TYPE for FacebookProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40813
diff changeset
38 PurpleProtocol parent;
d9d347d5532b Use G_DECLARE_FINAL_TYPE for FacebookProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40813
diff changeset
39 };
d9d347d5532b Use G_DECLARE_FINAL_TYPE for FacebookProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40813
diff changeset
40
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
41 static GSList *fb_cmds = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
42 static PurpleProtocol *fb_protocol = NULL;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
43
37255
a6f5142565de facebook: implemented user icons
James Geboski <jgeboski@gmail.com>
parents: 37254
diff changeset
44 static void
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
45 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
46
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
47 static PurpleGroup *
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
48 fb_get_group(gboolean friend)
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
49 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
50 PurpleBlistNode *n;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
51 PurpleBlistNode *node;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
52 PurpleGroup *grp;
38402
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
53 const gchar *title;
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
54
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
55 if (friend) {
38402
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
56 title = _("Facebook Friends");
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
57 } else {
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
58 title = _("Facebook Non-Friends");
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
59 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
60
38402
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
61 grp = purple_blist_find_group(title);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
62
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
63 if (G_UNLIKELY(grp == NULL)) {
38402
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
64 grp = purple_group_new(title);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
65 node = NULL;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
66
39665
2172e3b8eeef Rename some buddy list accessor functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39483
diff changeset
67 for (n = purple_blist_get_default_root(); n != NULL;
2172e3b8eeef Rename some buddy list accessor functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39483
diff changeset
68 n = n->next) {
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
69 node = n;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
70 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
71
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
72 /* 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
73 purple_blist_add_group(grp, node);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
74
38402
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
75 if (!friend) {
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
76 node = PURPLE_BLIST_NODE(grp);
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
77 purple_blist_node_set_bool(node, "collapsed", TRUE);
9440461098b5 facebook: Add everyone to "Facebook Friends" group and persist Non-Friends
dx <dx@dxzone.com.ar>
parents: 38397
diff changeset
78 }
37338
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
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
81 return grp;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
82 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
83
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
84 static void
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
85 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
86 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
87 gchar uid[FB_ID_STRMAX];
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
88 PurpleBuddy *bdy;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
89 PurpleGroup *grp;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
90
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
91 FB_ID_TO_STR(user->uid, uid);
38404
1f25f09b50a2 facebook: save names of non-friends in the local alias in blist.xml
dx <dx@dxzone.com.ar>
parents: 38403
diff changeset
92 bdy = purple_buddy_new(acct, uid, user->name);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
93 grp = fb_get_group(FALSE);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
94
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
95 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
96 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
97 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
98
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
99 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
100 fb_cb_api_auth(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
101 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
102 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
103 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
104
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
105 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
106
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
107 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
108 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
109 fb_api_contacts(api);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
110 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
111
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
112 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
113 fb_cb_api_connect(FbApi *api, gpointer data)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
114 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
115 FbData *fata = data;
37326
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
116 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
117 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
118
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
119 gc = fb_data_get_connection(fata);
37326
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
120 acct = purple_connection_get_account(gc);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
121
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 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
124
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
125 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
126 fb_api_unread(api);
c768f27357ec facebook: implemented the retrieval of unread messages
James Geboski <jgeboski@gmail.com>
parents: 37325
diff changeset
127 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
128 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
129
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
130 static void
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
131 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
132 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
133 FbData *fata = data;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
134 gchar uid[FB_ID_STRMAX];
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
135 GSList *msgs;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
136 PurpleAccount *acct;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
137 PurpleConnection *gc;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
138
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
139 gc = fb_data_get_connection(fata);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
140 acct = purple_connection_get_account(gc);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
141 FB_ID_TO_STR(user->uid, uid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
142
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
143 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
144 fb_buddy_add_nonfriend(acct, user);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
145 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
146
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
147 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
148
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
149 if (msgs != NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
150 fb_cb_api_messages(api, msgs, fata);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
151 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
152 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
153 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
154
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
155 static gboolean
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
156 fb_cb_sync_contacts(gpointer data)
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
157 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
158 FbApi *api;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
159 FbData *fata = data;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
160
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
161 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
162 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
163 fb_api_contacts(api);
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
164 return FALSE;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
165 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
166
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
167 static void
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
168 fb_cb_icon(FbDataImage *img, GError *error)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
169 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
170 const gchar *csum;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
171 const gchar *name;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
172 const gchar *str;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
173 FbHttpParams *params;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
174 gsize size;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
175 guint8 *image;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
176 PurpleAccount *acct;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
177 PurpleBuddy *bdy;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
178
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
179 bdy = fb_data_image_get_data(img);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
180 acct = purple_buddy_get_account(bdy);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
181 name = purple_buddy_get_name(bdy);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
182
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
183 if (G_UNLIKELY(error != NULL)) {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
184 fb_util_debug_warning("Failed to retrieve icon for %s: %s",
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
185 name, error->message);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
186 return;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
187 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
188
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
189 str = fb_data_image_get_url(img);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
190 params = fb_http_params_new_parse(str, TRUE);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
191 csum = fb_http_params_get_str(params, "oh", NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
192
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
193 image = fb_data_image_dup_image(img, &size);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
194 purple_buddy_icons_set_for_user(acct, name, image, size, csum);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
195 fb_http_params_free(params);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
196 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
197
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
198 static void
38393
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
199 fb_sync_contacts_add_timeout(FbData *fata)
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
200 {
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
201 gint sync;
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
202 PurpleConnection *gc;
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
203 PurpleAccount *acct;
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
204
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
205 gc = fb_data_get_connection(fata);
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
206 acct = purple_connection_get_account(gc);
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
207
38394
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
208 sync = purple_account_get_int(acct, "sync-interval", 5);
38393
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
209
38394
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
210 if (sync < 1) {
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
211 purple_account_set_int(acct, "sync-interval", 1);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
212 sync = 1;
38393
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
213 }
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
214
40412
c0905847d779 Use g_timeout_add_seconds some more.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40358
diff changeset
215 sync *= 60;
38393
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
216 fb_data_add_timeout(fata, "sync-contacts", sync, fb_cb_sync_contacts,
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
217 fata);
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
218 }
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
219
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
220 static void
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
221 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
222 {
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
223 const gchar *alias;
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
224 const gchar *csum;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
225 FbApiUser *user;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
226 FbData *fata = data;
37254
68bc0091a347 facebook: set an initial private alias for the user
James Geboski <jgeboski@gmail.com>
parents: 37253
diff changeset
227 FbId muid;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
228 gchar uid[FB_ID_STRMAX];
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
37368
ed868baac87d facebook: fixed the group checking on NULL buddies
James Geboski <jgeboski@gmail.com>
parents: 37365
diff changeset
268 if ((bdy != NULL) && (purple_buddy_get_group(bdy) == grpn)) {
37342
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
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
278 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
279 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
280
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
281 if (!purple_strequal(csum, user->csum)) {
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37531
diff changeset
282 fb_data_image_add(fata, user->icon, fb_cb_icon,
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37531
diff changeset
283 bdy, NULL);
37257
5ba291680ac4 facebook: compare checksums before fetching icons
James Geboski <jgeboski@gmail.com>
parents: 37256
diff changeset
284 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
285 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
286
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
287 fb_data_image_queue(fata);
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
288
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
289 if (!complete) {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
290 return;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
291 }
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 if (state != PURPLE_CONNECTION_CONNECTED) {
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
294 status = purple_account_get_active_status(acct);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
295 type = purple_status_get_status_type(status);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
296 pstat = purple_status_type_get_primitive(type);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
297
37298
213498a7ab94 facebook: fetch contacts in incremental chunks
James Geboski <jgeboski@gmail.com>
parents: 37294
diff changeset
298 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
299 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
300 }
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
301
38393
7174c5bd4b71 facebook: Refactor, split off sync timeout code from fb_cb_api_contacts
dx <dx@dxzone.com.ar>
parents: 38390
diff changeset
302 fb_sync_contacts_add_timeout(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
303 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
304
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
305 static void
38394
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
306 fb_cb_api_contacts_delta(FbApi *api, GSList *added, GSList *removed, gpointer data)
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
307 {
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
308 FbApiUser *user;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
309 FbData *fata = data;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
310 gchar uid[FB_ID_STRMAX];
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
311 GSList *l;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
312 PurpleAccount *acct;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
313 PurpleBuddy *bdy;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
314 PurpleConnection *gc;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
315 PurpleGroup *grp;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
316 PurpleGroup *grpn;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
317
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
318 gc = fb_data_get_connection(fata);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
319 acct = purple_connection_get_account(gc);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
320 grp = fb_get_group(TRUE);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
321 grpn = fb_get_group(FALSE);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
322
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
323 for (l = added; l != NULL; l = l->next) {
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
324 user = l->data;
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
325 FB_ID_TO_STR(user->uid, uid);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
326
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
327 bdy = purple_blist_find_buddy(acct, uid);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
328
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
329 if ((bdy != NULL) && (purple_buddy_get_group(bdy) == grpn)) {
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
330 purple_blist_remove_buddy(bdy);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
331 }
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
332
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
333 bdy = purple_buddy_new(acct, uid, NULL);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
334 purple_blist_add_buddy(bdy, NULL, grp, NULL);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
335
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
336 purple_buddy_set_server_alias(bdy, user->name);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
337 }
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
338
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
339 for (l = removed; l != NULL; l = l->next) {
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
340 bdy = purple_blist_find_buddy(acct, l->data);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
341
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
342 if (bdy != NULL) {
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
343 purple_blist_remove_buddy(bdy);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
344 }
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
345 }
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
346
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
347 fb_sync_contacts_add_timeout(fata);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
348 }
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
349
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
350 static void
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
351 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
352 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
353 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
354 PurpleConnection *gc;
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
355 PurpleConnectionError errc;
37293
dc35ba3e7fac facebook: fixed all errors being marked as fatal
James Geboski <jgeboski@gmail.com>
parents: 37292
diff changeset
356
37311
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
357 gc = fb_data_get_connection(fata);
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
358
38069
56d191003b34 facebook: Port from sslconn to Gio
Mike Ruprecht <cmaiku@gmail.com>
parents: 37948
diff changeset
359 if (error->domain == G_IO_ERROR) {
56d191003b34 facebook: Port from sslconn to Gio
Mike Ruprecht <cmaiku@gmail.com>
parents: 37948
diff changeset
360 purple_connection_g_error(gc, error);
37311
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
361 return;
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
362 }
f9437ac8aa5d facebook: correctly propagate MQTT SSL errors
James Geboski <jgeboski@gmail.com>
parents: 37310
diff changeset
363
37377
c92bc4233941 facebook: fixed improper handling of queue errors
James Geboski <jgeboski@gmail.com>
parents: 37374
diff changeset
364 if (g_error_matches(error, FB_API_ERROR, FB_API_ERROR_QUEUE)) {
c92bc4233941 facebook: fixed improper handling of queue errors
James Geboski <jgeboski@gmail.com>
parents: 37374
diff changeset
365 /* Save the reset data */
c92bc4233941 facebook: fixed improper handling of queue errors
James Geboski <jgeboski@gmail.com>
parents: 37374
diff changeset
366 fb_data_save(fata);
c92bc4233941 facebook: fixed improper handling of queue errors
James Geboski <jgeboski@gmail.com>
parents: 37374
diff changeset
367 }
c92bc4233941 facebook: fixed improper handling of queue errors
James Geboski <jgeboski@gmail.com>
parents: 37374
diff changeset
368
37306
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
369 if ((error->domain == FB_HTTP_ERROR) &&
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
370 (error->code >= 400) &&
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
371 (error->code <= 500))
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
372 {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
373 errc = PURPLE_CONNECTION_ERROR_OTHER_ERROR;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
374 } 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
375 errc = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
376 } else {
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
377 errc = PURPLE_CONNECTION_ERROR_NETWORK_ERROR;
7c454f51b56b facebook: handle authentication errors
James Geboski <jgeboski@gmail.com>
parents: 37305
diff changeset
378 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
379
38185
955dcca1ac3d facebook: Prevent disconnections on 509 errors, "Invalid attachment id"
dequis <dx@dxzone.com.ar>
parents: 38069
diff changeset
380
955dcca1ac3d facebook: Prevent disconnections on 509 errors, "Invalid attachment id"
dequis <dx@dxzone.com.ar>
parents: 38069
diff changeset
381 if (!g_error_matches(error, FB_API_ERROR, FB_API_ERROR_NONFATAL)) {
955dcca1ac3d facebook: Prevent disconnections on 509 errors, "Invalid attachment id"
dequis <dx@dxzone.com.ar>
parents: 38069
diff changeset
382 purple_connection_error(gc, errc, error->message);
955dcca1ac3d facebook: Prevent disconnections on 509 errors, "Invalid attachment id"
dequis <dx@dxzone.com.ar>
parents: 38069
diff changeset
383 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
384 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
385
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
386 static void
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
387 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
388 {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
389 FbData *fata = data;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
390 FbApiEvent *event;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
391 gchar uid[FB_ID_STRMAX];
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
392 gchar tid[FB_ID_STRMAX];
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
393 GHashTable *fetch;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
394 GHashTableIter iter;
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
395 GSList *l;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
396 PurpleAccount *acct;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
397 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
398 PurpleConversationManager *manager;
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
399 PurpleConnection *gc;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
400
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
401 gc = fb_data_get_connection(fata);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
402 acct = purple_connection_get_account(gc);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
403 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
404
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
405 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
406
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
407 for (l = events; l != NULL; l = l->next) {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
408 event = l->data;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
409
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
410 FB_ID_TO_STR(event->tid, tid);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
411 chat = purple_conversation_manager_find_chat(manager, acct, tid);
37337
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 if (chat == NULL) {
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
414 continue;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
415 }
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
416
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
417 FB_ID_TO_STR(event->uid, uid);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
418
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
419 switch (event->type) {
37380
06ad6f6aa43a facebook: implemented group chat topic change events
James Geboski <jgeboski@gmail.com>
parents: 37377
diff changeset
420 case FB_API_EVENT_TYPE_THREAD_TOPIC:
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
421 purple_chat_conversation_set_topic(PURPLE_CHAT_CONVERSATION(chat), uid,
37380
06ad6f6aa43a facebook: implemented group chat topic change events
James Geboski <jgeboski@gmail.com>
parents: 37377
diff changeset
422 event->text);
06ad6f6aa43a facebook: implemented group chat topic change events
James Geboski <jgeboski@gmail.com>
parents: 37377
diff changeset
423 break;
06ad6f6aa43a facebook: implemented group chat topic change events
James Geboski <jgeboski@gmail.com>
parents: 37377
diff changeset
424
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
425 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
426 if (purple_blist_find_buddy(acct, uid) == NULL) {
38397
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
427 if (event->text) {
41287
dd84ced2309c Remove weird use of dup functions to allocate new structs
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41084
diff changeset
428 FbApiUser *user = g_new0(FbApiUser, 1);
38397
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
429 user->uid = event->uid;
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
430 user->name = g_strdup(event->text);
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
431
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
432 fb_buddy_add_nonfriend(acct, user);
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
433
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
434 fb_api_user_free(user);
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
435 } else {
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
436 g_hash_table_insert(fetch, &event->tid, event);
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
437 break;
046138091ee2 facebook: Handle new style topic/groupchat membership events
dx <dx@dxzone.com.ar>
parents: 38394
diff changeset
438 }
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
439 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
440
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
441 purple_chat_conversation_add_user(PURPLE_CHAT_CONVERSATION(chat), uid, NULL, 0,
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
442 TRUE);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
443 break;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
444
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
445 case FB_API_EVENT_TYPE_THREAD_USER_REMOVED:
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
446 purple_chat_conversation_remove_user(PURPLE_CHAT_CONVERSATION(chat), uid, event->text);
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
447 break;
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
448 }
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
449 }
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
450
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
451 g_hash_table_iter_init(&iter, fetch);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
452
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
453 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
454 fb_api_thread(api, event->tid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
455 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
456
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
457 g_hash_table_destroy(fetch);
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
458 }
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
459
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
460 static void
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
461 fb_cb_image(FbDataImage *img, GError *error)
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
462 {
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
463 const gchar *url;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
464 FbApi *api;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
465 FbApiMessage *msg;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
466 FbData *fata;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
467 gsize size;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
468 GSList *msgs = NULL;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
469 guint id;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
470 guint8 *image;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
471 PurpleImage *pimg;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
472
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
473 fata = fb_data_image_get_fata(img);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
474 msg = fb_data_image_get_data(img);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
475
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
476 if (G_UNLIKELY(error != NULL)) {
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
477 url = fb_data_image_get_url(img);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
478 fb_util_debug_warning("Failed to retrieve image %s: %s",
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
479 url, error->message);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
480 return;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
481 }
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
482
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
483 api = fb_data_get_api(fata);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
484 image = fb_data_image_dup_image(img, &size);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
485 pimg = purple_image_new_from_data(image, size);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
486 id = purple_image_store_add_weak(pimg);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
487
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
488 g_free(msg->text);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
489 msg->text = g_strdup_printf("<img src=\""
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
490 PURPLE_IMAGE_STORE_PROTOCOL
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
491 "%u\">", id);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
492 msg->flags |= FB_API_MESSAGE_FLAG_DONE;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
493
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
494 msgs = g_slist_prepend(msgs, msg);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
495 fb_cb_api_messages(api, msgs, fata);
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37531
diff changeset
496 g_slist_free(msgs);
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
497 }
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
498
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
499 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
500 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
501 {
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
502 const gchar *text;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
503 FbApiMessage *msg;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
504 FbData *fata = data;
37480
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
505 gboolean isself;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
506 gboolean mark;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
507 gboolean open;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37360
diff changeset
508 gboolean self;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
509 gchar *html;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
510 gchar tid[FB_ID_STRMAX];
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
511 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
512 gint id;
37475
643d7b0aadbd facebook: preserve the timestamp on incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37417
diff changeset
513 gint64 tstamp;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
514 GSList *l;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
515 PurpleAccount *acct;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
516 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
517 PurpleConversationManager *manager;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
518 PurpleConnection *gc;
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
519 PurpleMessageFlags flags;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
520
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
521 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
522 acct = purple_connection_get_account(gc);
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
523 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
524 open = purple_account_get_bool(acct, "group-chat-open", TRUE);
37480
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
525 self = purple_account_get_bool(acct, "show-self", TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
526
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
527 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
528
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
529 for (l = msgs; l != NULL; l = l->next) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
530 msg = l->data;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
531 FB_ID_TO_STR(msg->uid, uid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
532
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
533 if (purple_blist_find_buddy(acct, uid) == NULL) {
41289
bcd5530b1462 Remove deep parameter from dup functions
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41287
diff changeset
534 msg = fb_api_message_dup(msg);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
535 fb_data_add_message(fata, msg);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
536 fb_api_contact(api, msg->uid);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
537 continue;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
538 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
539
37480
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
540 isself = (msg->flags & FB_API_MESSAGE_FLAG_SELF) != 0;
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
541
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
542 if (isself && !self) {
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
543 continue;
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
544 }
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
545
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
546 flags = isself ? PURPLE_MESSAGE_SEND : PURPLE_MESSAGE_RECV;
37475
643d7b0aadbd facebook: preserve the timestamp on incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37417
diff changeset
547 tstamp = msg->tstamp / 1000;
37317
143a4d8db15c facebook: implemented self messages
James Geboski <jgeboski@gmail.com>
parents: 37311
diff changeset
548
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
549 if (msg->flags & FB_API_MESSAGE_FLAG_IMAGE) {
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
550 if (!(msg->flags & FB_API_MESSAGE_FLAG_DONE)) {
41289
bcd5530b1462 Remove deep parameter from dup functions
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41287
diff changeset
551 msg = fb_api_message_dup(msg);
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37531
diff changeset
552 fb_data_image_add(fata, msg->text, fb_cb_image,
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37531
diff changeset
553 msg, (GDestroyNotify)
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37531
diff changeset
554 fb_api_message_free);
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
555 fb_data_image_queue(fata);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
556 continue;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
557 }
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
558
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
559 flags |= PURPLE_MESSAGE_IMAGES;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
560 text = msg->text;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
561 html = NULL;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
562 } else {
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
563 html = purple_markup_escape_text(msg->text, -1);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
564 text = html;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
565 }
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
566
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
567 if (msg->tid == 0) {
37480
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
568 if (mark && !isself) {
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
569 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
570 }
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
571
37475
643d7b0aadbd facebook: preserve the timestamp on incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37417
diff changeset
572 fb_util_serv_got_im(gc, uid, text, flags, tstamp);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
573 g_free(html);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
574 continue;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
575 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
576
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
577 FB_ID_TO_STR(msg->tid, tid);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
578 chat = purple_conversation_manager_find_chat(manager, acct, tid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
579
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
580 if (chat == NULL) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
581 if (!open) {
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
582 g_free(html);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
583 continue;
37304
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
584 }
168a859417f6 facebook: implemented marking threads as read
James Geboski <jgeboski@gmail.com>
parents: 37303
diff changeset
585
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
586 id = fb_id_hash(&msg->tid);
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
587 purple_serv_got_joined_chat(gc, id, tid);
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
588 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
589 } else {
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
590 id = purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(chat));
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
591 }
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
592
37480
609d20c56162 facebook: added an account option for self messages
James Geboski <jgeboski@gmail.com>
parents: 37476
diff changeset
593 if (mark && !isself) {
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
594 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
595 }
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
596
37475
643d7b0aadbd facebook: preserve the timestamp on incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37417
diff changeset
597 fb_util_serv_got_chat_in(gc, id, uid, text, flags, tstamp);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
598 g_free(html);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
599 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
600 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
601
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
602 static void
41084
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
603 fb_cb_api_presences(FbApi *api, GSList *presences, gpointer data)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
604 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
605 const gchar *statid;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
606 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
607 gchar uid[FB_ID_STRMAX];
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
608 GSList *l;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
609 PurpleAccount *acct;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
610 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
611 PurpleStatusPrimitive pstat;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
612
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
613 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
614 acct = purple_connection_get_account(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
615
41084
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
616 for (l = presences; l != NULL; l = l->next) {
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
617 FbApiPresence *api_presence = l->data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
618
41084
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
619 if (api_presence->active) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
620 pstat = PURPLE_STATUS_AVAILABLE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
621 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
622 pstat = PURPLE_STATUS_OFFLINE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
623 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
624
41084
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
625 FB_ID_TO_STR(api_presence->uid, uid);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
626 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
627 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
628 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
629 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
630
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
631 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
632 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
633 {
37527
67131d0c2d24 facebook: add the local user to the group chat user list
James Geboski <jgeboski@gmail.com>
parents: 37480
diff changeset
634 const gchar *name;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
635 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
636 FbData *fata = data;
37476
2a83ef0aed86 facebook: fixed nonfunctional group chat auto-rejoining
James Geboski <jgeboski@gmail.com>
parents: 37475
diff changeset
637 gboolean active;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
638 gchar tid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
639 gchar uid[FB_ID_STRMAX];
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
640 gint id;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
641 GSList *l;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
642 PurpleAccount *acct;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
643 PurpleConversation *conv;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
644 PurpleConversationManager *manager;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
645 PurpleChatConversation *chat;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
646 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
647
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
648 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
649 acct = purple_connection_get_account(gc);
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
650 id = fb_id_hash(&thrd->tid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
651 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
652
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
653 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
654 conv = purple_conversation_manager_find_chat(manager, acct, tid);
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
655 if((conv == NULL) || purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(conv))) {
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
656 conv = purple_serv_got_joined_chat(gc, id, tid);
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
657 chat = PURPLE_CHAT_CONVERSATION(conv);
37529
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
658 active = FALSE;
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
659 } else {
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
660 /* If there are no users in the group chat, including
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
661 * the local user, then the group chat has yet to be
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
662 * setup by this function. As a result, any group chat
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
663 * without users is inactive.
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
664 */
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
665 chat = PURPLE_CHAT_CONVERSATION(conv);
37529
e3828a8b7988 facebook: fixed group chat join messages with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37527
diff changeset
666 active = purple_chat_conversation_get_users_count(chat) > 0;
37305
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
667 }
f80258f7ce6f facebook: open new group chats with incoming messages
James Geboski <jgeboski@gmail.com>
parents: 37304
diff changeset
668
37530
51c392efda58 facebook: ensure the local user is only added to inactive group chats
James Geboski <jgeboski@gmail.com>
parents: 37529
diff changeset
669 if (!active) {
51c392efda58 facebook: ensure the local user is only added to inactive group chats
James Geboski <jgeboski@gmail.com>
parents: 37529
diff changeset
670 name = purple_account_get_username(acct);
51c392efda58 facebook: ensure the local user is only added to inactive group chats
James Geboski <jgeboski@gmail.com>
parents: 37529
diff changeset
671 purple_chat_conversation_add_user(chat, name, NULL, 0, FALSE);
51c392efda58 facebook: ensure the local user is only added to inactive group chats
James Geboski <jgeboski@gmail.com>
parents: 37529
diff changeset
672 }
51c392efda58 facebook: ensure the local user is only added to inactive group chats
James Geboski <jgeboski@gmail.com>
parents: 37529
diff changeset
673
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
674 purple_chat_conversation_set_topic(chat, NULL, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
675
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
676 for (l = thrd->users; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
677 user = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
678 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
679
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
680 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
681 continue;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
682 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
683
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
684 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
685 fb_buddy_add_nonfriend(acct, user);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
686 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
687
37476
2a83ef0aed86 facebook: fixed nonfunctional group chat auto-rejoining
James Geboski <jgeboski@gmail.com>
parents: 37475
diff changeset
688 purple_chat_conversation_add_user(chat, uid, NULL, 0, active);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
689 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
690 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
691
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
692 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
693 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
694 {
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
695 FbData *fata = data;
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
696 gchar sid[FB_ID_STRMAX];
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
697 GHashTable *table;
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
698 PurpleConnection *gc;
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
699
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
700 gc = fb_data_get_connection(fata);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
701 FB_ID_TO_STR(tid, sid);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
702
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
703 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
704 g_hash_table_insert(table, "name", g_strdup(sid));
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
705 purple_serv_join_chat(gc, table);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
706 g_hash_table_destroy(table);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
707 }
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
708
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
709 static void
38390
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
710 fb_cb_api_thread_kicked(FbApi *api, FbApiThread *thrd, gpointer data)
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
711 {
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
712 FbData *fata = data;
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
713 gchar tid[FB_ID_STRMAX];
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
714 PurpleAccount *acct;
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
715 PurpleConnection *gc;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
716 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
717 PurpleConversationManager *manager;
38390
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
718
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
719 FB_ID_TO_STR(thrd->tid, tid);
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
720
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
721 gc = fb_data_get_connection(fata);
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
722 acct = purple_connection_get_account(gc);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
723
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
724 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
725 chat = purple_conversation_manager_find_chat(manager, acct, tid);
38390
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
726
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
727 if (chat == NULL) {
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
728 PurpleRequestCommonParameters *cpar;
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
729
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
730 cpar = purple_request_cpar_from_connection(gc);
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
731 purple_notify_error(gc,
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
732 _("Join a Chat"),
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
733 _("Failed to Join Chat"),
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
734 _("You have been removed from this chat"),
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
735 cpar);
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
736 return;
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
737 }
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
738
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
739 purple_conversation_write_system_message(chat,
38390
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
740 _("You have been removed from this chat"), 0);
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
741
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
742 purple_serv_got_chat_left(gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(chat)));
38390
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
743 }
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
744
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
745 static void
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
746 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
747 {
37531
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
748 const gchar *alias;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
749 FbApiUser *user;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
750 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
751 gchar tid[FB_ID_STRMAX];
37531
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
752 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
753 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
754 GSList *m;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
755 GString *gstr;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
756 FbApiThread *thrd;
37531
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
757 PurpleAccount *acct;
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
758 PurpleBuddy *bdy;
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
759 PurpleConnection *gc;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
760 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
761 PurpleRoomlistRoom *room;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
762
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
763 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
764
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
765 if (G_UNLIKELY(list == NULL)) {
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
766 return;
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
767 }
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
768
37531
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
769 gc = fb_data_get_connection(fata);
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
770 acct = purple_connection_get_account(gc);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
771 gstr = g_string_new(NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
772
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
773 for (l = thrds; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
774 thrd = l->data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
775 FB_ID_TO_STR(thrd->tid, tid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
776 g_string_truncate(gstr, 0);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
777
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
778 for (m = thrd->users; m != NULL; m = m->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
779 user = m->data;
37531
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
780 FB_ID_TO_STR(user->uid, uid);
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
781 bdy = purple_blist_find_buddy(acct, uid);
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
782
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
783 if (bdy != NULL) {
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
784 alias = purple_buddy_get_alias(bdy);
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
785 } else {
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
786 alias = user->name;
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
787 }
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
788
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
789 if (gstr->len > 0) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
790 g_string_append(gstr, ", ");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
791 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
792
37531
dbebc1ee96aa facebook: use locally defined aliases in the group chat list
James Geboski <jgeboski@gmail.com>
parents: 37530
diff changeset
793 g_string_append(gstr, alias);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
794 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
795
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
796 room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
797 tid, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
798 purple_roomlist_room_add_field(list, room, thrd->topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
799 purple_roomlist_room_add_field(list, room, gstr->str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
800 purple_roomlist_room_add(list, room);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
801 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
802
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
803 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
804 fb_data_set_roomlist(fata, NULL);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
805 g_string_free(gstr, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
806 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
807
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
808 static void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
809 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
810 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
811 FbData *fata = data;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
812 gchar uid[FB_ID_STRMAX];
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
813 PurpleConnection *gc;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
814
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
815 gc = fb_data_get_connection(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
816 FB_ID_TO_STR(typg->uid, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
817
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
818 if (typg->state) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
819 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
820 } else {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
821 purple_serv_got_typing_stopped(gc, uid);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
822 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
823 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
824
38405
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
825 static void
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
826 fb_mark_read(FbData *fata, FbId id, gboolean thread)
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
827 {
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
828 FbApi *api;
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
829 PurpleAccount *acct;
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
830 PurpleConnection *gc;
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
831
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
832 gc = fb_data_get_connection(fata);
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
833 acct = purple_connection_get_account(gc);
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
834 api = fb_data_get_api(fata);
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
835
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
836 if (!fb_data_get_unread(fata, id) ||
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
837 (purple_account_get_bool(acct, "mark-read-available", FALSE) &&
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
838 fb_api_is_invisible(api)))
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
839 {
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
840 return;
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
841 }
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
842
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
843 fb_data_set_unread(fata, id, FALSE);
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
844 fb_api_read(api, id, thread);
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
845 }
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
846
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
847 static gboolean
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
848 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
849 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
850 const gchar *name;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
851 FbData *fata;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
852 FbId id;
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
853 gchar *tname;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
854 PurpleConnection *gc;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
855 PurpleConversation *conv = data;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
856
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
857 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
858 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
859 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
860 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
861
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
862 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
863 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
864 g_free(tname);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
865
38405
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
866 if (purple_conversation_has_focus(conv)) {
833846fe6fb6 facebook: add "Mark messages as read only when available" setting
dx <dx@dxzone.com.ar>
parents: 38404
diff changeset
867 fb_mark_read(fata, id, PURPLE_IS_CHAT_CONVERSATION(conv));
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
868 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
869 return FALSE;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
870 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
871
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
872 static void
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
873 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
874 gpointer data)
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
875 {
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
876 const gchar *name;
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
877 const gchar *pid;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
878 FbData *fata = data;
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
879 gchar *tname;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
880 PurpleAccount *acct;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
881
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
882 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
883 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
884
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
885 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
886 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
887 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
888 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
889 /* 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
890 name = purple_conversation_get_name(conv);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
891 tname = g_strconcat("conv-read-", name, NULL);
40412
c0905847d779 Use g_timeout_add_seconds some more.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40358
diff changeset
892 fb_data_add_timeout(fata, tname, 0, fb_cb_conv_read, conv);
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
893 g_free(tname);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
894 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
895 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
896
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
897 static void
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
898 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
899 {
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
900 const gchar *name;
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
901 const gchar *pid;
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
902 FbData *fata = data;
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
903 gchar *tname;
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
904 PurpleAccount *acct;
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
905
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
906 acct = purple_conversation_get_account(conv);
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
907 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
908
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
909 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
910 return;
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
911 }
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
912
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
913 name = purple_conversation_get_name(conv);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
914 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
915 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
916 g_free(tname);
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
917 }
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
918
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
919 static void
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
920 fb_blist_chat_create(GSList *buddies, gpointer data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
921 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
922 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
923 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
924 FbData *fata = data;
37365
b70cc4d02d68 facebook: refactored data structure usage
James Geboski <jgeboski@gmail.com>
parents: 37364
diff changeset
925 FbId *did;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
926 FbId uid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
927 GSList *l;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
928 GSList *uids = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
929 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
930 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
931
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
932 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
933 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
934
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
935 if (g_slist_length(buddies) < 2) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
936 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
937 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
938 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
939 _("Failed to Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
940 _("At least two initial chat participants"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
941 " are required."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
942 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
943 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
944 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
945
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
946 for (l = buddies; l != NULL; l = l->next) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
947 name = purple_buddy_get_name(l->data);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
948 uid = FB_ID_FROM_STR(name);
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40708
diff changeset
949 did = g_memdup2(&uid, sizeof uid);
37365
b70cc4d02d68 facebook: refactored data structure usage
James Geboski <jgeboski@gmail.com>
parents: 37364
diff changeset
950 uids = g_slist_prepend(uids, did);
37258
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
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
953 fb_api_thread_create(api, uids);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
954 g_slist_free_full(uids, g_free);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
955 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
956
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
957 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
958 fb_blist_chat_init(PurpleBlistNode *node, gpointer data)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
959 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
960 FbData *fata = data;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
961 GSList *select = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
962 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
963
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
964 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
965 return;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
966 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
967
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
968 gc = fb_data_get_connection(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
969 select = g_slist_prepend(select, PURPLE_BUDDY(node));
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 fb_util_request_buddy(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
972 _("Initiate Chat"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
973 _("Initial Chat Participants"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
974 _("Select at least two initial participants."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
975 select, TRUE,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
976 G_CALLBACK(fb_blist_chat_create), NULL,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
977 fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
978 g_slist_free(select);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
979 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
980
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
981 static GList *
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
982 fb_get_account_options(PurpleProtocol *protocol) {
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
983 GList *opts = NULL;
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
984 PurpleAccountOption *opt;
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
985
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
986 opt = purple_account_option_int_new(_("Buddy list sync interval"),
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
987 "sync-interval", 5);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
988 opts = g_list_prepend(opts, opt);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
989
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
990 opt = purple_account_option_bool_new(_("Mark messages as read on focus"),
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
991 "mark-read", TRUE);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
992 opts = g_list_prepend(opts, opt);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
993
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
994 opt = purple_account_option_bool_new(_("Mark messages as read only when available"),
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
995 "mark-read-available", FALSE);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
996 opts = g_list_prepend(opts, opt);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
997
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
998 opt = purple_account_option_bool_new(_("Show self messages"),
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
999 "show-self", TRUE);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1000 opts = g_list_prepend(opts, opt);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1001
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1002 opt = purple_account_option_bool_new(_("Show unread messages"),
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1003 "show-unread", TRUE);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1004 opts = g_list_prepend(opts, opt);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1005
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1006 opt = purple_account_option_bool_new(_("Open new group chats with "
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1007 "incoming messages"),
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1008 "group-chat-open", TRUE);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1009 opts = g_list_prepend(opts, opt);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1010
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1011 return g_list_reverse(opts);
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1012 }
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1013
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1014 static void
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1015 fb_login(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1016 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1017 const gchar *pass;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1018 const gchar *user;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1019 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1020 FbData *fata;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
1021 gpointer convh;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1022 PurpleConnection *gc;
40030
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1023 GProxyResolver *resolver;
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1024 GError *error = NULL;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1025
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1026 gc = purple_account_get_connection(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1027
40030
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1028 resolver = purple_proxy_get_proxy_resolver(acct, &error);
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1029 if (resolver == NULL) {
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1030 fb_util_debug_error("Unable to get account proxy resolver: %s",
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1031 error->message);
40618
4726bf0ff977 Fix some GError leaks.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40507
diff changeset
1032 purple_connection_take_error(gc, error);
40030
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1033 return;
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1034 }
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1035
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39970
diff changeset
1036 fata = fb_data_new(gc, resolver);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1037 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
1038 convh = purple_conversations_get_handle();
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1039 purple_connection_set_protocol_data(gc, fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1040
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1041 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1042 "auth",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1043 G_CALLBACK(fb_cb_api_auth),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1044 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1045 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1046 "connect",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1047 G_CALLBACK(fb_cb_api_connect),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1048 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1049 g_signal_connect(api,
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
1050 "contact",
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
1051 G_CALLBACK(fb_cb_api_contact),
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
1052 fata);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37337
diff changeset
1053 g_signal_connect(api,
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1054 "contacts",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1055 G_CALLBACK(fb_cb_api_contacts),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1056 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1057 g_signal_connect(api,
38394
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
1058 "contacts-delta",
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
1059 G_CALLBACK(fb_cb_api_contacts_delta),
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
1060 fata);
cc616d24fa7e facebook: Use FetchContactsDeltaQuery for contact sync
dx <dx@dxzone.com.ar>
parents: 38393
diff changeset
1061 g_signal_connect(api,
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1062 "error",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1063 G_CALLBACK(fb_cb_api_error),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1064 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1065 g_signal_connect(api,
37337
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
1066 "events",
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
1067 G_CALLBACK(fb_cb_api_events),
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
1068 fata);
aecff282de76 facebook: handle group chat events
James Geboski <jgeboski@gmail.com>
parents: 37332
diff changeset
1069 g_signal_connect(api,
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1070 "messages",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1071 G_CALLBACK(fb_cb_api_messages),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1072 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1073 g_signal_connect(api,
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1074 "presences",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1075 G_CALLBACK(fb_cb_api_presences),
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1076 fata);
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1077 g_signal_connect(api,
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1078 "thread",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1079 G_CALLBACK(fb_cb_api_thread),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1080 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1081 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1082 "thread-create",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1083 G_CALLBACK(fb_cb_api_thread_create),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1084 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1085 g_signal_connect(api,
38390
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
1086 "thread-kicked",
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
1087 G_CALLBACK(fb_cb_api_thread_kicked),
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
1088 fata);
44e088051f69 facebook: Don't disconnect when trying to join a chat after being kicked
dx <dx@dxzone.com.ar>
parents: 38185
diff changeset
1089 g_signal_connect(api,
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1090 "threads",
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1091 G_CALLBACK(fb_cb_api_threads),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1092 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1093 g_signal_connect(api,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1094 "typing",
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1095 G_CALLBACK(fb_cb_api_typing),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1096 fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1097
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
1098 purple_signal_connect(convh,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
1099 "conversation-updated",
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
1100 gc,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
1101 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
1102 fata);
37350
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
1103 purple_signal_connect(convh,
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
1104 "deleting-conversation",
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
1105 gc,
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
1106 G_CALLBACK(fb_cb_conv_deleting),
ee2afb768c6e facebook: fixed segfault when marking conversations as read
James Geboski <jgeboski@gmail.com>
parents: 37349
diff changeset
1107 fata);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
1108
38403
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 38402
diff changeset
1109 if (!fb_data_load(fata) || !purple_account_get_remember_password(acct)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1110 user = purple_account_get_username(acct);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1111 pass = purple_connection_get_password(gc);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1112 purple_connection_update_progress(gc, _("Authenticating"),
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1113 1, 4);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1114 fb_api_auth(api, user, pass);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1115 return;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1116 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1117
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1118 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
1119 fb_api_contacts(api);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1120 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1121
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1122 static void
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1123 fb_close(PurpleConnection *gc)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1124 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1125 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1126 FbData *fata;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1127
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1128 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1129 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1130
37288
bd9cacc05e09 facebook: ensure updated API settings are saved
James Geboski <jgeboski@gmail.com>
parents: 37286
diff changeset
1131 fb_data_save(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1132 fb_api_disconnect(api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1133 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
1134
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1135 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
1136 purple_signals_disconnect_by_handle(gc);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1137 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1138
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1139 static GList *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1140 fb_status_types(PurpleAccount *acct)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1141 {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1142 PurpleStatusType *type;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1143 GList *types = NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1144
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1145 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
1146 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1147 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1148
37303
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
1149 /* 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
1150 type = purple_status_type_new(PURPLE_STATUS_AWAY,
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
1151 NULL, NULL, TRUE);
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
1152 types = g_list_prepend(types, type);
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
1153
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1154 type = purple_status_type_new(PURPLE_STATUS_INVISIBLE,
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1155 NULL, NULL, TRUE);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1156 types = g_list_prepend(types, type);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1157
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1158 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
1159 NULL, NULL, TRUE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1160 types = g_list_prepend(types, type);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1161
37303
051e2725dec4 Added NULL Away state for compatibility
James Geboski <jgeboski@gmail.com>
parents: 37301
diff changeset
1162 return g_list_reverse(types);
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1163 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1164
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1165 static const char *
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1166 fb_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1167 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1168 return "facebook";
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1169 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1170
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1171 static void
40634
4d3018b00ad4 Fix the PurpleProtocolClient interface and split it out to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40618
diff changeset
1172 fb_client_tooltip_text(PurpleProtocolClient *client, PurpleBuddy *buddy,
4d3018b00ad4 Fix the PurpleProtocolClient interface and split it out to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40618
diff changeset
1173 PurpleNotifyUserInfo *info, gboolean full)
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1174 {
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1175 const gchar *name;
41084
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
1176 PurplePresence *presence;
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1177 PurpleStatus *status;
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1178
41084
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
1179 presence = purple_buddy_get_presence(buddy);
72d6941bfa2e Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41078
diff changeset
1180 status = purple_presence_get_active_status(presence);
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1181
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1182 if (!PURPLE_BUDDY_IS_ONLINE(buddy)) {
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1183 /* Prevent doubles statues for Offline buddies */
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1184 /* See: pidgin_get_tooltip_text() in gtkblist.c */
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1185 purple_notify_user_info_remove_last_item(info);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1186 }
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1187
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1188 name = purple_status_get_name(status);
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1189 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
1190 }
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1191
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1192 static GList *
40634
4d3018b00ad4 Fix the PurpleProtocolClient interface and split it out to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40618
diff changeset
1193 fb_client_blist_node_menu(PurpleProtocolClient *client, PurpleBlistNode *node)
37258
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 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1196 GList *acts = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1197 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1198 PurpleConnection *gc;
39481
4db28449567d Rename PurpleMenuAction to PurpleActionMenu
Gary Kramlich <grim@reaperworld.com>
parents: 39479
diff changeset
1199 PurpleActionMenu *act;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1200
37283
38fdbcc84bcd facebook: use PURPLE_IS_BUDDY() over manual check
James Geboski <jgeboski@gmail.com>
parents: 37282
diff changeset
1201 if (!PURPLE_IS_BUDDY(node)) {
37282
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
1202 return NULL;
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
1203 }
0bd9b2c3f5b7 facebook: only show "Initiate Chat" with buddies
James Geboski <jgeboski@gmail.com>
parents: 37281
diff changeset
1204
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1205 acct = purple_buddy_get_account(PURPLE_BUDDY(node));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1206 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1207 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1208
39483
ab4728087d87 Rename purple_menu_action_* to purple_action_menu_*
Gary Kramlich <grim@reaperworld.com>
parents: 39481
diff changeset
1209 act = purple_action_menu_new(_("Initiate _Chat"),
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1210 PURPLE_CALLBACK(fb_blist_chat_init),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1211 fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1212 acts = g_list_prepend(acts, act);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1213
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1214 return g_list_reverse(acts);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1215 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1216
37294
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
1217 static gboolean
40634
4d3018b00ad4 Fix the PurpleProtocolClient interface and split it out to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40618
diff changeset
1218 fb_client_offline_message(PurpleProtocolClient *client, PurpleBuddy *buddy)
37294
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
1219 {
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
1220 return TRUE;
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
1221 }
bf3c5b94071f facebook: allow offline messages to buddies
James Geboski <jgeboski@gmail.com>
parents: 37293
diff changeset
1222
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1223 static void
40708
53a26c29d26c Move the PurpleProtocolServer interface to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40697
diff changeset
1224 fb_server_set_status(PurpleProtocolServer *protocol_server,
53a26c29d26c Move the PurpleProtocolServer interface to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40697
diff changeset
1225 PurpleAccount *acct, PurpleStatus *status)
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1226 {
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1227 FbApi *api;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1228 FbData *fata;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1229 gboolean invis;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1230 PurpleConnection *gc;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1231 PurpleStatusPrimitive pstat;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1232 PurpleStatusType *type;
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1233
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1234 gc = purple_account_get_connection(acct);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1235 fata = purple_connection_get_protocol_data(gc);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1236 api = fb_data_get_api(fata);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1237
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1238 type = purple_status_get_status_type(status);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1239 pstat = purple_status_type_get_primitive(type);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1240 invis = fb_api_is_invisible(api);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1241
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1242 if ((pstat == PURPLE_STATUS_INVISIBLE) && !invis) {
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1243 fb_api_connect(api, TRUE);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1244 } else if ((pstat != PURPLE_STATUS_OFFLINE) && invis) {
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1245 fb_api_connect(api, FALSE);
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1246 }
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1247 }
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1248
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1249 static gint
40507
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40443
diff changeset
1250 fb_im_send(PurpleProtocolIM *im, PurpleConnection *gc, PurpleMessage *msg)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1251 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1252 const gchar *name;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1253 const gchar *text;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1254 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1255 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1256 FbId uid;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1257 gchar *sext;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1258
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1259 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1260 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1261
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1262 name = purple_message_get_recipient(msg);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1263 uid = FB_ID_FROM_STR(name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1264
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1265 text = purple_message_get_contents(msg);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1266 sext = purple_markup_strip_html(text);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1267 fb_api_message(api, uid, FALSE, sext);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1268 g_free(sext);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1269 return 1;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1270 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1271
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1272 static guint
40507
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40443
diff changeset
1273 fb_im_send_typing(PurpleProtocolIM *im, PurpleConnection *gc,
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40443
diff changeset
1274 const gchar *name, PurpleIMTypingState state)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1275 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1276 FbApi *api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1277 FbData *fata;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1278 FbId uid;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1279
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1280 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1281 api = fb_data_get_api(fata);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1282 uid = FB_ID_FROM_STR(name);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1283
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1284 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
1285 return 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1286 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1287
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1288 static GList *
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1289 fb_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *connection)
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1290 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1291 GList *pces = NULL;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1292 PurpleProtocolChatEntry *pce;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1293
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1294 pce = g_new0(PurpleProtocolChatEntry, 1);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1295 pce->label = _("Chat _Name:");
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1296 pce->identifier = "name";
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1297 pce->required = TRUE;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1298 pces = g_list_prepend(pces, pce);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1299
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1300 return g_list_reverse(pces);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1301 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1302
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1303 static GHashTable *
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1304 fb_chat_info_defaults(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1305 const gchar *name)
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1306 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1307 GHashTable *data;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1308
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1309 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
1310 g_hash_table_insert(data, "name", g_strdup(name));
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1311
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1312 return data;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1313 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1314
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1315 static void
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1316 fb_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1317 GHashTable *data)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1318 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1319 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1320 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1321 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1322 FbId tid;
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1323 gint id;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1324 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1325 PurpleConversationManager *manager;
37349
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1326 PurpleRequestCommonParameters *cpar;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1327
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1328 name = g_hash_table_lookup(data, "name");
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1329 g_return_if_fail(name != NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1330
37349
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1331 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
1332 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
1333 purple_notify_error(gc,
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1334 _("Join a Chat"),
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1335 _("Failed to Join Chat"),
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1336 _("Invalid Facebook identifier."),
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1337 cpar);
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1338 return;
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1339 }
cebf09840cbc facebook: inform the user of invalid group chat names
James Geboski <jgeboski@gmail.com>
parents: 37343
diff changeset
1340
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1341 tid = FB_ID_FROM_STR(name);
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1342 id = fb_id_hash(&tid);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1343
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1344 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1345 chat = purple_conversation_manager_find_chat_by_id(manager,
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1346 purple_connection_get_account(gc),
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1347 id);
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1348
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1349 if ((chat != NULL) && !purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(chat))) {
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1350 purple_conversation_present(chat);
37291
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1351 return;
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1352 }
ccd151aed9f9 facebook: use persistent chat identifiers
James Geboski <jgeboski@gmail.com>
parents: 37288
diff changeset
1353
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1354 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1355 api = fb_data_get_api(fata);
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1356 fb_api_thread(api, tid);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1357 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1358
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1359 static gchar *
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1360 fb_chat_get_name(PurpleProtocolChat *protocol_chat, GHashTable *data)
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1361 {
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1362 const gchar *name;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1363
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1364 name = g_hash_table_lookup(data, "name");
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1365 g_return_val_if_fail(name != NULL, NULL);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1366
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1367 return g_strdup(name);
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1368 }
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1369
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1370 static void
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1371 fb_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1372 gint id, const gchar *msg, const gchar *who)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1373 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1374 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1375 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1376 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1377 FbId tid;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1378 FbId uid;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1379 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1380 PurpleConversationManager *manager;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1381 PurpleRequestCommonParameters *cpar;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1382
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1383 if (!FB_ID_IS_STR(who)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1384 cpar = purple_request_cpar_from_connection(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1385 purple_notify_error(gc,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1386 _("Invite Buddy Into Chat Room"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1387 _("Failed to Invite User"),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1388 _("Invalid Facebook identifier."),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1389 cpar);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1390 return;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1391 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1392
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1393 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1394 api = fb_data_get_api(fata);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1395
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1396 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1397 chat = purple_conversation_manager_find_chat_by_id(manager,
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1398 purple_connection_get_account(gc),
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1399 id);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1400
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1401 name = purple_conversation_get_name(chat);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1402 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1403 uid = FB_ID_FROM_STR(who);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1404
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1405 fb_api_thread_invite(api, tid, uid);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1406 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1407
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1408 static gint
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1409 fb_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, gint id,
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1410 PurpleMessage *msg)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1411 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1412 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1413 const gchar *text;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1414 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1415 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1416 FbId tid;
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1417 gchar *sext;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1418 PurpleAccount *acct;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1419 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1420 PurpleConversationManager *manager;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1421
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1422 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1423 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1424 api = fb_data_get_api(fata);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1425
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1426 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1427 chat = purple_conversation_manager_find_chat_by_id(manager, acct, id);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1428
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1429 name = purple_conversation_get_name(chat);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1430 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1431
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1432 text = purple_message_get_contents(msg);
37292
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1433 sext = purple_markup_strip_html(text);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1434 fb_api_message(api, tid, TRUE, sext);
ac1d2fdaab42 facebook: escape/unescape HTML within messages
James Geboski <jgeboski@gmail.com>
parents: 37291
diff changeset
1435 g_free(sext);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1436
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1437 name = purple_account_get_username(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1438 purple_serv_got_chat_in(gc, id, name,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1439 purple_message_get_flags(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1440 purple_message_get_contents(msg),
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1441 time(NULL));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1442 return 0;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1443 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1444
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1445 static void
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1446 fb_chat_set_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40634
diff changeset
1447 gint id, const gchar *topic)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1448 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1449 const gchar *name;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1450 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1451 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1452 FbId tid;
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1453 PurpleConversation *chat;
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1454 PurpleConversationManager *manager;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1455
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1456 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1457 api = fb_data_get_api(fata);
40997
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1458
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1459 manager = purple_conversation_manager_get_default();
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1460 chat = purple_conversation_manager_find_chat_by_id(manager,
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1461 purple_connection_get_account(gc),
997ab408c113 Port the protocol plugins to the purple_conversation_manager_api
Gary Kramlich <grim@reaperworld.com>
parents: 40985
diff changeset
1462 id);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1463
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40857
diff changeset
1464 name = purple_conversation_get_name(chat);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1465 tid = FB_ID_FROM_STR(name);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1466 fb_api_thread_topic(api, tid, topic);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1467 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1468
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1469 static PurpleRoomlist *
41028
943b2cb45314 Separate PurpleProtocolRoomlist into its own file and modernize it.
Gary Kramlich <grim@reaperworld.com>
parents: 40997
diff changeset
1470 fb_roomlist_get_list(PurpleProtocolRoomlist *protocol_roomlist,
943b2cb45314 Separate PurpleProtocolRoomlist into its own file and modernize it.
Gary Kramlich <grim@reaperworld.com>
parents: 40997
diff changeset
1471 PurpleConnection *gc)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1472 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1473 FbApi *api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1474 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1475 GList *flds = NULL;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1476 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1477 PurpleRoomlist *list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1478 PurpleRoomlistField *fld;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1479
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1480 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
1481 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
1482 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
1483
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1484 api = fb_data_get_api(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1485 acct = purple_connection_get_account(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1486 list = purple_roomlist_new(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1487 fb_data_set_roomlist(fata, list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1488
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1489 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1490 _("Topic"), "topic", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1491 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1492
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1493 fld = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1494 _("Users"), "users", FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1495 flds = g_list_prepend(flds, fld);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1496
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1497 flds = g_list_reverse(flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1498 purple_roomlist_set_fields(list, flds);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1499
37323
8cf22d7f1c83 facebook: fixed a slew of issues with room lists
James Geboski <jgeboski@gmail.com>
parents: 37317
diff changeset
1500 purple_roomlist_set_in_progress(list, TRUE);
37332
c4f2fd45ffba facebook: refactored internal API naming
James Geboski <jgeboski@gmail.com>
parents: 37328
diff changeset
1501 fb_api_threads(api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1502 return list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1503 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1504
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1505 static void
41028
943b2cb45314 Separate PurpleProtocolRoomlist into its own file and modernize it.
Gary Kramlich <grim@reaperworld.com>
parents: 40997
diff changeset
1506 fb_roomlist_cancel(PurpleProtocolRoomlist *protocol_roomlist,
943b2cb45314 Separate PurpleProtocolRoomlist into its own file and modernize it.
Gary Kramlich <grim@reaperworld.com>
parents: 40997
diff changeset
1507 PurpleRoomlist *list)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1508 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1509 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1510 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1511 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1512 PurpleRoomlist *cist;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1513
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1514 acct = purple_roomlist_get_account(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1515 gc = purple_account_get_connection(acct);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1516 fata = purple_connection_get_protocol_data(gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1517 cist = fb_data_get_roomlist(fata);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1518
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1519 if (G_LIKELY(cist == list)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1520 fb_data_set_roomlist(fata, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1521 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1522
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1523 purple_roomlist_set_in_progress(list, FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1524 g_object_unref(list);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1525 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1526
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1527 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1528 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
1529 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1530 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1531 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1532 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1533 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1534 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1535 FbId uid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1536 GError *err = NULL;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1537 PurpleAccount *acct;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1538 PurpleBuddy *bdy;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1539 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1540 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1541
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1542 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
1543 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1544
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1545 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1546 acct = purple_connection_get_account(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1547 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1548 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
1549
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1550 if (err != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1551 *error = g_strdup_printf(_("%s."), err->message);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1552 g_error_free(err);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1553 return PURPLE_CMD_RET_FAILED;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1554 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1555
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1556 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1557 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1558
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1559 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1560 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1561
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1562 name = purple_buddy_get_name(bdy);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1563 uid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1564
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1565 fb_api_thread_remove(api, tid, uid);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1566 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1567 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1568
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1569 static PurpleCmdRet
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1570 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
1571 gchar **error, gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1572 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1573 const gchar *name;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1574 FbApi *api;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1575 FbData *fata;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1576 FbId tid;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1577 gint id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1578 PurpleConnection *gc;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1579 PurpleChatConversation *chat;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1580
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1581 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
1582 PURPLE_CMD_RET_FAILED);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1583
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1584 gc = purple_conversation_get_connection(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1585 fata = purple_connection_get_protocol_data(gc);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1586 api = fb_data_get_api(fata);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1587
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1588 chat = PURPLE_CHAT_CONVERSATION(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1589 id = purple_chat_conversation_get_id(chat);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1590
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1591 name = purple_conversation_get_name(conv);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1592 tid = FB_ID_FROM_STR(name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1593
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1594 purple_serv_got_chat_left(gc, id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1595 fb_api_thread_remove(api, tid, 0);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1596 return PURPLE_CMD_RET_OK;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1597 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1598
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1599 static void
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1600 facebook_protocol_init(FacebookProtocol *self) {
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1601 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1602
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1603 static void
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1604 facebook_protocol_class_init(FacebookProtocolClass *klass)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1605 {
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1606 PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass);
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1607
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1608 protocol_class->get_account_options = fb_get_account_options;
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1609
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1610 protocol_class->login = fb_login;
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1611 protocol_class->close = fb_close;
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1612 protocol_class->status_types = fb_status_types;
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1613 protocol_class->list_icon = fb_list_icon;
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1614 }
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1615
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1616 static void
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1617 facebook_protocol_class_finalize(G_GNUC_UNUSED FacebookProtocolClass *klass)
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1618 {
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1619 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1620
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1621 static void
39757
4a5ba806d8c9 Rename *Iface to more standard names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39665
diff changeset
1622 facebook_protocol_client_iface_init(PurpleProtocolClientInterface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1623 {
37308
27833e4fcb1f facebook: added additional tooltip pairs
James Geboski <jgeboski@gmail.com>
parents: 37306
diff changeset
1624 iface->tooltip_text = fb_client_tooltip_text;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1625 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
1626 iface->offline_message = fb_client_offline_message;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1627 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1628
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1629 static void
40708
53a26c29d26c Move the PurpleProtocolServer interface to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40697
diff changeset
1630 facebook_protocol_server_init(PurpleProtocolServerInterface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1631 {
37328
4c091ac7c55a facebook: implemented the invisible presence state
James Geboski <jgeboski@gmail.com>
parents: 37326
diff changeset
1632 iface->set_status = fb_server_set_status;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1633 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1634
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1635 static void
39757
4a5ba806d8c9 Rename *Iface to more standard names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39665
diff changeset
1636 facebook_protocol_im_iface_init(PurpleProtocolIMInterface *iface)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1637 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1638 iface->send = fb_im_send;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1639 iface->send_typing = fb_im_send_typing;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1640 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1641
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents: 37249
diff changeset
1642 static void
39757
4a5ba806d8c9 Rename *Iface to more standard names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39665
diff changeset
1643 facebook_protocol_chat_iface_init(PurpleProtocolChatInterface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1644 {
37286
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1645 iface->info = fb_chat_info;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1646 iface->info_defaults = fb_chat_info_defaults;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1647 iface->join = fb_chat_join;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1648 iface->get_name = fb_chat_get_name;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1649 iface->invite = fb_chat_invite;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1650 iface->send = fb_chat_send;
6e3ee8e18697 facebook: fixed missing chat component
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
1651 iface->set_topic = fb_chat_set_topic;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1652 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1653
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1654 static void
39757
4a5ba806d8c9 Rename *Iface to more standard names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39665
diff changeset
1655 facebook_protocol_roomlist_iface_init(PurpleProtocolRoomlistInterface *iface)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1656 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1657 iface->get_list = fb_roomlist_get_list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents: 37257
diff changeset
1658 iface->cancel = fb_roomlist_cancel;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1659 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1660
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1661 G_DEFINE_DYNAMIC_TYPE_EXTENDED(
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1662 FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0,
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1663
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1664 G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT,
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1665 facebook_protocol_client_iface_init)
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1666 G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER,
40708
53a26c29d26c Move the PurpleProtocolServer interface to its own file.
Gary Kramlich <grim@reaperworld.com>
parents: 40697
diff changeset
1667 facebook_protocol_server_init)
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1668 G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM,
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1669 facebook_protocol_im_iface_init)
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1670 G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT,
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1671 facebook_protocol_chat_iface_init)
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1672 G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST,
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1673 facebook_protocol_roomlist_iface_init));
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1674
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1675 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1676 fb_cmds_register(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1677 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1678 PurpleCmdId id;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1679
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1680 static PurpleCmdFlag cflags =
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1681 PURPLE_CMD_FLAG_CHAT |
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1682 PURPLE_CMD_FLAG_PROTOCOL_ONLY;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1683
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1684 g_return_if_fail(fb_cmds == NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1685
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1686 id = purple_cmd_register("kick", "s", PURPLE_CMD_P_PROTOCOL, cflags,
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1687 FB_PROTOCOL_ID, fb_cmd_kick,
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1688 _("kick: Kick someone from the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1689 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1690 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
1691
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1692 id = purple_cmd_register("leave", "", PURPLE_CMD_P_PROTOCOL, cflags,
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1693 FB_PROTOCOL_ID, fb_cmd_leave,
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1694 _("leave: Leave the chat"),
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1695 NULL);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1696 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
1697 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1698
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1699 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1700 fb_cmds_unregister_free(gpointer data)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1701 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1702 PurpleCmdId id = GPOINTER_TO_UINT(data);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1703 purple_cmd_unregister(id);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1704 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1705
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1706 static void
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1707 fb_cmds_unregister(void)
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1708 {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1709 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
1710 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1711
40945
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
1712 static GPluginPluginInfo *
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
1713 facebook_query(GError **error)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1714 {
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1715 return purple_plugin_info_new(
37351
914c79d327a9 facebook: only handle signals for the Facebook protocol
James Geboski <jgeboski@gmail.com>
parents: 37350
diff changeset
1716 "id", FB_PROTOCOL_ID,
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1717 "name", "Facebook Protocol",
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1718 "version", DISPLAY_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1719 "category", N_("Protocol"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1720 "summary", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1721 "description", N_("Facebook Protocol Plugin"),
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1722 "website", PURPLE_WEBSITE,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1723 "abi-version", PURPLE_ABI_VERSION,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1724 "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL |
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1725 PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD,
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1726 NULL
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1727 );
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1728 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1729
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1730 static gboolean
40945
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
1731 facebook_load(GPluginPlugin *plugin, GError **error)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1732 {
40800
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1733 PurpleProtocolManager *manager = purple_protocol_manager_get_default();
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1734
39894
7eab91ea30a1 Replace Purple type macros by GObject macros.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39760
diff changeset
1735 facebook_protocol_register_type(G_TYPE_MODULE(plugin));
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1736 fb_protocol = g_object_new(FACEBOOK_TYPE_PROTOCOL,
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1737 "id", FB_PROTOCOL_ID,
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1738 "name", "Facebook",
41069
a6f42271e304 move the facebook protocol plugins icons to a resource in the plugin
Gary Kramlich <grim@reaperworld.com>
parents: 41028
diff changeset
1739 "description", "Facebook is a chat protocol, developed by Facebook",
a6f42271e304 move the facebook protocol plugins icons to a resource in the plugin
Gary Kramlich <grim@reaperworld.com>
parents: 41028
diff changeset
1740 "icon-name", "im-facebook",
a6f42271e304 move the facebook protocol plugins icons to a resource in the plugin
Gary Kramlich <grim@reaperworld.com>
parents: 41028
diff changeset
1741 "icon-resource-path", "/im/pidgin/libpurple/facebook/icons",
40813
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1742 "options", OPT_PROTO_CHAT_TOPIC,
71305a7d7423 Modernize PurpleProtocol
Gary Kramlich <grim@reaperworld.com>
parents: 40800
diff changeset
1743 NULL);
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1744
40800
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1745 if(!purple_protocol_manager_register(manager, fb_protocol, error)) {
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1746 g_clear_object(&fb_protocol);
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1747
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1748 return FALSE;
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1749 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1750
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1751 fb_cmds_register();
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1752 return TRUE;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1753 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1754
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1755 static gboolean
41078
84e48180ef67 Update to gplugin 0.35.0
Gary Kramlich <grim@reaperworld.com>
parents: 41069
diff changeset
1756 facebook_unload(GPluginPlugin *plugin, gboolean shutdown, GError **error)
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1757 {
40800
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1758 PurpleProtocolManager *manager = purple_protocol_manager_get_default();
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1759
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1760 if(!purple_protocol_manager_unregister(manager, fb_protocol, error)) {
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1761 return FALSE;
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1762 }
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1763
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37283
diff changeset
1764 fb_cmds_unregister();
40800
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1765
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1766 g_clear_object(&fb_protocol);
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1767
be00e9c87cb7 Convert all of the protocols to use the new protocol_manager_ api
Gary Kramlich <grim@reaperworld.com>
parents: 40756
diff changeset
1768 return TRUE;
37249
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1769 }
dfa58c08a4fd facebook: initial protocol plugin
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1770
40945
bbeb2e98ea5b Use GPLUGIN_NATIVE_PLUGIN_DECLARE for all libpurple plugins and remove PURPLE_PLUGIN_INIT
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
1771 GPLUGIN_NATIVE_PLUGIN_DECLARE(facebook)

mercurial