Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package purple-mattermost for
openSUSE:Factory checked in at 2022-12-06 14:23:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/purple-mattermost (Old)
and /work/SRC/openSUSE:Factory/.purple-mattermost.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "purple-mattermost"
Tue Dec 6 14:23:57 2022 rev:3 rq:1040464 version:2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/purple-mattermost/purple-mattermost.changes
2021-05-18 18:27:20.830727137 +0200
+++
/work/SRC/openSUSE:Factory/.purple-mattermost.new.1835/purple-mattermost.changes
2022-12-06 14:24:13.766063704 +0100
@@ -1,0 +2,7 @@
+Mon Dec 5 20:41:32 UTC 2022 - Dirk Müller <[email protected]>
+
+- update to 2.1:
+ * Fetch last 60 messages when a channel is joined for the first time from
+ Pidgin.
+
+-------------------------------------------------------------------
Old:
----
v2.0.tar.gz
New:
----
v2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ purple-mattermost.spec ++++++
--- /var/tmp/diff_new_pack.m5Dl6W/_old 2022-12-06 14:24:14.194067352 +0100
+++ /var/tmp/diff_new_pack.m5Dl6W/_new 2022-12-06 14:24:14.202067420 +0100
@@ -1,7 +1,7 @@
#
# spec file for package purple-mattermost
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 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 mattermost
Name: purple-mattermost
-Version: 2.0
+Version: 2.1
Release: 0
Summary: A libpurple/Pidgin plugin to connect to Mattermost
License: GPL-3.0-or-later
++++++ v2.0.tar.gz -> v2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/purple-mattermost-2.0/.github/workflows/release.yml
new/purple-mattermost-2.1/.github/workflows/release.yml
--- old/purple-mattermost-2.0/.github/workflows/release.yml 2021-02-18
18:13:37.000000000 +0100
+++ new/purple-mattermost-2.1/.github/workflows/release.yml 2022-05-06
10:22:54.000000000 +0200
@@ -15,6 +15,7 @@
- name: Install System dependencies
run: |
+ sudo apt-get update -y
sudo apt-get install libpurple-dev libjson-glib-dev libglib2.0-dev
gettext git make libmarkdown2-dev build-essential mingw-w64 mercurial
p7zip-full nsis
- name: Download Pidgin and Build dependencies
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/purple-mattermost-2.0/libmattermost.c
new/purple-mattermost-2.1/libmattermost.c
--- old/purple-mattermost-2.0/libmattermost.c 2021-02-18 18:13:37.000000000
+0100
+++ new/purple-mattermost-2.1/libmattermost.c 2022-05-06 10:22:54.000000000
+0200
@@ -472,6 +472,68 @@
void
mm_set_status(PurpleAccount *account, PurpleStatus *status);
+// when Pidgin is open and a new channel is joined then add it to the blist
+static void
+mm_add_joined_channel_to_blist(MattermostAccount *ma, MattermostChannel
*mm_channel)
+{
+ if (mm_channel_is_hidden(ma, mm_channel->id)) {
+ mm_g_free_mattermost_channel(mm_channel);
+ return;
+ }
+
+ mm_set_group_chat(ma, mm_channel->team_id, mm_channel->name,
mm_channel->id);
+ PurpleChat *chat = mm_purple_blist_find_chat(ma, mm_channel->id);
+
+ if (chat == NULL) {
+ GHashTable *defaults = g_hash_table_new_full(g_str_hash,
g_str_equal, NULL, g_free);
+
+ const gchar *alias;
+ g_hash_table_insert(defaults, "team_id",
g_strdup(mm_channel->team_id));
+ g_hash_table_insert(defaults, "id", g_strdup(mm_channel->id));
+ g_hash_table_insert(defaults, "creator_id",
g_strdup(mm_channel->creator_id));
+ g_hash_table_insert(defaults, "type",
g_strdup(mm_channel->type));
+ g_hash_table_insert(defaults, "display_name",
g_strdup(mm_channel->display_name));
+
+ alias = mm_get_chat_alias(ma, mm_channel);
+
+ if (mm_channel->type && *(mm_channel->type) !=
MATTERMOST_CHANNEL_GROUP) {
+ g_hash_table_insert(defaults, "name",
g_strconcat(mm_channel->name, MATTERMOST_CHANNEL_SEPARATOR,
g_hash_table_lookup(ma->teams, mm_channel->team_id), NULL));
+ } else {
+ g_hash_table_insert(defaults, "name",
g_strdup(mm_channel->name));
+ }
+
+ chat = purple_chat_new(ma->account, alias, defaults);
+ purple_blist_add_chat(chat, mm_get_or_create_default_group(),
NULL);
+ purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
"gtk-autojoin", FALSE /*autojoin*/);
+ purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
"gtk-persistent", TRUE);
+
+ purple_chat_set_alias(chat, alias);
+ g_hash_table_replace(ma->group_chats, g_strdup(mm_channel->id),
g_strdup(mm_channel->name));
+ g_hash_table_replace(ma->group_chats_rev,
g_strdup(mm_channel->name), g_strdup(mm_channel->id));
+ g_hash_table_replace(ma->aliases, g_strdup(mm_channel->id),
g_strdup(alias));
+ if (mm_channel->creator_id) {
+ g_hash_table_replace(ma->group_chats_creators,
g_strdup(mm_channel->id), g_strdup(mm_channel->creator_id));
+ }
+ }
+
+ const gchar *alias;
+ alias = mm_get_chat_alias(ma, mm_channel);
+
+ g_hash_table_replace(ma->aliases, g_strdup(mm_channel->id),
g_strdup(alias));
+
+ PurpleChatConversation *chatconv =
purple_conversations_find_chat(ma->pc, g_str_hash(mm_channel->id));
+
+ if (!chatconv && !purple_blist_node_get_bool(PURPLE_BLIST_NODE(chat),
"gtk-autojoin")) {
+ return;
+ }
+
+ PurpleChatConversation *conv = purple_serv_got_joined_chat(ma->pc,
g_str_hash(mm_channel->id), alias);
+ purple_conversation_set_data(PURPLE_CONVERSATION(conv), "id",
g_strdup(mm_channel->id));
+ purple_conversation_set_data(PURPLE_CONVERSATION(conv), "team_id",
g_strdup(mm_channel->team_id));
+ purple_conversation_set_data(PURPLE_CONVERSATION(conv), "name",
g_strdup(mm_channel->name));
+ purple_conversation_present(PURPLE_CONVERSATION(conv));
+}
+
static void
mm_add_channels_to_blist(MattermostAccount *ma, JsonNode *node, gpointer
user_data)
{
@@ -595,59 +657,9 @@
for (j = mm_channels; j != NULL; j=j->next) {
MattermostChannel *channel = j->data;
- mm_set_group_chat(ma, channel->team_id, channel->name,
channel->id);
+ mm_add_joined_channel_to_blist(ma, channel);
PurpleChat *chat = mm_purple_blist_find_chat(ma, channel->id);
-
- if (chat == NULL) {
- GHashTable *defaults =
g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
-
- const gchar *alias;
- g_hash_table_insert(defaults, "team_id",
g_strdup(channel->team_id));
- g_hash_table_insert(defaults, "id",
g_strdup(channel->id));
- g_hash_table_insert(defaults, "creator_id",
g_strdup(channel->creator_id));
- g_hash_table_insert(defaults, "type",
g_strdup(channel->type));
- g_hash_table_insert(defaults, "display_name",
g_strdup(channel->display_name));
-
- alias = mm_get_chat_alias(ma,channel);
-
- if (channel->type && *(channel->type) !=
MATTERMOST_CHANNEL_GROUP) {
- g_hash_table_insert(defaults, "name",
g_strconcat(channel->name, MATTERMOST_CHANNEL_SEPARATOR,
g_hash_table_lookup(ma->teams, channel->team_id), NULL));
- } else {
- g_hash_table_insert(defaults, "name",
g_strdup(channel->name));
- }
-
-
//g_hash_table_insert(defaults,"display_name",g_strdup(alias));
-
- chat = purple_chat_new(ma->account, alias, defaults);
- purple_blist_add_chat(chat,
mm_get_or_create_default_group(), NULL);
- purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
"gtk-autojoin", FALSE /*autojoin*/);
- purple_blist_node_set_bool(PURPLE_BLIST_NODE(chat),
"gtk-persistent", TRUE);
-
- purple_chat_set_alias(chat, alias);
- g_hash_table_replace(ma->group_chats,
g_strdup(channel->id), g_strdup(channel->name));
- g_hash_table_replace(ma->group_chats_rev,
g_strdup(channel->name), g_strdup(channel->id));
-
g_hash_table_replace(ma->aliases,g_strdup(channel->id),g_strdup(alias));
- if (channel->creator_id) {
- g_hash_table_replace(ma->group_chats_creators,
g_strdup(channel->id), g_strdup(channel->creator_id));
- }
- }
-
- const gchar *alias;
- alias = mm_get_chat_alias(ma,channel);
-
-
g_hash_table_replace(ma->aliases,g_strdup(channel->id),g_strdup(alias));
-
- PurpleChatConversation *chatconv =
purple_conversations_find_chat(ma->pc, g_str_hash(channel->id));
-
- if (chatconv ||
purple_blist_node_get_bool(PURPLE_BLIST_NODE(chat), "gtk-autojoin")) {
-
- PurpleChatConversation *conv =
purple_serv_got_joined_chat(ma->pc, g_str_hash(channel->id), alias);
- purple_conversation_set_data(PURPLE_CONVERSATION(conv),
"id", g_strdup(channel->id));
- purple_conversation_set_data(PURPLE_CONVERSATION(conv),
"team_id", g_strdup(channel->team_id));
- purple_conversation_set_data(PURPLE_CONVERSATION(conv),
"name", g_strdup(channel->name));
- purple_conversation_present(PURPLE_CONVERSATION(conv));
- }
// already called from mm_join_chat
if (!purple_blist_node_get_bool(PURPLE_BLIST_NODE(chat),
"gtk-autojoin")) mm_get_channel_by_id(ma, channel->team_id, channel->id);
}
@@ -1029,6 +1041,11 @@
if (mm_purple_blist_find_chat(ma, id) == NULL) {
// user is trying to join a new channel
+
+ // add the new channel to blist
+ mm_add_joined_channel_to_blist(ma, tmpchannel);
+
+ // add user to the channel
mm_add_user_to_channel(ma, tmpchannel);
} else {
// user is already present in the channel, we just open the
chat conv
@@ -1799,6 +1816,10 @@
mm_fetch_url(ma, url, MATTERMOST_HTTP_GET, NULL, -1,
mm_file_metadata_response, mmfile);
g_free(url);
+
+ if (!mmfile->uri) {
+ mmfile->uri = mm_build_url(ma, "/files/%s",
mmfile->mmchlink->file_id);
+ }
}
static void
@@ -1946,11 +1967,11 @@
g_free(msg_post);
if (json_object_get_int_member(post, "delete_at")) {
- gchar *tmp = g_strconcat(_("Deleted: "),
message, NULL);
+ gchar *tmp = g_strconcat(_("Deleted : "),
message, NULL);
g_free(message);
message = tmp;
} else if (json_object_get_int_member(post, "edit_at"))
{
- gchar *tmp = g_strconcat(_("Edited: "),
message, NULL);
+ gchar *tmp = g_strconcat(_("Edited : "),
message, NULL);
g_free(message);
message = tmp;
}
@@ -2205,6 +2226,34 @@
return message;
}
+static gint64
+mm_get_channel_approximate_view_time(MattermostAccount *ma, const gchar *id)
+{
+ gchar *tmptime = NULL;
+
+ PurpleChat *chat = mm_purple_blist_find_chat(ma, id);
+ if (chat) {
+ tmptime =
g_strdup(purple_blist_node_get_string(PURPLE_BLIST_NODE(chat),
"channel_approximate_view_time"));
+ } else {
+ PurpleBuddy *buddy = purple_blist_find_buddy(ma->account,
g_hash_table_lookup(ma->one_to_ones,id));
+ if (buddy) {
+ tmptime =
g_strdup(purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy),
"channel_approximate_view_time"));
+ }
+ }
+
+ // If "tmptime" is null it means a new channel is added to Pidgin which
was not existing before
+ if(!tmptime) {
+ g_free(tmptime);
+ return MATTERMOST_NEW_CHANNEL_FOUND;
+ }
+
+ gint64 viewtime = g_ascii_strtoll(tmptime, NULL, 10);
+ purple_debug_info("alphatest maxx2", "%s\n", tmptime);
+ g_free(tmptime);
+ return viewtime;
+}
+
+
static void
mm_process_msg(MattermostAccount *ma, JsonNode *element_node)
{
@@ -2244,10 +2293,10 @@
// do nothing
} else
//type system_join_channel, channel_id is ""
- if (!purple_strequal(channel_id,"") &&
purple_strequal(ma->self->user_id, user_id)) {
+ if (!purple_strequal(channel_id, "") &&
purple_strequal(ma->self->user_id, user_id)) {
mm_get_channel_by_id(ma, team_id, channel_id);
- } else if (!purple_strequal(channel_id,"") &&
g_hash_table_lookup(ma->group_chats, channel_id)) {
+ } else if (!purple_strequal(channel_id, "") &&
g_hash_table_lookup(ma->group_chats, channel_id)) {
PurpleChatConversation *chatconv =
purple_conversations_find_chat(ma->pc, g_str_hash(channel_id));
if (!chatconv) {
PurpleChat *chat =
mm_purple_blist_find_chat(ma,channel_id);
@@ -2277,7 +2326,8 @@
}
}
- if (!purple_strequal(channel_id,"")) {
+ // If a new channel is joined then first show the last
60 messages and then channel joined message
+ if (!purple_strequal(channel_id, "") &&
mm_get_channel_approximate_view_time(ma, channel_id) !=
MATTERMOST_NEW_CHANNEL_FOUND) {
mm_process_room_message(ma, post, data);
}
}
@@ -3593,30 +3643,6 @@
g_free(url);
}
-static gint64
-mm_get_channel_approximate_view_time(MattermostAccount *ma, MattermostChannel
*channel)
-{
- gchar *tmptime = NULL;
-
- PurpleChat *chat = mm_purple_blist_find_chat(ma, channel->id);
- if (chat) {
- tmptime =
g_strdup(purple_blist_node_get_string(PURPLE_BLIST_NODE(chat),"channel_approximate_view_time"));
- } else {
- PurpleBuddy *buddy =
purple_blist_find_buddy(ma->account,g_hash_table_lookup(ma->one_to_ones,channel->id));
- if (buddy) {
- tmptime =
g_strdup(purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy),"channel_approximate_view_time"));
- }
- }
-
- if(!tmptime) {
- tmptime = g_strdup_printf("%" G_GINT64_FORMAT,
(g_get_real_time() / 1000)); // now.
- }
-
- gint64 viewtime = g_ascii_strtoll(tmptime, NULL, 10);
- g_free(tmptime);
- return viewtime;
-}
-
static void mm_get_history_of_room(MattermostAccount *ma, MattermostChannel
*channel, gint64 since);
static void
@@ -3636,15 +3662,16 @@
gint i, len = json_array_get_length(order);
// do not show updates (such as reactions). only edits, new posts and
deletes
- for (i = len - 1; i >= 0; i--) {
- const gchar *post_id = json_array_get_string_element(order, i);
- JsonObject *post = json_object_get_object_member(posts,
post_id);
-
- const gint64 since = mm_get_channel_approximate_view_time(ma,
channel);
- if (json_object_get_int_member(post, "create_at") < since &&
json_object_get_int_member(post, "edit_at") < since &&
json_object_get_int_member(post, "delete_at") < since) {
- json_array_remove_element(order, i);
- }
- }
+ // We don't need this now, as in a channel we are fetching last 60
messages where post "create_at" time could be lesser than channel joined time
"since"
+ // for (i = len - 1; i >= 0; i--) {
+ // const gchar *post_id = json_array_get_string_element(order, i);
+ // JsonObject *post = json_object_get_object_member(posts,
post_id);
+
+ // const gint64 since = mm_get_channel_approximate_view_time(ma,
channel->id);
+ // if (json_object_get_int_member(post, "create_at") < since &&
json_object_get_int_member(post, "edit_at") < since &&
json_object_get_int_member(post, "delete_at") < since) {
+ // json_array_remove_element(order, i);
+ // }
+ // }
len = json_array_get_length(order);
if (len > 0) {
@@ -3708,10 +3735,17 @@
if (!channel->id) return;
if (since < 0) {
- since = mm_get_channel_approximate_view_time(ma, channel);
+ const gchar *channel_id = channel->id;
+ since = mm_get_channel_approximate_view_time(ma, channel_id);
+ }
+
+ if (since == MATTERMOST_NEW_CHANNEL_FOUND) {
+ // If a new channel is joined then fetch last 60 messages
+ url = mm_build_url(ma,"/channels/%s/posts?page=0&per_page=%s",
channel->id, g_strdup_printf("%i",MATTERMOST_HISTORY_PAGE_SIZE));
+ } else {
+ url =
mm_build_url(ma,"/channels/%s/posts?page=%s&per_page=%s&since=%"
G_GINT64_FORMAT "", channel->id, g_strdup_printf("%i",channel->page_history),
g_strdup_printf("%i", MATTERMOST_HISTORY_PAGE_SIZE), since);
}
- url = mm_build_url(ma,"/channels/%s/posts?page=%s&per_page=%s&since=%"
G_GINT64_FORMAT "", channel->id, g_strdup_printf("%i",channel->page_history),
g_strdup_printf("%i", MATTERMOST_HISTORY_PAGE_SIZE), since);
mm_fetch_url(ma, url, MATTERMOST_HTTP_GET, NULL, -1,
mm_got_history_of_room, channel);
g_free(url);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/purple-mattermost-2.0/libmattermost.h
new/purple-mattermost-2.1/libmattermost.h
--- old/purple-mattermost-2.0/libmattermost.h 2021-02-18 18:13:37.000000000
+0100
+++ new/purple-mattermost-2.1/libmattermost.h 2022-05-06 10:22:54.000000000
+0200
@@ -33,9 +33,11 @@
#define MATTERMOST_BUFFER_DEFAULT_SIZE 40960
#define MATTERMOST_USER_PAGE_SIZE 200 // 200 is MAX. in paged queries (and
default)
-#define MATTERMOST_HISTORY_PAGE_SIZE 60 // 200 is MAX in paged queries (60 is
default)
+#define MATTERMOST_HISTORY_PAGE_SIZE 60 // 200 is MAX in paged queries (60 is
default) also used to fetch last 60 messages for a new channel
#define MATTERMOST_MAX_PAGES 10 // that is 2000 users or posts in paged queries
+#define MATTERMOST_NEW_CHANNEL_FOUND -2 // -2 indicates that timestamp does
not exist for a new channel
+
#define MATTERMOST_DEFAULT_SERVER ""
#define MATTERMOST_SERVER_SPLIT_CHAR '|'