1
0
Fork 0

[download] refresh_dialog in display_download

Results are promising, lower CPU usage while displaying
download info dialog. Need to check bittorrent.
This commit is contained in:
Witold Filipczyk 2022-12-15 19:24:02 +01:00
parent f3dffb9fd8
commit af7bed47e6
2 changed files with 18 additions and 14 deletions

View File

@ -228,12 +228,20 @@ download_dialog_layouter(struct dialog_data *dlg_data)
mem_free(msg);
}
static enum dlg_refresh_code
refresh_file_download(struct dialog_data *dlg_data, void *data)
{
/* Always refresh (until we keep finished downloads) */
return are_there_downloads() ? REFRESH_DIALOG : REFRESH_STOP;
}
void
display_download(struct terminal *term, struct file_download *file_download,
struct session *ses)
{
/* [gettext_accelerator_context(display_download)] */
struct dialog *dlg;
struct dialog_data *ret;
if (!is_in_downloads_list(file_download))
return;
@ -282,9 +290,12 @@ display_download(struct terminal *term, struct file_download *file_download,
add_dlg_end(dlg, DOWNLOAD_WIDGETS_COUNT - !!file_download->external_handler);
#endif
do_dialog(term, dlg, getml(dlg, (void *) NULL));
}
ret = do_dialog(term, dlg, getml(dlg, (void *) NULL));
if (ret) {
refresh_dialog(ret, refresh_file_download, NULL);
}
}
/* The download manager */
@ -360,12 +371,6 @@ delete_file_download(struct listbox_item *item, int last)
register_bottom_half(do_abort_download, file_download);
}
static enum dlg_refresh_code
refresh_file_download(struct dialog_data *dlg_data, void *data)
{
/* Always refresh (until we keep finished downloads) */
return are_there_downloads() ? REFRESH_DIALOG : REFRESH_STOP;
}
/* TODO: Make it configurable */
#define DOWNLOAD_METER_WIDTH 15

View File

@ -141,8 +141,12 @@ abort_download(struct file_download *file_download)
if (file_download->ses)
check_questions_queue(file_download->ses);
if (file_download->dlg_data)
if (file_download->dlg_data) {
if (file_download->dlg_data->dlg && file_download->dlg_data->dlg->refresh) {
kill_timer(&file_download->dlg_data->dlg->refresh->timer);
}
cancel_dialog(file_download->dlg_data, NULL);
}
cancel_download(&file_download->download, file_download->stop);
if (file_download->uri) done_uri(file_download->uri);
@ -481,8 +485,6 @@ download_data_store(struct download *download, struct file_download *file_downlo
if_assert_failed term = file_download->term = NULL;
if (is_in_progress_state(download->state)) {
if (file_download->dlg_data)
redraw_dialog(file_download->dlg_data, 1);
return;
}
@ -600,9 +602,6 @@ download_data(struct download *download, struct file_download *file_download)
file_download->uri = get_uri_reference(cached->redirect);
file_download->download.state = connection_state(S_WAIT_REDIR);
if (file_download->dlg_data)
redraw_dialog(file_download->dlg_data, 1);
load_uri(file_download->uri, cached->uri, &file_download->download,
PRI_DOWNLOAD, CACHE_MODE_NORMAL,
download->progress ? download->progress->start : 0);