Hello community, here is the log from the commit of package purple-rocketchat for openSUSE:Leap:15.2 checked in at 2020-06-21 21:58:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/purple-rocketchat (Old) and /work/SRC/openSUSE:Leap:15.2/.purple-rocketchat.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "purple-rocketchat" Sun Jun 21 21:58:50 2020 rev:5 rq:816171 version:0.0+hg20200403 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/purple-rocketchat/purple-rocketchat.changes 2020-01-15 15:45:43.191332885 +0100 +++ /work/SRC/openSUSE:Leap:15.2/.purple-rocketchat.new.3606/purple-rocketchat.changes 2020-06-21 21:58:55.084086057 +0200 @@ -1,0 +2,8 @@ +Thu Apr 16 09:50:34 UTC 2020 - Matej Cepl <[email protected]> + +- Update to version 0.0+hg20200403 (changes since 0.0+hg20190218): + * 800ef89: Attempt to fetch user statuses at login. Not quite working yet though + * f723268: Subscribe to status changes to help issue #61 + * 284839c: Use 'hg' instead of 'git' for PLUGIN_VERSION. + +------------------------------------------------------------------- Old: ---- purple-rocketchat-0.0+hg20190218.tar.xz New: ---- purple-rocketchat-0.0+hg20200403.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ purple-rocketchat.spec ++++++ --- /var/tmp/diff_new_pack.4D8WOv/_old 2020-06-21 21:58:55.372087709 +0200 +++ /var/tmp/diff_new_pack.4D8WOv/_new 2020-06-21 21:58:55.372087709 +0200 @@ -1,7 +1,7 @@ # # spec file for package purple-rocketchat # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %define _name rocketchat Name: purple-rocketchat -Version: 0.0+hg20190218 +Version: 0.0+hg20200403 Release: 0 Summary: RocketChat protocol plugin for libpurple License: GPL-2.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.4D8WOv/_old 2020-06-21 21:58:55.400087870 +0200 +++ /var/tmp/diff_new_pack.4D8WOv/_new 2020-06-21 21:58:55.400087870 +0200 @@ -4,7 +4,6 @@ <param name="url">https://bitbucket.org/EionRobb/purple-rocketchat</param> <param name="filename">purple-rocketchat</param> <param name="versionformat">0.0+hg{date|localdate|shortdate}</param> - <param name="revision">cb171c8e78b92d71a738460dbc21ec4555d26f21</param> </service> <service mode="disabled" name="recompress"> <param name="file">*.tar</param> ++++++ purple-rocketchat-0.0+hg20190218.tar.xz -> purple-rocketchat-0.0+hg20200403.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/purple-rocketchat-0.0+hg20190218/Makefile new/purple-rocketchat-0.0+hg20200403/Makefile --- old/purple-rocketchat-0.0+hg20190218/Makefile 2019-02-18 19:17:59.000000000 +0100 +++ new/purple-rocketchat-0.0+hg20200403/Makefile 2020-04-03 12:58:52.000000000 +0200 @@ -18,7 +18,7 @@ endif ifneq ($(REVISION_ID),) -PLUGIN_VERSION ?= 0.9.$(BUILD_DATE).git.r$(REVISION_NUMBER).$(REVISION_ID) +PLUGIN_VERSION ?= 0.9.$(BUILD_DATE).hg.r$(REVISION_NUMBER).$(REVISION_ID) else PLUGIN_VERSION ?= 0.9.$(BUILD_DATE) endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/purple-rocketchat-0.0+hg20190218/librocketchat.c new/purple-rocketchat-0.0+hg20200403/librocketchat.c --- old/purple-rocketchat-0.0+hg20190218/librocketchat.c 2019-02-18 19:17:59.000000000 +0100 +++ new/purple-rocketchat-0.0+hg20200403/librocketchat.c 2020-04-03 12:58:52.000000000 +0200 @@ -146,7 +146,7 @@ #define PURPLE_CONVERSATION_UPDATE_UNSEEN PURPLE_CONV_UPDATE_UNSEEN #define PURPLE_IS_IM_CONVERSATION(conv) (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) #define PURPLE_IS_CHAT_CONVERSATION(conv) (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) -#define PURPLE_CONVERSATION(chatorim) (chatorim == NULL ? NULL : chatorim->conv) +#define PURPLE_CONVERSATION(chatorim) ((chatorim) == NULL ? NULL : (chatorim)->conv) #define PURPLE_IM_CONVERSATION(conv) PURPLE_CONV_IM(conv) #define PURPLE_CHAT_CONVERSATION(conv) PURPLE_CONV_CHAT(conv) #define purple_conversation_present_error purple_conv_present_error @@ -771,6 +771,12 @@ purple_http_request_header_set(request, "Accept", "*/*"); purple_http_request_header_set(request, "User-Agent", ROCKETCHAT_USERAGENT); purple_http_request_header_set(request, "Cookie", cookies); + if (ya->session_token && *ya->session_token) { + purple_http_request_header_set(request, "X-Auth-Token", ya->session_token); + } + if (ya->self_user_id && *ya->self_user_id) { + purple_http_request_header_set(request, "X-User-Id", ya->self_user_id); + } if (postdata) { purple_debug_info("rocketchat", "With postdata %s\n", postdata); @@ -805,6 +811,12 @@ g_string_append_printf(headers, "Accept: */*\r\n"); g_string_append_printf(headers, "User-Agent: " ROCKETCHAT_USERAGENT "\r\n"); g_string_append_printf(headers, "Cookie: %s\r\n", cookies); + if (ya->session_token && *ya->session_token) { + g_string_append_printf(headers, "X-Auth-Token: %s\r\n", ya->session_token); + } + if (ya->self_user_id && *ya->self_user_id) { + g_string_append_printf(headers, "X-User-Id: %s\r\n", ya->self_user_id); + } if (postdata) { purple_debug_info("rocketchat", "With postdata %s\n", postdata); @@ -845,6 +857,7 @@ static void rc_mark_room_messages_read(RocketChatAccount *ya, const gchar *room_id); static void rc_account_connected(RocketChatAccount *ya, JsonNode *node, gpointer user_data, JsonObject *error); static void rc_login_response(RocketChatAccount *ya, JsonNode *node, gpointer user_data, JsonObject *error); +static void rc_got_users_presence(RocketChatAccount *ya, JsonNode *node, gpointer user_data, JsonObject *error); static void rc_set_two_factor_auth_code_cb(gpointer data, const gchar *twofactorcode) @@ -928,9 +941,15 @@ response = json_node_get_object(node); if (json_object_has_member(response, "token")) { + g_free(ya->session_token); ya->session_token = g_strdup(json_object_get_string_member(response, "token")); }//a["{\"msg\":\"result\",\"id\":\"1\",\"result\":{\"id\":\"hZKg86uJavE6jYLya\",\"token\":\"OvG63dE9x79demZnrmBv4vnYYlGMMB-wRKVWFcTxQbv\",\"tokenExpires\":{\"$date\":1485062242977}}}"] //a["{\"msg\":\"result\",\"id\":\"5\",\"error\":{\"error\":403,\"reason\":\"User has no password set\",\"message\":\"User has no password set [403]\",\"errorType\":\"Meteor.Error\"}}"] + + // Download all user presence (requires the session_token) + gchar *url = g_strconcat("https://", ya->server, ya->path, "/api/v1/users.presence", NULL); + rc_fetch_url(ya, url, NULL, rc_got_users_presence, NULL); + g_free(url); } static void @@ -1009,6 +1028,29 @@ } static void +rc_got_users_presence(RocketChatAccount *ya, JsonNode *node, gpointer user_data, JsonObject *error) +{ + if (node != NULL) { + JsonObject *response = json_node_get_object(node); + JsonArray *users = json_object_get_array_member(response, "users"); + gint i, len = json_array_get_length(users); + + //latest are first + for (i = 0; i < len; i++) { + JsonObject *user = json_array_get_object_element(users, i); + const gchar *username = json_object_get_string_member(user, "username"); + const gchar *status = json_object_get_string_member(user, "status"); + const gchar *name = json_object_get_string_member(user, "name"); + + purple_protocol_got_user_status(ya->account, username, status, NULL); + if (name != NULL) { + purple_serv_got_alias(ya->pc, username, name); + } + } + } +} + +static void rc_account_connected(RocketChatAccount *ya, JsonNode *node, gpointer user_data, JsonObject *error) { // Subscribe to user presences @@ -1072,6 +1114,30 @@ } } + { + const gchar *subs[] = {"user-status", "updateAvatar", "roles-change", NULL}; + guint i; + //Subscribe to avatar/status changes + for (i = 0; subs[i]; i++) { + data = json_object_new(); + params = json_array_new(); + + id = g_strdup_printf("%012XFFFF", g_random_int()); + json_object_set_string_member(data, "id", id); + g_free(id); + + json_object_set_string_member(data, "msg", "sub"); + json_object_set_string_member(data, "name", "stream-notify-logged"); + + json_array_add_string_element(params, subs[i]); + json_array_add_boolean_element(params, FALSE); + + json_object_set_array_member(data, "params", params); + + rc_socket_write_json(ya, data); + } + } + // Listen to all incoming direct messages? data = json_object_new(); params = json_array_new(); @@ -1448,7 +1514,6 @@ users = g_list_delete_link(users, users); } - g_list_free(users); g_list_free(flags); } } else if (purple_strequal(msg, "changed")) { @@ -1520,6 +1585,7 @@ if (cb == NULL) { // Getting notified about a buddy we dont know about yet //TODO add buddy + g_strfreev(event_split); return; } cbflags = purple_chat_user_get_flags(cb); @@ -1593,6 +1659,29 @@ } g_strfreev(event_split); + } else if (purple_strequal(collection, "stream-notify-logged")) { + JsonObject *fields = json_object_get_object_member(obj, "fields"); + const gchar *eventName = json_object_get_string_member(fields, "eventName"); + JsonArray *args = json_object_get_array_member(fields, "args"); + + if (purple_strequal(eventName, "user-status")) { + //"args": [["uNqJeFuag2344i62k", "rocket.cat", 1]] + JsonArray *statusarr = json_array_get_array_element(args, 0); + const gchar *username = json_array_get_string_element(statusarr, 1); + guint64 status_id = json_array_get_int_element(statusarr, 2); + + const gchar *status = "offline"; + if (status_id == 1) { + status = "online"; + } else if (status_id == 2) { + status = "away"; + } else if (status_id == 3) { + status = "busy"; + } + + purple_protocol_got_user_status(ya->account, username, status, NULL); + } + } } else if (purple_strequal(msg, "removed")) { const gchar *collection = json_object_get_string_member(obj, "collection");
