| 623 |
623 |
| 624 return TRUE; |
624 return TRUE; |
| 625 } |
625 } |
| 626 |
626 |
| 627 static gboolean |
627 static gboolean |
| 628 fb_api_http_chk(FbApi *api, SoupMessage *res, JsonNode **root) |
628 fb_api_http_chk(FbApi *api, SoupSession *session, GAsyncResult *result, |
| 629 { |
629 SoupMessage *msg, JsonNode **root) |
| 630 const gchar *data; |
630 { |
| 631 const gchar *msg; |
631 GBytes *response_body = NULL; |
| |
632 const gchar *reason = NULL; |
| |
633 const gchar *data = NULL; |
| 632 GError *err = NULL; |
634 GError *err = NULL; |
| 633 gint code; |
635 gint code; |
| 634 gsize size; |
636 gsize size = 0; |
| 635 |
637 |
| 636 msg = soup_message_get_reason_phrase(res); |
638 reason = soup_message_get_reason_phrase(msg); |
| 637 code = soup_message_get_status(res); |
639 code = soup_message_get_status(msg); |
| 638 data = res->response_body->data; |
640 |
| 639 size = res->response_body->length; |
641 fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Response (%p):", msg); |
| 640 |
642 if (reason != NULL) { |
| 641 fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Response (%p):", res); |
643 fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %s (%d)", reason, |
| 642 if (msg != NULL) { |
|
| 643 fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %s (%d)", msg, |
|
| 644 code); |
644 code); |
| 645 } else { |
645 } else { |
| 646 fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %d", code); |
646 fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %d", code); |
| 647 } |
647 } |
| 648 |
648 |
| |
649 if (fb_http_error_chk(msg, &err) && (root == NULL)) { |
| |
650 return TRUE; |
| |
651 } |
| |
652 |
| |
653 response_body = soup_session_send_and_read_finish(session, result, &err); |
| |
654 if(response_body != NULL) { |
| |
655 data = g_bytes_get_data(response_body, &size); |
| |
656 } |
| |
657 |
| 649 if (G_LIKELY(size > 0)) { |
658 if (G_LIKELY(size > 0)) { |
| 650 fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Data: %.*s", |
659 fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Data: %.*s", |
| 651 (gint) size, data); |
660 (gint) size, data); |
| 652 } |
661 } |
| 653 |
662 |
| 654 if (fb_http_error_chk(res, &err) && (root == NULL)) { |
|
| 655 return TRUE; |
|
| 656 } |
|
| 657 |
|
| 658 /* Rudimentary check to prevent wrongful error parsing */ |
663 /* Rudimentary check to prevent wrongful error parsing */ |
| 659 if ((size < 2) || (data[0] != '{') || (data[size - 1] != '}')) { |
664 if ((size < 2) || (data[0] != '{') || (data[size - 1] != '}')) { |
| 660 FB_API_ERROR_EMIT(api, err, return FALSE); |
665 FB_API_ERROR_EMIT(api, err, return FALSE); |
| 661 } |
666 } |
| 662 |
667 |
| 673 } |
678 } |
| 674 |
679 |
| 675 static SoupMessage * |
680 static SoupMessage * |
| 676 fb_api_http_req(FbApi *api, const gchar *url, const gchar *name, |
681 fb_api_http_req(FbApi *api, const gchar *url, const gchar *name, |
| 677 const gchar *method, FbHttpParams *params, |
682 const gchar *method, FbHttpParams *params, |
| 678 SoupSessionCallback callback) |
683 GAsyncReadyCallback callback) |
| 679 { |
684 { |
| 680 gchar *data; |
685 gchar *data; |
| 681 gchar *key; |
686 gchar *key; |
| 682 gchar *val; |
687 gchar *val; |
| 683 GList *keys; |
688 GList *keys; |
| 724 soup_message_headers_replace(soup_message_get_request_headers(msg), |
729 soup_message_headers_replace(soup_message_get_request_headers(msg), |
| 725 "Authorization", data); |
730 "Authorization", data); |
| 726 g_free(data); |
731 g_free(data); |
| 727 } |
732 } |
| 728 |
733 |
| 729 soup_session_queue_message(api->cons, msg, callback, api); |
734 g_object_set_data(G_OBJECT(msg), "facebook-api", api); |
| |
735 soup_session_send_and_read_async(api->cons, msg, G_PRIORITY_DEFAULT, NULL, |
| |
736 callback, msg); |
| 730 |
737 |
| 731 fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Request (%p):", msg); |
738 fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Request (%p):", msg); |
| 732 fb_util_debug(FB_UTIL_DEBUG_INFO, " Request URL: %s", url); |
739 fb_util_debug(FB_UTIL_DEBUG_INFO, " Request URL: %s", url); |
| 733 |
740 |
| 734 return msg; |
741 return msg; |
| 735 } |
742 } |
| 736 |
743 |
| 737 static SoupMessage * |
744 static SoupMessage * |
| 738 fb_api_http_query(FbApi *api, gint64 query, JsonBuilder *builder, |
745 fb_api_http_query(FbApi *api, gint64 query, JsonBuilder *builder, |
| 739 SoupSessionCallback hcb) |
746 GAsyncReadyCallback hcb) |
| 740 { |
747 { |
| 741 const gchar *name; |
748 const gchar *name; |
| 742 FbHttpParams *prms; |
749 FbHttpParams *prms; |
| 743 gchar *json; |
750 gchar *json; |
| 744 |
751 |
| 782 |
789 |
| 783 return fb_api_http_req(api, FB_API_URL_GQL, name, "get", prms, hcb); |
790 return fb_api_http_req(api, FB_API_URL_GQL, name, "get", prms, hcb); |
| 784 } |
791 } |
| 785 |
792 |
| 786 static void |
793 static void |
| 787 fb_api_cb_http_bool(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
794 fb_api_cb_http_bool(GObject *source, GAsyncResult *result, gpointer data) { |
| 788 gpointer data) |
795 SoupSession *session = SOUP_SESSION(source); |
| 789 { |
796 SoupMessage *soupmsg = data; |
| 790 FbApi *api = data; |
797 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 791 |
798 JsonNode *root; |
| 792 if (!fb_api_http_chk(api, res, NULL)) { |
799 |
| 793 return; |
800 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 794 } |
801 return; |
| 795 |
802 } |
| 796 if (!purple_strequal(res->response_body->data, "true")) { |
803 |
| |
804 if (!json_node_get_boolean(root)) { |
| 797 fb_api_error_literal(api, FB_API_ERROR, |
805 fb_api_error_literal(api, FB_API_ERROR, |
| 798 _("Failed generic API operation")); |
806 _("Failed generic API operation")); |
| 799 } |
807 } |
| |
808 |
| |
809 json_node_free(root); |
| 800 } |
810 } |
| 801 |
811 |
| 802 static void |
812 static void |
| 803 fb_api_cb_mqtt_error(FbMqtt *mqtt, GError *error, gpointer data) |
813 fb_api_cb_mqtt_error(FbMqtt *mqtt, GError *error, gpointer data) |
| 804 { |
814 { |
| 967 fb_util_debug_info("Reconnected the MQTT stream"); |
977 fb_util_debug_info("Reconnected the MQTT stream"); |
| 968 } |
978 } |
| 969 } |
979 } |
| 970 |
980 |
| 971 static void |
981 static void |
| 972 fb_api_cb_seqid(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
982 fb_api_cb_seqid(GObject *source, GAsyncResult *result, gpointer data) { |
| 973 gpointer data) |
983 SoupSession *session = SOUP_SESSION(source); |
| 974 { |
984 SoupMessage *soupmsg = data; |
| |
985 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 975 const gchar *str; |
986 const gchar *str; |
| 976 FbApi *api = data; |
|
| 977 FbJsonValues *values; |
987 FbJsonValues *values; |
| 978 GError *err = NULL; |
988 GError *err = NULL; |
| 979 JsonNode *root; |
989 JsonNode *root; |
| 980 |
990 |
| 981 if (!fb_api_http_chk(api, res, &root)) { |
991 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 982 return; |
992 return; |
| 983 } |
993 } |
| 984 |
994 |
| 985 values = fb_json_values_new(root); |
995 values = fb_json_values_new(root); |
| 986 fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, |
996 fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, |
| 1994 g_signal_emit_by_name(api, "error", error); |
2004 g_signal_emit_by_name(api, "error", error); |
| 1995 g_error_free(error); |
2005 g_error_free(error); |
| 1996 } |
2006 } |
| 1997 |
2007 |
| 1998 static void |
2008 static void |
| 1999 fb_api_cb_attach(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2009 fb_api_cb_attach(GObject *source, GAsyncResult *result, gpointer data) { |
| 2000 gpointer data) |
2010 SoupSession *session = SOUP_SESSION(source); |
| 2001 { |
2011 SoupMessage *soupmsg = data; |
| |
2012 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2002 const gchar *str; |
2013 const gchar *str; |
| 2003 FbApi *api = data; |
|
| 2004 FbApiMessage *msg; |
2014 FbApiMessage *msg; |
| 2005 FbJsonValues *values; |
2015 FbJsonValues *values; |
| 2006 gchar *name; |
2016 gchar *name; |
| 2007 GError *err = NULL; |
2017 GError *err = NULL; |
| 2008 GSList *msgs = NULL; |
2018 GSList *msgs = NULL; |
| 2009 guint i; |
2019 guint i; |
| 2010 JsonNode *root; |
2020 JsonNode *root; |
| 2011 |
2021 |
| 2012 static const gchar *imgexts[] = {".jpg", ".png", ".gif"}; |
2022 static const gchar *imgexts[] = {".jpg", ".png", ".gif"}; |
| 2013 |
2023 |
| 2014 if (!fb_api_http_chk(api, res, &root)) { |
2024 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2015 return; |
2025 return; |
| 2016 } |
2026 } |
| 2017 |
2027 |
| 2018 values = fb_json_values_new(root); |
2028 values = fb_json_values_new(root); |
| 2019 fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.filename"); |
2029 fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.filename"); |
| 2024 g_object_unref(values); |
2034 g_object_unref(values); |
| 2025 json_node_free(root); |
2035 json_node_free(root); |
| 2026 return; |
2036 return; |
| 2027 ); |
2037 ); |
| 2028 |
2038 |
| 2029 msg = g_object_steal_data(G_OBJECT(res), "fb-api-msg"); |
2039 msg = g_object_steal_data(G_OBJECT(soupmsg), "fb-api-msg"); |
| 2030 str = fb_json_values_next_str(values, NULL); |
2040 str = fb_json_values_next_str(values, NULL); |
| 2031 name = g_ascii_strdown(str, -1); |
2041 name = g_ascii_strdown(str, -1); |
| 2032 |
2042 |
| 2033 for (i = 0; i < G_N_ELEMENTS(imgexts); i++) { |
2043 for (i = 0; i < G_N_ELEMENTS(imgexts); i++) { |
| 2034 if (g_str_has_suffix(name, imgexts[i])) { |
2044 if (g_str_has_suffix(name, imgexts[i])) { |
| 2064 g_object_set_data_full(G_OBJECT(http), "fb-api-msg", msg, |
2074 g_object_set_data_full(G_OBJECT(http), "fb-api-msg", msg, |
| 2065 (GDestroyNotify)fb_api_message_free); |
2075 (GDestroyNotify)fb_api_message_free); |
| 2066 } |
2076 } |
| 2067 |
2077 |
| 2068 static void |
2078 static void |
| 2069 fb_api_cb_auth(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2079 fb_api_cb_auth(GObject *source, GAsyncResult *result, gpointer data) { |
| 2070 gpointer data) |
2080 SoupSession *session = SOUP_SESSION(source); |
| 2071 { |
2081 SoupMessage *soupmsg = data; |
| 2072 FbApi *api = data; |
2082 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2073 FbJsonValues *values; |
2083 FbJsonValues *values; |
| 2074 GError *err = NULL; |
2084 GError *err = NULL; |
| 2075 JsonNode *root; |
2085 JsonNode *root; |
| 2076 |
2086 |
| 2077 if (!fb_api_http_chk(api, res, &root)) { |
2087 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2078 return; |
2088 return; |
| 2079 } |
2089 } |
| 2080 |
2090 |
| 2081 values = fb_json_values_new(root); |
2091 values = fb_json_values_new(root); |
| 2082 fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.access_token"); |
2092 fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.access_token"); |
| 2131 |
2141 |
| 2132 return csum; |
2142 return csum; |
| 2133 } |
2143 } |
| 2134 |
2144 |
| 2135 static void |
2145 static void |
| 2136 fb_api_cb_contact(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2146 fb_api_cb_contact(GObject *source, GAsyncResult *result, gpointer data) { |
| 2137 gpointer data) |
2147 SoupSession *session = SOUP_SESSION(source); |
| 2138 { |
2148 SoupMessage *soupmsg = data; |
| |
2149 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2139 const gchar *str; |
2150 const gchar *str; |
| 2140 FbApi *api = data; |
|
| 2141 FbApiUser user; |
2151 FbApiUser user; |
| 2142 FbJsonValues *values; |
2152 FbJsonValues *values; |
| 2143 GError *err = NULL; |
2153 GError *err = NULL; |
| 2144 JsonNode *node; |
2154 JsonNode *node; |
| 2145 JsonNode *root; |
2155 JsonNode *root; |
| 2146 |
2156 |
| 2147 if (!fb_api_http_chk(api, res, &root)) { |
2157 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2148 return; |
2158 return; |
| 2149 } |
2159 } |
| 2150 |
2160 |
| 2151 node = fb_json_node_get_nth(root, 0); |
2161 node = fb_json_node_get_nth(root, 0); |
| 2152 |
2162 |
| 2283 |
2293 |
| 2284 return users; |
2294 return users; |
| 2285 } |
2295 } |
| 2286 |
2296 |
| 2287 static void |
2297 static void |
| 2288 fb_api_cb_contacts(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2298 fb_api_cb_contacts(GObject *source, GAsyncResult *result, gpointer data) { |
| 2289 gpointer data) |
2299 SoupSession *session = SOUP_SESSION(source); |
| 2290 { |
2300 SoupMessage *soupmsg = data; |
| |
2301 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2291 const gchar *cursor; |
2302 const gchar *cursor; |
| 2292 const gchar *delta_cursor; |
2303 const gchar *delta_cursor; |
| 2293 FbApi *api = data; |
|
| 2294 FbJsonValues *values; |
2304 FbJsonValues *values; |
| 2295 gboolean complete; |
2305 gboolean complete; |
| 2296 gboolean is_delta; |
2306 gboolean is_delta; |
| 2297 GError *err = NULL; |
2307 GError *err = NULL; |
| 2298 GList *l; |
2308 GList *l; |
| 2299 GSList *users = NULL; |
2309 GSList *users = NULL; |
| 2300 JsonNode *root; |
2310 JsonNode *root; |
| 2301 JsonNode *croot; |
2311 JsonNode *croot; |
| 2302 JsonNode *node; |
2312 JsonNode *node; |
| 2303 |
2313 |
| 2304 if (!fb_api_http_chk(api, res, &root)) { |
2314 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2305 return; |
2315 return; |
| 2306 } |
2316 } |
| 2307 |
2317 |
| 2308 croot = fb_json_node_get(root, "$.viewer.messenger_contacts.deltas", NULL); |
2318 croot = fb_json_node_get(root, "$.viewer.messenger_contacts.deltas", NULL); |
| 2309 is_delta = (croot != NULL); |
2319 is_delta = (croot != NULL); |
| 2595 g_object_unref(values); |
2605 g_object_unref(values); |
| 2596 return msgs; |
2606 return msgs; |
| 2597 } |
2607 } |
| 2598 |
2608 |
| 2599 static void |
2609 static void |
| 2600 fb_api_cb_unread_msgs(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2610 fb_api_cb_unread_msgs(GObject *source, GAsyncResult *result, gpointer data) { |
| 2601 gpointer data) |
2611 SoupSession *session = SOUP_SESSION(source); |
| 2602 { |
2612 SoupMessage *soupmsg = data; |
| |
2613 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2603 const gchar *body; |
2614 const gchar *body; |
| 2604 const gchar *str; |
2615 const gchar *str; |
| 2605 FbApi *api = data; |
|
| 2606 FbApiMessage *dmsg; |
2616 FbApiMessage *dmsg; |
| 2607 FbApiMessage msg; |
2617 FbApiMessage msg; |
| 2608 FbId id; |
2618 FbId id; |
| 2609 FbId tid; |
2619 FbId tid; |
| 2610 FbJsonValues *values; |
2620 FbJsonValues *values; |
| 2727 g_object_unref(values); |
2737 g_object_unref(values); |
| 2728 json_node_free(root); |
2738 json_node_free(root); |
| 2729 } |
2739 } |
| 2730 |
2740 |
| 2731 static void |
2741 static void |
| 2732 fb_api_cb_unread(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2742 fb_api_cb_unread(GObject *source, GAsyncResult *result, gpointer data) { |
| 2733 gpointer data) |
2743 SoupSession *session = SOUP_SESSION(source); |
| 2734 { |
2744 SoupMessage *soupmsg = data; |
| |
2745 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2735 const gchar *id; |
2746 const gchar *id; |
| 2736 FbApi *api = data; |
|
| 2737 FbJsonValues *values; |
2747 FbJsonValues *values; |
| 2738 GError *err = NULL; |
2748 GError *err = NULL; |
| 2739 gint64 count; |
2749 gint64 count; |
| 2740 JsonBuilder *bldr; |
2750 JsonBuilder *bldr; |
| 2741 JsonNode *root; |
2751 JsonNode *root; |
| 2742 |
2752 |
| 2743 if (!fb_api_http_chk(api, res, &root)) { |
2753 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2744 return; |
2754 return; |
| 2745 } |
2755 } |
| 2746 |
2756 |
| 2747 values = fb_json_values_new(root); |
2757 values = fb_json_values_new(root); |
| 2748 fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, "$.unread_count"); |
2758 fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, "$.unread_count"); |
| 2806 fb_api_http_query(api, FB_API_QUERY_THREADS, bldr, |
2816 fb_api_http_query(api, FB_API_QUERY_THREADS, bldr, |
| 2807 fb_api_cb_unread); |
2817 fb_api_cb_unread); |
| 2808 } |
2818 } |
| 2809 |
2819 |
| 2810 static void |
2820 static void |
| 2811 fb_api_cb_sticker(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2821 fb_api_cb_sticker(GObject *source, GAsyncResult *result, gpointer data) { |
| 2812 gpointer data) |
2822 SoupSession *session = SOUP_SESSION(source); |
| 2813 { |
2823 SoupMessage *soupmsg = data; |
| 2814 FbApi *api = data; |
2824 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2815 FbApiMessage *msg; |
2825 FbApiMessage *msg; |
| 2816 FbJsonValues *values; |
2826 FbJsonValues *values; |
| 2817 GError *err = NULL; |
2827 GError *err = NULL; |
| 2818 GSList *msgs = NULL; |
2828 GSList *msgs = NULL; |
| 2819 JsonNode *node; |
2829 JsonNode *node; |
| 2820 JsonNode *root; |
2830 JsonNode *root; |
| 2821 |
2831 |
| 2822 if (!fb_api_http_chk(api, res, &root)) { |
2832 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2823 return; |
2833 return; |
| 2824 } |
2834 } |
| 2825 |
2835 |
| 2826 node = fb_json_node_get_nth(root, 0); |
2836 node = fb_json_node_get_nth(root, 0); |
| 2827 values = fb_json_values_new(node); |
2837 values = fb_json_values_new(node); |
| 2833 g_object_unref(values); |
2843 g_object_unref(values); |
| 2834 json_node_free(root); |
2844 json_node_free(root); |
| 2835 return; |
2845 return; |
| 2836 ); |
2846 ); |
| 2837 |
2847 |
| 2838 msg = g_object_steal_data(G_OBJECT(res), "fb-api-msg"); |
2848 msg = g_object_steal_data(G_OBJECT(soupmsg), "fb-api-msg"); |
| 2839 msg->flags |= FB_API_MESSAGE_FLAG_IMAGE; |
2849 msg->flags |= FB_API_MESSAGE_FLAG_IMAGE; |
| 2840 msg->text = fb_json_values_next_str_dup(values, NULL); |
2850 msg->text = fb_json_values_next_str_dup(values, NULL); |
| 2841 msgs = g_slist_prepend(msgs, msg); |
2851 msgs = g_slist_prepend(msgs, msg); |
| 2842 |
2852 |
| 2843 g_signal_emit_by_name(api, "messages", msgs); |
2853 g_signal_emit_by_name(api, "messages", msgs); |
| 2935 g_object_unref(values); |
2945 g_object_unref(values); |
| 2936 return TRUE; |
2946 return TRUE; |
| 2937 } |
2947 } |
| 2938 |
2948 |
| 2939 static void |
2949 static void |
| 2940 fb_api_cb_thread(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
2950 fb_api_cb_thread(GObject *source, GAsyncResult *result, gpointer data) { |
| 2941 gpointer data) |
2951 SoupSession *session = SOUP_SESSION(source); |
| 2942 { |
2952 SoupMessage *soupmsg = data; |
| 2943 FbApi *api = data; |
2953 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 2944 FbApiThread thrd; |
2954 FbApiThread thrd; |
| 2945 GError *err = NULL; |
2955 GError *err = NULL; |
| 2946 JsonNode *node; |
2956 JsonNode *node; |
| 2947 JsonNode *root; |
2957 JsonNode *root; |
| 2948 |
2958 |
| 2949 if (!fb_api_http_chk(api, res, &root)) { |
2959 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 2950 return; |
2960 return; |
| 2951 } |
2961 } |
| 2952 |
2962 |
| 2953 node = fb_json_node_get_nth(root, 0); |
2963 node = fb_json_node_get_nth(root, 0); |
| 2954 |
2964 |
| 2995 fb_json_bldr_add_str(bldr, "13", "false"); |
3005 fb_json_bldr_add_str(bldr, "13", "false"); |
| 2996 fb_api_http_query(api, FB_API_QUERY_THREAD, bldr, fb_api_cb_thread); |
3006 fb_api_http_query(api, FB_API_QUERY_THREAD, bldr, fb_api_cb_thread); |
| 2997 } |
3007 } |
| 2998 |
3008 |
| 2999 static void |
3009 static void |
| 3000 fb_api_cb_thread_create(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
3010 fb_api_cb_thread_create(GObject *source, GAsyncResult *result, gpointer data) { |
| 3001 gpointer data) |
3011 SoupSession *session = SOUP_SESSION(source); |
| 3002 { |
3012 SoupMessage *soupmsg = data; |
| |
3013 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 3003 const gchar *str; |
3014 const gchar *str; |
| 3004 FbApi *api = data; |
|
| 3005 FbId tid; |
3015 FbId tid; |
| 3006 FbJsonValues *values; |
3016 FbJsonValues *values; |
| 3007 GError *err = NULL; |
3017 GError *err = NULL; |
| 3008 JsonNode *root; |
3018 JsonNode *root; |
| 3009 |
3019 |
| 3010 if (!fb_api_http_chk(api, res, &root)) { |
3020 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 3011 return; |
3021 return; |
| 3012 } |
3022 } |
| 3013 |
3023 |
| 3014 values = fb_json_values_new(root); |
3024 values = fb_json_values_new(root); |
| 3015 fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.id"); |
3025 fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.id"); |
| 3125 "messaging.setthreadname", prms, |
3135 "messaging.setthreadname", prms, |
| 3126 fb_api_cb_http_bool); |
3136 fb_api_cb_http_bool); |
| 3127 } |
3137 } |
| 3128 |
3138 |
| 3129 static void |
3139 static void |
| 3130 fb_api_cb_threads(G_GNUC_UNUSED SoupSession *session, SoupMessage *res, |
3140 fb_api_cb_threads(GObject *source, GAsyncResult *result, gpointer data) { |
| 3131 gpointer data) |
3141 SoupSession *session = SOUP_SESSION(source); |
| 3132 { |
3142 SoupMessage *soupmsg = data; |
| 3133 FbApi *api = data; |
3143 FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); |
| 3134 FbApiThread *dthrd; |
3144 FbApiThread *dthrd; |
| 3135 FbApiThread thrd; |
3145 FbApiThread thrd; |
| 3136 GError *err = NULL; |
3146 GError *err = NULL; |
| 3137 GList *elms; |
3147 GList *elms; |
| 3138 GList *l; |
3148 GList *l; |
| 3139 GSList *thrds = NULL; |
3149 GSList *thrds = NULL; |
| 3140 JsonArray *arr; |
3150 JsonArray *arr; |
| 3141 JsonNode *root; |
3151 JsonNode *root; |
| 3142 |
3152 |
| 3143 if (!fb_api_http_chk(api, res, &root)) { |
3153 if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { |
| 3144 return; |
3154 return; |
| 3145 } |
3155 } |
| 3146 |
3156 |
| 3147 arr = fb_json_node_get_arr(root, "$.viewer.message_threads.nodes", |
3157 arr = fb_json_node_get_arr(root, "$.viewer.message_threads.nodes", |
| 3148 &err); |
3158 &err); |