about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorJohn Hernandez <129467592+H3rnand3zzz@users.noreply.github.com>2023-04-19 14:19:47 +0200
committerJohn Hernandez <129467592+H3rnand3zzz@users.noreply.github.com>2023-05-16 15:57:07 +0200
commit95e06ad16955f3b49c117cc6f2d53bf4da747154 (patch)
tree91738ed4485940d4d9fcb4fcd97caa391db82fda /src/tools
parent9a68aab01149c9781b899d482eb2c34f2cdf505c (diff)
downloadprofani-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.c6
-rw-r--r--src/tools/http_download.c16
-rw-r--r--src/tools/http_download.h1
-rw-r--r--src/tools/plugin_download.c96
-rw-r--r--src/tools/plugin_download.h55
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