diff options
author | John Hernandez <129467592+H3rnand3zzz@users.noreply.github.com> | 2023-04-19 14:19:47 +0200 |
---|---|---|
committer | John Hernandez <129467592+H3rnand3zzz@users.noreply.github.com> | 2023-05-16 15:57:07 +0200 |
commit | 95e06ad16955f3b49c117cc6f2d53bf4da747154 (patch) | |
tree | 91738ed4485940d4d9fcb4fcd97caa391db82fda /src/tools | |
parent | 9a68aab01149c9781b899d482eb2c34f2cdf505c (diff) | |
download | profani-tty-95e06ad16955f3b49c117cc6f2d53bf4da747154.tar.gz |
Add url support (downloading) to `/plugins install`
Additional changes include code refactoring.
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/http_common.c | 6 | ||||
-rw-r--r-- | src/tools/http_download.c | 16 | ||||
-rw-r--r-- | src/tools/http_download.h | 1 | ||||
-rw-r--r-- | src/tools/plugin_download.c | 96 | ||||
-rw-r--r-- | src/tools/plugin_download.h | 55 |
5 files changed, 168 insertions, 6 deletions
diff --git a/src/tools/http_common.c b/src/tools/http_common.c index 4192a6ca..02391e63 100644 --- a/src/tools/http_common.c +++ b/src/tools/http_common.c @@ -54,7 +54,11 @@ http_print_transfer_update(ProfWin* window, char* id, const char* fmt, ...) g_string_vprintf(msg, fmt, args); va_end(args); - win_update_entry_message(window, id, msg->str); + if (window->type != WIN_CONSOLE) { + win_update_entry_message(window, id, msg->str); + } else { + cons_show("%s", msg->str); + } g_string_free(msg, TRUE); } diff --git a/src/tools/http_download.c b/src/tools/http_download.c index 71c9a1e1..bd34a4ed 100644 --- a/src/tools/http_download.c +++ b/src/tools/http_download.c @@ -4,6 +4,7 @@ * * Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com> * Copyright (C) 2020 William Wennerström <william@wstrm.dev> + * Copyright (C) 2019 - 2023 Michael Vetter <jubalh@iodoru.org> * * This file is part of Profanity. * @@ -57,6 +58,7 @@ #include "common.h" GSList* download_processes = NULL; +gboolean silent = FALSE; static int _xferinfo(void* userdata, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) @@ -82,8 +84,9 @@ _xferinfo(void* userdata, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultot dlperc = (100 * dlnow) / dltotal; } - http_print_transfer_update(download->window, download->url, - "Downloading '%s': %d%%", download->url, dlperc); + if (!silent) + http_print_transfer_update(download->window, download->url, + "Downloading '%s': %d%%", download->url, dlperc); pthread_mutex_unlock(&lock); @@ -107,13 +110,16 @@ http_file_get(void* userdata) CURL* curl; CURLcode res; + silent = download->silent; download->cancel = 0; download->bytes_received = 0; pthread_mutex_lock(&lock); - http_print_transfer(download->window, download->id, - "Downloading '%s': 0%%", download->url); + if (!silent) { + http_print_transfer(download->window, download->id, + "Downloading '%s': 0%%", download->url); + } FILE* outfh = fopen(download->filename, "wb"); if (outfh == NULL) { @@ -188,7 +194,7 @@ http_file_get(void* userdata) } free(err); } else { - if (!download->cancel) { + if (!download->cancel && !silent) { http_print_transfer_update(download->window, download->id, "Downloading '%s': done\nSaved to '%s'", download->url, download->filename); diff --git a/src/tools/http_download.h b/src/tools/http_download.h index 2c8d8a3d..f75ba4d7 100644 --- a/src/tools/http_download.h +++ b/src/tools/http_download.h @@ -57,6 +57,7 @@ typedef struct http_download_t ProfWin* window; pthread_t worker; int cancel; + gboolean silent; } HTTPDownload; void* http_file_get(void* userdata); diff --git a/src/tools/plugin_download.c b/src/tools/plugin_download.c new file mode 100644 index 00000000..60fa5806 --- /dev/null +++ b/src/tools/plugin_download.c @@ -0,0 +1,96 @@ +/* + * plugin_download.c + * vim: expandtab:ts=4:sts=4:sw=4 + * + * Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com> + * Copyright (C) 2019 - 2023 Michael Vetter <jubalh@iodoru.org> + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see <https://www.gnu.org/licenses/>. + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#include "config.h" + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <curl/curl.h> +#include <gio/gio.h> +#include <pthread.h> +#include <assert.h> +#include <errno.h> + +#include "profanity.h" +#include "event/client_events.h" +#include "tools/http_common.h" +#include "tools/plugin_download.h" +#include "config/preferences.h" +#include "plugins/plugins.h" +#include "ui/ui.h" +#include "ui/window.h" +#include "common.h" + +#define FALLBACK_MSG "" + +void* +plugin_download_install(void* userdata) +{ + HTTPDownload* plugin_dl = (HTTPDownload*)userdata; + + auto_char char* path = strdup(plugin_dl->filename); + auto_char char* https_url = strdup(plugin_dl->url); + plugin_dl->silent = TRUE; + + http_file_get(plugin_dl); + + if (is_regular_file(path)) { + GString* error_message = g_string_new(NULL); + auto_char char* plugin_name = basename_from_url(https_url); + gboolean result = plugins_install(plugin_name, path, error_message); + if (result) { + cons_show("Plugin installed and loaded: %s", plugin_name); + } else { + cons_show("Failed to install plugin: %s. %s", plugin_name, error_message->str); + } + g_string_free(error_message, TRUE); + } else { + cons_show_error("Downloaded file is not a file (?)"); + } + + remove(path); + + return NULL; +} + +void +plugin_download_add_download(HTTPDownload* plugin_dl) +{ + http_download_add_download(plugin_dl); +} diff --git a/src/tools/plugin_download.h b/src/tools/plugin_download.h new file mode 100644 index 00000000..70150e37 --- /dev/null +++ b/src/tools/plugin_download.h @@ -0,0 +1,55 @@ +/* + * plugin_download.h + * vim: expandtab:ts=4:sts=4:sw=4 + * + * Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com> + * Copyright (C) 2019 - 2023 Michael Vetter <jubalh@iodoru.org> + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see <https://www.gnu.org/licenses/>. + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#ifndef TOOLS_PLUGIN_DOWNLOAD_H +#define TOOLS_PLUGIN_DOWNLOAD_H + +#ifdef PLATFORM_CYGWIN +#define SOCKET int +#endif + +#include <sys/select.h> +#include <curl/curl.h> +#include "tools/http_common.h" +#include "tools/http_download.h" + +#include "ui/win_types.h" + +void* plugin_download_install(void* userdata); + +void plugin_download_add_download(HTTPDownload* download); + +#endif |