diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/http_upload.c | 21 | ||||
-rw-r--r-- | src/tools/http_upload.h | 5 | ||||
-rw-r--r-- | src/ui/window_list.c | 11 | ||||
-rw-r--r-- | src/xmpp/iq.c | 2 |
4 files changed, 27 insertions, 12 deletions
diff --git a/src/tools/http_upload.c b/src/tools/http_upload.c index 79ed006c..f126a72d 100644 --- a/src/tools/http_upload.c +++ b/src/tools/http_upload.c @@ -65,6 +65,7 @@ struct curl_data_t { size_t size; }; +GSList *upload_processes = NULL; static int _xferinfo(void *userdata, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) @@ -332,3 +333,23 @@ off_t file_size(const char* const filename) stat(filename, &st); return st.st_size; } + +void +http_upload_cancel_processes(ProfWin *window) +{ + GSList *upload_process = upload_processes; + while (upload_process) { + HTTPUpload *upload = upload_process->data; + if (upload->window == window) { + upload->cancel = 1; + break; + } + upload_process = g_slist_next(upload_process); + } +} + +void +http_upload_add_upload(HTTPUpload *upload) +{ + upload_processes = g_slist_append(upload_processes, upload); +} diff --git a/src/tools/http_upload.h b/src/tools/http_upload.h index b9b46ca7..60b1ea82 100644 --- a/src/tools/http_upload.h +++ b/src/tools/http_upload.h @@ -57,11 +57,12 @@ typedef struct http_upload_t { int cancel; } HTTPUpload; -GSList *upload_processes; - void* http_file_put(void *userdata); char* file_mime_type(const char* const file_name); off_t file_size(const char* const file_name); +void http_upload_cancel_processes(ProfWin *window); +void http_upload_add_upload(HTTPUpload *upload); + #endif diff --git a/src/ui/window_list.c b/src/ui/window_list.c index dd065c25..09b165e2 100644 --- a/src/ui/window_list.c +++ b/src/ui/window_list.c @@ -50,6 +50,7 @@ #include "ui/window_list.h" #include "xmpp/xmpp.h" #include "xmpp/roster_list.h" +#include "tools/http_upload.h" static GHashTable *windows; static int current; @@ -519,15 +520,7 @@ wins_close_by_num(int i) ProfWin *window = wins_get_by_num(i); if (window) { // cancel upload proccesses of this window - GSList *upload_process = upload_processes; - while (upload_process) { - HTTPUpload *upload = upload_process->data; - if (upload->window == window) { - upload->cancel = 1; - break; - } - upload_process = g_slist_next(upload_process); - } + http_upload_cancel_processes(window); switch (window->type) { case WIN_CHAT: diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 0559e10a..58e10e98 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -2402,7 +2402,7 @@ _http_upload_response_id_handler(xmpp_stanza_t *const stanza, void *const userda if (get_url) xmpp_free(ctx, get_url); pthread_create(&(upload->worker), NULL, &http_file_put, upload); - upload_processes = g_slist_append(upload_processes, upload); + http_upload_add_upload(upload); } else { log_error("Invalid XML in HTTP Upload slot"); return 1; |