aboutsummaryrefslogtreecommitdiffstats
path: root/facebook/facebook-api.c
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2017-01-07 12:55:26 -0300
committerdequis <dx@dxzone.com.ar>2017-01-07 12:55:26 -0300
commit2707fa7895f33f3886616169073fc8b5fabfdd02 (patch)
tree92434f7c3c9ea41d75bd7b800e250716f49cb528 /facebook/facebook-api.c
parent878c1dc70a3a5838e2f2ed18be0643696f5c8b92 (diff)
downloadbitlbee-facebook-2707fa7895f33f3886616169073fc8b5fabfdd02.tar.gz
bitlbee-facebook-2707fa7895f33f3886616169073fc8b5fabfdd02.tar.bz2
bitlbee-facebook-2707fa7895f33f3886616169073fc8b5fabfdd02.tar.xz
Don't disconnect when trying to join a chat after being kicked
This replaces a subset of "Failed to parse thread information" (the ones that aren't really a problem parsing) with "You have been removed from this chat" appearing in the relevant chat window.
Diffstat (limited to 'facebook/facebook-api.c')
-rw-r--r--facebook/facebook-api.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c
index 0ec8e07..184cb89 100644
--- a/facebook/facebook-api.c
+++ b/facebook/facebook-api.c
@@ -436,6 +436,23 @@ fb_api_class_init(FbApiClass *klass)
1, FB_TYPE_ID);
/**
+ * FbApi::thread-kicked:
+ * @api: The #FbApi.
+ * @thrd: The #FbApiThread.
+ *
+ * Emitted upon the reply of a thread request when the user is no longer
+ * part of that thread. This is emitted as a result of #fb_api_thread().
+ */
+ g_signal_new("thread-kicked",
+ G_TYPE_FROM_CLASS(klass),
+ G_SIGNAL_ACTION,
+ 0,
+ NULL, NULL,
+ fb_marshal_VOID__POINTER,
+ G_TYPE_NONE,
+ 1, G_TYPE_POINTER);
+
+ /**
* FbApi::threads:
* @api: The #FbApi.
* @thrds: The #GSList of #FbApiThread's.
@@ -2591,7 +2608,6 @@ fb_api_thread_parse(FbApi *api, FbApiThread *thrd, JsonNode *root,
}
if (num_users < 2 || !haself) {
- fb_api_thread_reset(thrd, TRUE);
g_object_unref(values);
return FALSE;
}
@@ -2626,8 +2642,12 @@ fb_api_cb_thread(FbHttpRequest *req, gpointer data)
if (!fb_api_thread_parse(api, &thrd, node, &err)) {
if (G_LIKELY(err == NULL)) {
- fb_api_error(api, FB_API_ERROR_GENERAL,
- "Failed to parse thread information");
+ if (thrd.tid) {
+ g_signal_emit_by_name(api, "thread-kicked", &thrd);
+ } else {
+ fb_api_error(api, FB_API_ERROR_GENERAL,
+ "Failed to parse thread information");
+ }
} else {
fb_api_error_emit(api, err);
}