Hello community,
here is the log from the commit of package purple-rocketchat for
openSUSE:Factory checked in at 2020-04-16 23:05:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/purple-rocketchat (Old)
and /work/SRC/openSUSE:Factory/.purple-rocketchat.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "purple-rocketchat"
Thu Apr 16 23:05:57 2020 rev:5 rq:794572 version:0.0+hg20200403
Changes:
--------
--- /work/SRC/openSUSE:Factory/purple-rocketchat/purple-rocketchat.changes
2019-03-10 09:37:13.604149640 +0100
+++
/work/SRC/openSUSE:Factory/.purple-rocketchat.new.2738/purple-rocketchat.changes
2020-04-16 23:06:14.871834729 +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.L3vpDX/_old 2020-04-16 23:06:16.571836242 +0200
+++ /var/tmp/diff_new_pack.L3vpDX/_new 2020-04-16 23:06:16.575836246 +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.L3vpDX/_old 2020-04-16 23:06:16.599836267 +0200
+++ /var/tmp/diff_new_pack.L3vpDX/_new 2020-04-16 23:06:16.599836267 +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");