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 '|'
 

Reply via email to