feat: Implement color coded status messages for file transfers
Introduce meaningful color feedback for background tasks like file downloads and uploads. Progress is displayed in a neutral color, while successful completions turn green and failures turn red. We reuse the existing THEME colors for now. Add new UI flags ENTRY_COMPLETED and ENTRY_ERROR to the buffer entry system. So we don't misuse delivery receipts anymore. Fixes: https://github.com/profanity-im/profanity/issues/1758 Signed-off-by: Michael Vetter <jubalh@iodoru.org>
This commit is contained in:
14
src/ui/ui.h
14
src/ui/ui.h
@@ -25,12 +25,14 @@
|
||||
#include "otr/otr.h"
|
||||
#endif
|
||||
|
||||
#define NO_ME 1
|
||||
#define NO_DATE 2
|
||||
#define NO_EOL 4
|
||||
#define NO_COLOUR_FROM 8
|
||||
#define NO_COLOUR_DATE 16
|
||||
#define UNTRUSTED 32
|
||||
#define NO_ME 1
|
||||
#define NO_DATE 2
|
||||
#define NO_EOL 4
|
||||
#define NO_COLOUR_FROM 8
|
||||
#define NO_COLOUR_DATE 16
|
||||
#define UNTRUSTED 32
|
||||
#define ENTRY_COMPLETED 64
|
||||
#define ENTRY_ERROR 128
|
||||
|
||||
// core UI
|
||||
void ui_init(void);
|
||||
|
||||
@@ -1659,7 +1659,7 @@ win_appendln_highlight(ProfWin* window, theme_item_t theme_item, const char* con
|
||||
void
|
||||
win_print_http_transfer(ProfWin* window, const char* const message, char* id)
|
||||
{
|
||||
win_print_outgoing_with_receipt(window, "!", NULL, message, id, NULL);
|
||||
win_print_status_with_id(window, message, id, THEME_DEFAULT, 0);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1708,6 +1708,33 @@ win_update_entry_message(ProfWin* window, const char* const id, const char* cons
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
win_update_entry(ProfWin* window, const char* const id, const char* const message, theme_item_t theme_item, int flags)
|
||||
{
|
||||
if (window->type == WIN_CONSOLE)
|
||||
return;
|
||||
ProfBuffEntry* entry = buffer_get_entry_by_id(window->layout->buffer, id);
|
||||
if (entry) {
|
||||
if (message) {
|
||||
free(entry->message);
|
||||
entry->message = strdup(message);
|
||||
}
|
||||
entry->theme_item = theme_item;
|
||||
entry->flags |= flags;
|
||||
win_redraw(window);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
win_print_status_with_id(ProfWin* window, const char* const message, char* id, theme_item_t theme_item, int flags)
|
||||
{
|
||||
GDateTime* time = g_date_time_new_now_local();
|
||||
int y_start_pos = getcury(window->layout->win);
|
||||
_win_print_internal(window, "!", 0, time, flags, theme_item, NULL, message, NULL);
|
||||
buffer_append(window->layout->buffer, "!", 0, time, flags, theme_item, NULL, NULL, message, NULL, id, y_start_pos, getcury(window->layout->win));
|
||||
g_date_time_unref(time);
|
||||
}
|
||||
|
||||
void
|
||||
win_remove_entry_message(ProfWin* window, const char* const id)
|
||||
{
|
||||
|
||||
@@ -56,6 +56,8 @@ void win_sub_print(WINDOW* win, char* msg, gboolean newline, gboolean wrap, int
|
||||
void win_sub_newline_lazy(WINDOW* win);
|
||||
void win_mark_received(ProfWin* window, const char* const id);
|
||||
void win_update_entry_message(ProfWin* window, const char* const id, const char* const message);
|
||||
void win_update_entry(ProfWin* window, const char* const id, const char* const message, theme_item_t theme_item, int flags);
|
||||
void win_print_status_with_id(ProfWin* window, const char* const message, char* id, theme_item_t theme_item, int flags);
|
||||
|
||||
gboolean win_has_active_subwin(ProfWin* window);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user