about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorMarcoPolo-PasTonMolo <marcopolopastonmolo@protonmail.com>2023-02-13 23:40:58 +0200
committerMarcoPolo-PasTonMolo <marcopolopastonmolo@protonmail.com>2023-02-13 23:40:58 +0200
commit6d266984a4729f09eda42027d6781d26eb198d25 (patch)
tree45b06a90450a21c31d0d28856b44ee3409070fd8 /src/ui
parent11055715845d7d7e5d3ef42982d04d1b65d57ac2 (diff)
downloadprofani-tty-6d266984a4729f09eda42027d6781d26eb198d25.tar.gz
Fix quote and url autocompletion for MAM and history
After adding MAM quote and url autocompletion wouldn't pick up messages
from MAM or history(from DB) or would have them in the wrong order. This
commit fixes that.

Fixes https://github.com/profanity-im/profanity/issues/1770
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/chatwin.c12
-rw-r--r--src/ui/mucwin.c6
-rw-r--r--src/ui/privwin.c6
-rw-r--r--src/ui/window.c5
-rw-r--r--src/ui/window_list.c17
-rw-r--r--src/ui/window_list.h4
6 files changed, 33 insertions, 17 deletions
diff --git a/src/ui/chatwin.c b/src/ui/chatwin.c
index 864ae39f..399d0fe0 100644
--- a/src/ui/chatwin.c
+++ b/src/ui/chatwin.c
@@ -380,11 +380,13 @@ chatwin_incoming_msg(ProfChatWin* chatwin, ProfMessage* message, gboolean win_cr
         win_print_incoming(window, display_name, message);
     }
 
-    wins_add_urls_ac(window, message);
-    wins_add_quotes_ac(window, message->plain);
+    if (!message->is_mam) {
+        wins_add_urls_ac(window, message, FALSE);
+        wins_add_quotes_ac(window, message->plain, FALSE);
 
-    if (prefs_get_boolean(PREF_BEEP) && !message->is_mam) {
-        beep();
+        if (prefs_get_boolean(PREF_BEEP)) {
+            beep();
+        }
     }
 
     if (notify) {
@@ -406,7 +408,7 @@ chatwin_outgoing_msg(ProfChatWin* chatwin, const char* const message, char* id,
     assert(chatwin != NULL);
 
     ProfWin* window = (ProfWin*)chatwin;
-    wins_add_quotes_ac(window, message);
+    wins_add_quotes_ac(window, message, FALSE);
 
     char* enc_char;
     if (chatwin->outgoing_char) {
diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c
index ff32981f..a3d154e0 100644
--- a/src/ui/mucwin.c
+++ b/src/ui/mucwin.c
@@ -542,7 +542,7 @@ mucwin_outgoing_msg(ProfMucWin* mucwin, const char* const message, const char* c
         _mucwin_set_last_message(mucwin, id, message);
     }
 
-    wins_add_quotes_ac(window, message);
+    wins_add_quotes_ac(window, message, FALSE);
 }
 
 void
@@ -582,8 +582,8 @@ mucwin_incoming_msg(ProfMucWin* mucwin, const ProfMessage* const message, GSList
     }
 
     win_insert_last_read_position_marker((ProfWin*)mucwin, mucwin->roomjid);
-    wins_add_urls_ac(window, message);
-    wins_add_quotes_ac(window, message->plain);
+    wins_add_urls_ac(window, message, FALSE);
+    wins_add_quotes_ac(window, message->plain, FALSE);
 
     if (g_slist_length(mentions) > 0) {
         _mucwin_print_mention(window, message->plain, message->from_jid->resourcepart, mynick, mentions, ch, flags);
diff --git a/src/ui/privwin.c b/src/ui/privwin.c
index b683a839..3f095404 100644
--- a/src/ui/privwin.c
+++ b/src/ui/privwin.c
@@ -87,8 +87,8 @@ privwin_incoming_msg(ProfPrivateWin* privatewin, ProfMessage* message)
         }
     }
 
-    wins_add_urls_ac(window, message);
-    wins_add_quotes_ac(window, message->plain);
+    wins_add_urls_ac(window, message, FALSE);
+    wins_add_quotes_ac(window, message->plain, TRUE);
 
     if (prefs_get_boolean(PREF_BEEP)) {
         beep();
@@ -107,7 +107,7 @@ privwin_outgoing_msg(ProfPrivateWin* privwin, const char* const message)
     assert(privwin != NULL);
 
     ProfWin* window = (ProfWin*)privwin;
-    wins_add_quotes_ac(window, message);
+    wins_add_quotes_ac(window, message, FALSE);
     win_print_outgoing((ProfWin*)privwin, "-", NULL, NULL, message);
 }
 
diff --git a/src/ui/window.c b/src/ui/window.c
index 9d7b779e..4bbec7a4 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -35,6 +35,7 @@
  */
 
 #include "config.h"
+#include "ui/window_list.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -1498,6 +1499,8 @@ win_print_history(ProfWin* window, const ProfMessage* const message)
     jid_destroy(jidp);
 
     buffer_append(window->layout->buffer, "-", 0, message->timestamp, flags, THEME_TEXT_HISTORY, display_name, NULL, message->plain, NULL, NULL);
+    wins_add_urls_ac(window, message, FALSE);
+    wins_add_quotes_ac(window, message->plain, FALSE);
     _win_print_internal(window, "-", 0, message->timestamp, flags, THEME_TEXT_HISTORY, display_name, message->plain, NULL);
 
     free(display_name);
@@ -1526,6 +1529,8 @@ win_print_old_history(ProfWin* window, const ProfMessage* const message)
     jid_destroy(jidp);
 
     buffer_prepend(window->layout->buffer, "-", 0, message->timestamp, flags, THEME_TEXT_HISTORY, display_name, NULL, message->plain, NULL, NULL);
+    wins_add_urls_ac(window, message, TRUE);
+    wins_add_quotes_ac(window, message->plain, TRUE);
     _win_print_internal(window, "-", 0, message->timestamp, flags, THEME_TEXT_HISTORY, display_name, message->plain, NULL);
 
     free(display_name);
diff --git a/src/ui/window_list.c b/src/ui/window_list.c
index 19baa3a1..0a96b461 100644
--- a/src/ui/window_list.c
+++ b/src/ui/window_list.c
@@ -1315,7 +1315,7 @@ wins_get_next_attention(void)
 }
 
 void
-wins_add_urls_ac(const ProfWin* const win, const ProfMessage* const message)
+wins_add_urls_ac(const ProfWin* const win, const ProfMessage* const message, const gboolean flip)
 {
     GRegex* regex;
     GMatchInfo* match_info;
@@ -1326,7 +1326,11 @@ wins_add_urls_ac(const ProfWin* const win, const ProfMessage* const message)
     while (g_match_info_matches(match_info)) {
         gchar* word = g_match_info_fetch(match_info, 0);
 
-        autocomplete_add_reverse(win->urls_ac, word);
+        if (flip) {
+            autocomplete_add_unsorted(win->urls_ac, word, FALSE);
+        } else {
+            autocomplete_add_unsorted(win->urls_ac, word, TRUE);
+        }
         // for people who run profanity a long time, we don't want to waste a lot of memory
         autocomplete_remove_older_than_max_reverse(win->urls_ac, 20);
 
@@ -1339,9 +1343,14 @@ wins_add_urls_ac(const ProfWin* const win, const ProfMessage* const message)
 }
 
 void
-wins_add_quotes_ac(const ProfWin* const win, const char* const message)
+wins_add_quotes_ac(const ProfWin* const win, const char* const message, const gboolean flip)
 {
-    autocomplete_add_reverse(win->quotes_ac, message);
+    if (flip) {
+        autocomplete_add_unsorted(win->quotes_ac, message, FALSE);
+    } else {
+        autocomplete_add_unsorted(win->quotes_ac, message, TRUE);
+    }
+
     // for people who run profanity a long time, we don't want to waste a lot of memory
     autocomplete_remove_older_than_max_reverse(win->quotes_ac, 20);
 }
diff --git a/src/ui/window_list.h b/src/ui/window_list.h
index 788248b9..d9d11c58 100644
--- a/src/ui/window_list.h
+++ b/src/ui/window_list.h
@@ -102,9 +102,9 @@ void win_reset_search_attempts(void);
 char* win_close_autocomplete(const char* const search_str, gboolean previous, void* context);
 void win_close_reset_search_attempts(void);
 
-void wins_add_urls_ac(const ProfWin* const win, const ProfMessage* const message);
+void wins_add_urls_ac(const ProfWin* const win, const ProfMessage* const message, const gboolean flip);
 char* wins_get_url(const char* const search_str, gboolean previous, void* context);
-void wins_add_quotes_ac(const ProfWin* const win, const char* const message);
+void wins_add_quotes_ac(const ProfWin* const win, const char* const message, const gboolean flip);
 char* wins_get_quote(const char* const search_str, gboolean previous, void* context);
 
 #endif