Refactor for threaded external executable for built-in download methods
This commit is contained in:
@@ -47,6 +47,7 @@
|
||||
#include <gio/gio.h>
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "profanity.h"
|
||||
#include "event/client_events.h"
|
||||
@@ -146,8 +147,28 @@ aesgcm_file_get(void* userdata)
|
||||
free(https_url);
|
||||
free(fragment);
|
||||
|
||||
if (aesgcm_dl->cmd_template != NULL) {
|
||||
gchar** argv = format_call_external_argv(aesgcm_dl->cmd_template,
|
||||
aesgcm_dl->url,
|
||||
aesgcm_dl->filename);
|
||||
|
||||
// TODO(wstrm): Log the error.
|
||||
if (!call_external(argv, NULL, NULL)) {
|
||||
http_print_transfer_update(aesgcm_dl->window, aesgcm_dl->url,
|
||||
"Downloading '%s' failed: Unable to call "
|
||||
"command '%s' with file at '%s' (%s).",
|
||||
aesgcm_dl->url,
|
||||
aesgcm_dl->cmd_template,
|
||||
aesgcm_dl->filename,
|
||||
"TODO(wstrm): Log the error");
|
||||
}
|
||||
|
||||
g_strfreev(argv);
|
||||
}
|
||||
|
||||
free(aesgcm_dl->filename);
|
||||
free(aesgcm_dl->url);
|
||||
free(aesgcm_dl->cmd_template);
|
||||
free(aesgcm_dl);
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -52,6 +52,7 @@ typedef struct aesgcm_download_t
|
||||
{
|
||||
char* url;
|
||||
char* filename;
|
||||
char* cmd_template;
|
||||
ProfWin* window;
|
||||
pthread_t worker;
|
||||
HTTPDownload* http_dl;
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
char* http_basename_from_url(const char* url);
|
||||
void http_print_transfer(ProfWin* window, char* url, const char* fmt, ...);
|
||||
void http_print_transfer_update(ProfWin* window, char* url,
|
||||
const char* fmt, ...);
|
||||
void http_print_transfer_update(ProfWin* window, char* url, const char* fmt, ...);
|
||||
gchar** http_format_external_argv(const char* cmd, const char* url, const char* filename);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <gio/gio.h>
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "profanity.h"
|
||||
#include "event/client_events.h"
|
||||
@@ -187,6 +188,25 @@ http_file_get(void* userdata)
|
||||
download_processes = g_slist_remove(download_processes, download);
|
||||
pthread_mutex_unlock(&lock);
|
||||
|
||||
if (download->cmd_template != NULL) {
|
||||
gchar** argv = format_call_external_argv(download->cmd_template,
|
||||
download->url,
|
||||
download->filename);
|
||||
|
||||
// TODO(wstrm): Log the error.
|
||||
if (!call_external(argv, NULL, NULL)) {
|
||||
http_print_transfer_update(download->window, download->url,
|
||||
"Downloading '%s' failed: Unable to call "
|
||||
"command '%s' with file at '%s' (%s).",
|
||||
download->url,
|
||||
download->cmd_template,
|
||||
download->filename,
|
||||
"TODO(wstrm): Log the error");
|
||||
}
|
||||
|
||||
g_strfreev(argv);
|
||||
}
|
||||
|
||||
free(download->url);
|
||||
free(download->filename);
|
||||
free(download);
|
||||
|
||||
@@ -51,6 +51,7 @@ typedef struct http_download_t
|
||||
{
|
||||
char* url;
|
||||
char* filename;
|
||||
char* cmd_template;
|
||||
curl_off_t bytes_received;
|
||||
ProfWin* window;
|
||||
pthread_t worker;
|
||||
|
||||
Reference in New Issue
Block a user