aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--facebook/facebook-api.c55
-rw-r--r--facebook/facebook-api.h4
-rw-r--r--facebook/facebook-http.c4
-rw-r--r--facebook/facebook.c26
5 files changed, 67 insertions, 26 deletions
diff --git a/configure.ac b/configure.ac
index 3395d3c..031ec7e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,9 +16,9 @@
AC_INIT(
[bitlbee-facebook],
[1.0.0],
- [https://github.com/jgeboski/bitlbee-facebook/issues],
+ [https://github.com/bitlbee/bitlbee-facebook/issues],
[bitlbee-facebook],
- [https://github.com/jgeboski/bitlbee-facebook],
+ [https://github.com/bitlbee/bitlbee-facebook],
[]
)
diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c
index c8e5e30..213937e 100644
--- a/facebook/facebook-api.c
+++ b/facebook/facebook-api.c
@@ -589,6 +589,12 @@ fb_api_json_chk(FbApi *api, gconstpointer data, gssize size, JsonNode **node)
priv->token = NULL;
}
+ /* 509 is used for "invalid attachment id" */
+ if (code == 509) {
+ errc = FB_API_ERROR_NONFATAL;
+ success = FALSE;
+ }
+
str = fb_json_values_next_str(values, NULL);
if ((g_strcmp0(str, "ERROR_QUEUE_NOT_FOUND") == 0) ||
@@ -1890,13 +1896,35 @@ fb_api_auth(FbApi *api, const gchar *user, const gchar *pass)
fb_api_cb_auth);
}
+static gchar *
+fb_api_user_icon_checksum(gchar *icon)
+{
+ gchar *csum;
+ FbHttpValues *prms;
+
+ if (G_UNLIKELY(icon == NULL)) {
+ return NULL;
+ }
+
+ prms = fb_http_values_new();
+ fb_http_values_parse(prms, icon, TRUE);
+ csum = fb_http_values_dup_str(prms, "oh", NULL);
+ fb_http_values_free(prms);
+
+ if (G_UNLIKELY(csum == NULL)) {
+ /* Revert to the icon URL as the unique checksum */
+ csum = g_strdup(icon);
+ }
+
+ return csum;
+}
+
static void
fb_api_cb_contact(FbHttpRequest *req, gpointer data)
{
const gchar *str;
FbApi *api = data;
FbApiUser user;
- FbHttpValues *prms;
FbJsonValues *values;
GError *err = NULL;
JsonNode *node;
@@ -1918,7 +1946,7 @@ fb_api_cb_contact(FbHttpRequest *req, gpointer data)
values = fb_json_values_new(node);
fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.id");
fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.name");
- fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
+ fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
"$.profile_pic_large.uri");
fb_json_values_update(values, &err);
@@ -1934,15 +1962,7 @@ fb_api_cb_contact(FbHttpRequest *req, gpointer data)
user.name = fb_json_values_next_str_dup(values, NULL);
user.icon = fb_json_values_next_str_dup(values, NULL);
- prms = fb_http_values_new();
- fb_http_values_parse(prms, user.icon, TRUE);
- user.csum = fb_http_values_dup_str(prms, "oh", NULL);
- fb_http_values_free(prms);
-
- if (G_UNLIKELY(user.csum == NULL)) {
- /* Revert to the icon URL as the unique checksum */
- user.csum = g_strdup(user.icon);
- }
+ user.csum = fb_api_user_icon_checksum(user.icon);
g_signal_emit_by_name(api, "contact", &user);
fb_api_user_reset(&user, TRUE);
@@ -1972,7 +1992,6 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data)
FbApi *api = data;
FbApiPrivate *priv = api->priv;
FbApiUser *user;
- FbHttpValues *prms;
FbId uid;
FbJsonValues *values;
gboolean complete;
@@ -1991,7 +2010,7 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data)
"$.represented_profile.friendship_status");
fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
"$.structured_name.text");
- fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
+ fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
"$.hugePictureUrl.uri");
fb_json_values_set_array(values, FALSE, "$.viewer.messenger_contacts"
".nodes");
@@ -2012,15 +2031,7 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data)
user->name = fb_json_values_next_str_dup(values, NULL);
user->icon = fb_json_values_next_str_dup(values, NULL);
- prms = fb_http_values_new();
- fb_http_values_parse(prms, user->icon, TRUE);
- user->csum = fb_http_values_dup_str(prms, "oh", NULL);
- fb_http_values_free(prms);
-
- if (G_UNLIKELY(user->csum == NULL)) {
- /* Revert to the icon URL as the unique checksum */
- user->csum = g_strdup(user->icon);
- }
+ user->csum = fb_api_user_icon_checksum(user->icon);
users = g_slist_prepend(users, user);
}
diff --git a/facebook/facebook-api.h b/facebook/facebook-api.h
index 2da2977..5e17e98 100644
--- a/facebook/facebook-api.h
+++ b/facebook/facebook-api.h
@@ -341,6 +341,7 @@ typedef struct _FbApiUser FbApiUser;
* @FB_API_ERROR_GENERAL: General failure.
* @FB_API_ERROR_AUTH: Authentication failure.
* @FB_API_ERROR_QUEUE: Queue failure.
+ * @FB_API_ERROR_NONFATAL: Other non-fatal errors.
*
* The error codes for the #FB_API_ERROR domain.
*/
@@ -348,7 +349,8 @@ typedef enum
{
FB_API_ERROR_GENERAL,
FB_API_ERROR_AUTH,
- FB_API_ERROR_QUEUE
+ FB_API_ERROR_QUEUE,
+ FB_API_ERROR_NONFATAL
} FbApiError;
/**
diff --git a/facebook/facebook-http.c b/facebook/facebook-http.c
index da1f631..6234d55 100644
--- a/facebook/facebook-http.c
+++ b/facebook/facebook-http.c
@@ -528,6 +528,10 @@ fb_http_urlcmp(const gchar *url1, const gchar *url2, gboolean protocol)
return url1 == url2;
}
+ if (strstr(url1, url2) != NULL || strstr(url2, url1) != NULL) {
+ return TRUE;
+ }
+
if (!url_set(&purl1, url1) || !url_set(&purl2, url2)) {
return g_ascii_strcasecmp(url1, url2) == 0;
}
diff --git a/facebook/facebook.c b/facebook/facebook.c
index 23a8864..dcf4071 100644
--- a/facebook/facebook.c
+++ b/facebook/facebook.c
@@ -300,7 +300,10 @@ fb_cb_api_error(FbApi *api, GError *error, gpointer data)
ic = fb_data_get_connection(fata);
fb_util_debug_error("%s", error->message);
imcb_error(ic, "%s", error->message);
- imc_logout(ic, recon);
+
+ if (!g_error_matches(error, FB_API_ERROR, FB_API_ERROR_NONFATAL)) {
+ imc_logout(ic, recon);
+ }
}
static void
@@ -1187,3 +1190,24 @@ init_plugin(void)
root_command_add("fbcreate", 0, fb_cmd_fbcreate, 0);
root_command_add("fbjoin", 0, fb_cmd_fbjoin, 0);
}
+
+
+#ifdef BITLBEE_ABI_VERSION_CODE
+G_MODULE_EXPORT struct plugin_info *
+init_plugin_info(void);
+
+G_MODULE_EXPORT struct plugin_info *
+init_plugin_info(void)
+{
+ static struct plugin_info info = {
+ BITLBEE_ABI_VERSION_CODE,
+ "facebook",
+ PACKAGE_VERSION,
+ "Facebook protocol plugin",
+ "dequis <dx@dxzone.com.ar> (maintainer), James Geboski <jgeboski@gmail.com> (original author)",
+ PACKAGE_URL
+ };
+
+ return &info;
+}
+#endif /* BITLBEE_ABI_VERSION_CODE */