From 0fe8f9a613e907461d51dc76ff17f43356a6d4f6 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Fri, 3 Jun 2022 22:01:25 +0300 Subject: [PATCH] mu-util-play: simplify Remove some unused options --- lib/utils/meson.build | 1 + lib/utils/mu-util.c | 37 ++++++++++++++----------------------- lib/utils/mu-util.h | 28 +++++++--------------------- mu/mu-cmd-extract.cc | 2 +- 4 files changed, 23 insertions(+), 45 deletions(-) diff --git a/lib/utils/meson.build b/lib/utils/meson.build index d28459de..ad466b2a 100644 --- a/lib/utils/meson.build +++ b/lib/utils/meson.build @@ -26,6 +26,7 @@ lib_mu_utils=static_library('mu-utils', [ 'mu-utils.cc'], dependencies: [ glib_dep, + gio_dep, config_h_dep, readline_dep ], diff --git a/lib/utils/mu-util.c b/lib/utils/mu-util.c index 51928881..a2e3bc61 100644 --- a/lib/utils/mu-util.c +++ b/lib/utils/mu-util.c @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -206,22 +207,6 @@ mu_util_create_dir_maybe (const gchar *path, mode_t mode, gboolean nowarn) return TRUE; } -gboolean -mu_util_is_local_file (const char* path) -{ - /* if it starts with file:// it's a local file (for the - * purposes of this function -- if it's on a remote FS it's - * still considered local) */ - if (g_ascii_strncasecmp ("file://", path, strlen("file://")) == 0) - return TRUE; - - if (access (path, R_OK) == 0) - return TRUE; - - return FALSE; -} - - gboolean mu_util_supports (MuFeature feature) { @@ -267,18 +252,24 @@ maybe_setsid (G_GNUC_UNUSED gpointer user_data) } gboolean -mu_util_play (const char *path, gboolean allow_local, gboolean allow_remote, - GError **err) +mu_util_play (const char *path, GError **err) { - gboolean rv; + GFile *gf; + gboolean rv, is_native; const gchar *argv[3]; const char *prog; g_return_val_if_fail (path, FALSE); - g_return_val_if_fail (mu_util_is_local_file (path) || allow_remote, - FALSE); - g_return_val_if_fail (!mu_util_is_local_file (path) || allow_local, - FALSE); + + gf = g_file_new_for_path(path); + is_native = g_file_is_native(gf); + g_object_unref(gf); + + if (!is_native) { + mu_util_g_set_error (err, MU_ERROR_FILE_CANNOT_EXECUTE, + "'%s' is not a native file", path); + return FALSE; + } prog = g_getenv ("MU_PLAY_PROGRAM"); if (!prog) { diff --git a/lib/utils/mu-util.h b/lib/utils/mu-util.h index 95978113..3dedc0af 100644 --- a/lib/utils/mu-util.h +++ b/lib/utils/mu-util.h @@ -85,17 +85,6 @@ gboolean mu_util_check_dir (const gchar* path, gboolean readable, gboolean writeable) G_GNUC_WARN_UNUSED_RESULT; -/** - * check if file is local, ie. on the local file system. this means - * that it's either having a file URI, *or* that it's an existing file - * - * @param path a path - * - * @return TRUE if the file is local, FALSE otherwise - */ -gboolean mu_util_is_local_file (const char* path); - - /** * is the current locale utf-8 compatible? * @@ -103,8 +92,6 @@ gboolean mu_util_is_local_file (const char* path); */ gboolean mu_util_locale_is_utf8 (void) G_GNUC_CONST; - - /** * get a 'summary' of the string, ie. the first /n/ lines of the * strings, with all newlines removed, replaced by single spaces @@ -141,20 +128,19 @@ gboolean mu_util_print_encoded (const char *frm, ...) G_GNUC_PRINTF(1,2); /** - * Try to 'play' (ie., open with it's associated program) a file. On - * MacOS, the the program 'open' is used for this; on other platforms - * 'xdg-open' to do the actual opening. In addition you can set it to another program - * by setting the MU_PLAY_PROGRAM environment variable + * Try to 'play' (ie., open with it's associated program) a file. On MacOS, the + * the program 'open' is used for this; on other platforms 'xdg-open' to do the + * actual opening. In addition you can set it to another program by setting the + * MU_PLAY_PROGRAM environment variable + * + * This requires a 'native' file, see g_file_is_native() * * @param path full path of the file to open - * @param allow_local allow local files (ie. with file:// prefix or fs paths) - * @param allow_remote allow URIs (ie., http, mailto) * @param err receives error information, if any * * @return TRUE if it succeeded, FALSE otherwise */ -gboolean mu_util_play (const char *path, gboolean allow_local, - gboolean allow_remote, GError **err); +gboolean mu_util_play (const char *path, GError **err); /** * Check whether program prog exists in PATH diff --git a/mu/mu-cmd-extract.cc b/mu/mu-cmd-extract.cc index 97adb353..d071441c 100644 --- a/mu/mu-cmd-extract.cc +++ b/mu/mu-cmd-extract.cc @@ -43,7 +43,7 @@ save_part(const Message::Part& part, size_t idx, const MuConfig* opts) if (opts->play) { GError *err{}; - if (auto res{mu_util_play(path.c_str(), TRUE, FALSE, &err)}; + if (auto res{mu_util_play(path.c_str(), &err)}; res != MU_OK) return Err(Error::Code::Play, &err, "playing '%s' failed", path.c_str());