1
0
mirror of https://github.com/irssi/irssi.git synced 2024-09-01 04:14:16 -04:00

Merge pull request #1022 from heikkiorsila/scrollback_max_age

Implement a method to delete messages older than given time in scroll…
This commit is contained in:
ailin-nemui 2019-04-05 15:58:36 +02:00 committed by GitHub
commit a2f2d1899b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -39,6 +39,13 @@ int mirc_colors[] = { 15, 0, 1, 2, 12, 4, 5, 6, 14, 10, 3, 11, 9, 13, 8, 7,
/* 76-87 */ 217, 223, 229, 193, 157, 158, 159, 153, 147, 183, 219, 212,
/* 88-98 */ 16, 233, 235, 237, 239, 241, 244, 247, 250, 254, 231, -1 };
static int scrollback_lines, scrollback_time, scrollback_burst_remove;
/*
* If positive, remove lines older than scrollback_max_age seconds.
* Deletion is triggered by the "gui print text finished" signal (i.e. a message
* for the window). Note: "Day changed to" message also cause messages to be
* deleted within 1 day latency.
*/
static int scrollback_max_age;
static int next_xpos, next_ypos;
@ -182,9 +189,10 @@ void gui_printtext_window_border(int x, int y)
static void remove_old_lines(TEXT_BUFFER_VIEW_REC *view)
{
LINE_REC *line;
time_t cur_time = time(NULL);
time_t old_time;
old_time = time(NULL)-scrollback_time+1;
old_time = cur_time - scrollback_time + 1;
if (view->buffer->lines_count >=
scrollback_lines+scrollback_burst_remove) {
/* remove lines by line count */
@ -200,6 +208,21 @@ static void remove_old_lines(TEXT_BUFFER_VIEW_REC *view)
textbuffer_view_remove_line(view, line);
}
}
if (scrollback_max_age > 0) {
old_time = cur_time - scrollback_max_age;
while (view->buffer->lines_count > 0) {
line = view->buffer->first_line;
if (line->info.time >= old_time) {
/*
* The first line is newer than the threshold
* time -> no need to remove more lines.
*/
break;
}
textbuffer_view_remove_line(view, line);
}
}
}
static void get_colors(int flags, int *fg, int *bg, int *attr)
@ -337,6 +360,7 @@ static void read_settings(void)
{
scrollback_lines = settings_get_int("scrollback_lines");
scrollback_time = settings_get_time("scrollback_time")/1000;
scrollback_max_age = settings_get_time("scrollback_max_age")/1000;
scrollback_burst_remove = settings_get_int("scrollback_burst_remove");
}
@ -349,6 +373,7 @@ void gui_printtext_init(void)
settings_add_int("history", "scrollback_lines", 500);
settings_add_time("history", "scrollback_time", "1day");
settings_add_time("history", "scrollback_max_age", "0");
settings_add_int("history", "scrollback_burst_remove", 10);
signal_add("gui print text", (SIGNAL_FUNC) sig_gui_print_text);