about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorWilliam Wennerström <william@wstrm.dev>2020-12-08 20:01:17 +0100
committerWilliam Wennerström <william@wstrm.dev>2020-12-08 20:01:17 +0100
commitd7848e38bc2d916f88e889352f337a5c617fb26d (patch)
tree11faca1055e3bd9afb12361ebdf64e0338fa3deb /src
parent7f0165a91278647e9ddb72890e58a6db6b265a5d (diff)
downloadprofani-tty-d7848e38bc2d916f88e889352f337a5c617fb26d.tar.gz
Remove scheme and filetype matching for url (save|open)
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_defs.c39
-rw-r--r--src/command/cmd_funcs.c98
-rw-r--r--src/command/cmd_funcs.h4
-rw-r--r--src/config/preferences.c4
-rw-r--r--src/ui/console.c9
5 files changed, 88 insertions, 66 deletions
diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c
index d291856c..4a78ba70 100644
--- a/src/command/cmd_defs.c
+++ b/src/command/cmd_defs.c
@@ -2374,7 +2374,7 @@ static struct cmd_t command_defs[] = {
               "Settings for consistent color generation for nicks (XEP-0392). Including corrections for Color Vision Deficiencies. "
               "Your terminal needs to support 256 colors.")
       CMD_ARGS(
-              { "on|off|redgreen|blue", "Enable or disable nick colorization for MUC nicks. 'redgreen' is for people with red/green blindess and 'blue' for people with blue blindness." },
+              { "on|off|redgreen|blue", "Enable or disable nick colorization for MUC nicks. 'redgreen' is for people with red/green blindness and 'blue' for people with blue blindness." },
               { "own on|off", "Enable color generation for own nick. If disabled the color from the color from the theme ('me') will get used." })
       CMD_EXAMPLES(
               "/color off",
@@ -2493,26 +2493,35 @@ static struct cmd_t command_defs[] = {
 
     { "/executable",
       parse_args, 2, 4, &cons_executable_setting,
-      CMD_NOSUBFUNCS
-      CMD_MAINFUNC(cmd_executable)
+      CMD_SUBFUNCS(
+              { "avatar",  cmd_executable_avatar },
+              { "urlopen", cmd_executable_urlopen },
+              { "urlsave", cmd_executable_urlsave })
+      CMD_NOMAINFUNC
       CMD_TAGS(
               CMD_TAG_DISCOVERY)
       CMD_SYN(
               "/executable avatar <cmd>",
-              "/executable urlopen (<fileType>|DEF <require_save> <cmd>",
-              "/executable urlsave (<protocol>|DEF) <cmd>")
-      CMD_DESC(
-              "Configure executable that should be called upon a certain command."
-              "Default is xdg-open.")
-      CMD_ARGS(
-              { "avatar", "Set executable that is run in /avatar open. Use your favourite image viewer." },
-              { "urlopen", "Set executable that is run in /url open for a given file type. It may be your favorite browser or a specific viewer. Use DEF to set default command for undefined file type." },
-              { "urlsave", "Set executable that is run in /url save for a given protocol. Use your favourite downloader. Use DEF to set default command for undefined protocol." })
+              "/executable urlopen set <cmdtemplate>",
+              "/executable urlopen default",
+              "/executable urlsave set <cmdtemplate>",
+              "/executable urlsave default")
+      CMD_DESC(
+              "Configure executable that should be called upon a certain command.")
+      CMD_ARGS(
+              { "avatar", "Set executable that is run by /avatar open. Use your favorite image viewer." },
+              { "urlopen set", "Set executable that is run by /url open. It may be your favorite browser or a specific viewer." },
+              { "urlopen default", "Restore to default settings." },
+              { "urlsave set", "Set executable that is run by /url save. It may be your favorite downloader.'" },
+              { "urlsave default", "Use the built-in download method for saving." })
       CMD_EXAMPLES(
               "/executable avatar xdg-open",
-              "/executable urlopen DEF false \"xdg-open %u\"",
-              "/executable urlopen html false \"firefox %u\"",
-              "/executable urlsave aesgcm \"omut -d -o %p %u\"")
+              "/executable urlopen set \"xdg-open %u\"",
+              "/executable urlopen set \"firefox %u\"",
+              "/executable urlopen default",
+              "/executable urlsave set \"wget %u -O %p\"",
+              "/executable urlsave set \"curl %u -o %p\"",
+              "/executable urlsave default")
     },
 
     { "/url",
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index d2ec46ee..fd9d2ffd 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -9135,9 +9135,9 @@ cmd_url_open(ProfWin* window, const char* const command, gchar** args)
         goto out;
     }
 
-    cmd_template = prefs_get_string_with_option(PREF_URL_OPEN_CMD, scheme);
+    cmd_template = prefs_get_string(PREF_URL_OPEN_CMD);
     if (cmd_template == NULL) {
-        cons_show("No default open command found in url open preferences");
+        cons_show("No default `url open` command found in executables preferences.");
         goto out;
     }
 
@@ -9195,20 +9195,17 @@ cmd_url_save(ProfWin* window, const char* const command, gchar** args)
         goto out;
     }
 
-    cmd_template = prefs_get_string_with_option(PREF_URL_SAVE_CMD, scheme);
-    if (cmd_template == NULL) {
-        if (g_strcmp0(scheme, "http") == 0
-            || g_strcmp0(scheme, "https") == 0) {
-            _url_http_method(window, cmd_template, url, filename);
+    cmd_template = prefs_get_string(PREF_URL_SAVE_CMD);
+    if (cmd_template == NULL && (g_strcmp0(scheme, "http") == 0 || g_strcmp0(scheme, "https") == 0)) {
+        _url_http_method(window, cmd_template, url, filename);
 #ifdef HAVE_OMEMO
-        } else if (g_strcmp0(scheme, "aesgcm") == 0) {
-            _url_aesgcm_method(window, cmd_template, url, filename);
+    } else if (g_strcmp0(scheme, "aesgcm") == 0) {
+        _url_aesgcm_method(window, cmd_template, url, filename);
 #endif
-        } else {
-            cons_show_error("No download method defined for the scheme '%s'.", scheme);
-        }
-    } else {
+    } else if (cmd_template != NULL) {
         _url_external_method(cmd_template, url, filename);
+    } else {
+        cons_show_error("No download method defined for the scheme '%s'.", scheme);
     }
 
 out:
@@ -9223,48 +9220,59 @@ out:
 }
 
 gboolean
-cmd_executable(ProfWin* window, const char* const command, gchar** args)
+cmd_executable_avatar(ProfWin* window, const char* const command, gchar** args)
 {
-    guint num_args = g_strv_length(args);
-
-    if (g_strcmp0(args[0], "avatar") == 0) {
-        prefs_set_string(PREF_AVATAR_CMD, args[1]);
-        cons_show("Avatar command set to: %s", args[1]);
+    prefs_set_string(PREF_AVATAR_CMD, args[1]);
+    cons_show("`avatar` command set to invoke '%s'", args[1]);
+    return TRUE;
+}
 
-    } else if (g_strcmp0(args[0], "urlopen") == 0) {
-        if (num_args < 4) {
-            cons_bad_cmd_usage(command);
-            return TRUE;
-        }
+gboolean
+cmd_executable_urlopen(ProfWin* window, const char* const command, gchar** args)
+{
+    guint num_args = g_strv_length(args);
+    if (num_args < 2) {
+        cons_bad_cmd_usage(command);
+        return TRUE;
+    }
 
-        gchar* str = g_strjoinv(" ", &args[3]);
-        const gchar* const list[] = { args[2], str, NULL };
-        prefs_set_string_list_with_option(PREF_URL_OPEN_CMD, args[1], list);
-        cons_show("`url open` command set to: %s for %s files", str, args[1]);
+    if (g_strcmp0(args[1], "set") == 0 && num_args >= 3) {
+        gchar* str = g_strjoinv(" ", &args[2]);
+        prefs_set_string(PREF_URL_OPEN_CMD, str);
+        cons_show("`url open` command set to invoke '%s'", str);
         g_free(str);
 
-    } else if (g_strcmp0(args[0], "urlsave") == 0) {
+    } else if (g_strcmp0(args[1], "default") == 0) {
+        prefs_set_string(PREF_URL_SAVE_CMD, NULL);
+        gchar* def = prefs_get_string(PREF_URL_SAVE_CMD);
+        cons_show("`url open` command set to invoke %s (default)", def);
+        g_free(def);
+    } else {
+        cons_bad_cmd_usage(command);
+    }
 
-        if (num_args < 3) {
-            cons_bad_cmd_usage(command);
-            return TRUE;
-        }
+    return TRUE;
+}
 
-        if (g_strcmp0(args[1], "set") == 0 && num_args >= 4) {
-            gchar* str = g_strjoinv(" ", &args[3]);
-            prefs_set_string_with_option(PREF_URL_SAVE_CMD, args[2], str);
-            cons_show("`url save` command set to: %s for scheme %s", str, args[2]);
-            g_free(str);
+gboolean
+cmd_executable_urlsave(ProfWin* window, const char* const command, gchar** args)
+{
 
-        } else if (g_strcmp0(args[1], "clear") == 0) {
-            prefs_set_string_with_option(PREF_URL_SAVE_CMD, args[2], NULL);
-            cons_show("`url save` will use internal download method for scheme %s", args[2]);
+    guint num_args = g_strv_length(args);
+    if (num_args < 2) {
+        cons_bad_cmd_usage(command);
+        return TRUE;
+    }
 
-        } else {
-            cons_bad_cmd_usage(command);
-            return TRUE;
-        }
+    if (g_strcmp0(args[1], "set") == 0 && num_args >= 3) {
+        gchar* str = g_strjoinv(" ", &args[2]);
+        prefs_set_string(PREF_URL_SAVE_CMD, str);
+        cons_show("`url save` command set to invoke '%s'", str);
+        g_free(str);
 
+    } else if (g_strcmp0(args[1], "default") == 0) {
+        prefs_set_string(PREF_URL_SAVE_CMD, NULL);
+        cons_show("`url save` will use built-in download method (default)");
     } else {
         cons_bad_cmd_usage(command);
     }
diff --git a/src/command/cmd_funcs.h b/src/command/cmd_funcs.h
index 03c92522..4955972c 100644
--- a/src/command/cmd_funcs.h
+++ b/src/command/cmd_funcs.h
@@ -237,6 +237,8 @@ gboolean cmd_slashguard(ProfWin* window, const char* const command, gchar** args
 gboolean cmd_serversoftware(ProfWin* window, const char* const command, gchar** args);
 gboolean cmd_url_open(ProfWin* window, const char* const command, gchar** args);
 gboolean cmd_url_save(ProfWin* window, const char* const command, gchar** args);
-gboolean cmd_executable(ProfWin* window, const char* const command, gchar** args);
+gboolean cmd_executable_avatar(ProfWin* window, const char* const command, gchar** args);
+gboolean cmd_executable_urlopen(ProfWin* window, const char* const command, gchar** args);
+gboolean cmd_executable_urlsave(ProfWin* window, const char* const command, gchar** args);
 
 #endif
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 7a9b842b..9d7d4f7b 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -170,7 +170,7 @@ _prefs_load(void)
         value = g_string_append(value, val);
         value = g_string_append(value, " %u;");
 
-        g_key_file_set_locale_string(prefs, PREF_GROUP_EXECUTABLES, "url.open.cmd", "DEF", value->str);
+        g_key_file_set_locale_string(prefs, PREF_GROUP_EXECUTABLES, "url.open.cmd", "*", value->str);
         g_key_file_remove_key(prefs, PREF_GROUP_LOGGING, "urlopen.cmd", NULL);
 
         g_string_free(value, TRUE);
@@ -529,7 +529,7 @@ prefs_get_string_with_option(preference_t pref, gchar* option)
 
     if (result == NULL) {
         // check for user set default
-        result = g_key_file_get_locale_string(prefs, group, key, "DEF", NULL);
+        result = g_key_file_get_locale_string(prefs, group, key, "*", NULL);
         if (result == NULL) {
             if (def) {
                 // use hardcoded profanity default
diff --git a/src/ui/console.c b/src/ui/console.c
index 623556f7..306b13d5 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -2068,17 +2068,20 @@ cons_correction_setting(void)
 void
 cons_executable_setting(void)
 {
-    char* avatar = prefs_get_string(PREF_AVATAR_CMD);
+    gchar* avatar = prefs_get_string(PREF_AVATAR_CMD);
     cons_show("Default '/avatar open' command (/executable avatar)                      : %s", avatar);
     g_free(avatar);
 
     //TODO: there needs to be a way to get all the "locales"/schemes so we can
     //display the default openers for all filetypes
-    char* urlopen = prefs_get_string_with_option(PREF_URL_OPEN_CMD, "");
+    gchar* urlopen = prefs_get_string(PREF_URL_OPEN_CMD);
     cons_show("Default '/url open' command (/executable urlopen)                        : %s", urlopen);
     g_free(urlopen);
 
-    char* urlsave = prefs_get_string(PREF_URL_SAVE_CMD);
+    gchar* urlsave = prefs_get_string(PREF_URL_SAVE_CMD);
+    if (urlsave == NULL) {
+        urlsave = g_strdup("(built-in)");
+    }
     cons_show("Default '/url save' command (/executable urlsave)                        : %s", urlsave);
     g_free(urlsave);
 }