summaryrefslogtreecommitdiff
path: root/src/porting.cpp
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2020-12-19 13:27:15 +0000
committerGitHub <noreply@github.com>2020-12-19 13:27:15 +0000
commit664f5ce9605b580b9500547fff1e54eac553f295 (patch)
treec1500f8d0110c9657d1a66c5ad9bad6a6acc16f4 /src/porting.cpp
parent025035db5c87e9eaa9f83859f860539fc4fb4dc0 (diff)
downloadminetest-664f5ce9605b580b9500547fff1e54eac553f295.tar.gz
minetest-664f5ce9605b580b9500547fff1e54eac553f295.tar.bz2
minetest-664f5ce9605b580b9500547fff1e54eac553f295.zip
Add open user data button to main menu (#10579)
Diffstat (limited to 'src/porting.cpp')
-rw-r--r--src/porting.cpp35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/porting.cpp b/src/porting.cpp
index e7ed4e090..4c87bddee 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -719,29 +719,48 @@ int mt_snprintf(char *buf, const size_t buf_size, const char *fmt, ...)
return c;
}
-bool openURL(const std::string &url)
+static bool open_uri(const std::string &uri)
{
- if ((url.substr(0, 7) != "http://" && url.substr(0, 8) != "https://") ||
- url.find_first_of("\r\n") != std::string::npos) {
- errorstream << "Invalid url: " << url << std::endl;
+ if (uri.find_first_of("\r\n") != std::string::npos) {
+ errorstream << "Unable to open URI as it is invalid, contains new line: " << uri << std::endl;
return false;
}
#if defined(_WIN32)
- return (intptr_t)ShellExecuteA(NULL, NULL, url.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32;
+ return (intptr_t)ShellExecuteA(NULL, NULL, uri.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32;
#elif defined(__ANDROID__)
- openURLAndroid(url);
+ openURIAndroid(uri);
return true;
#elif defined(__APPLE__)
- const char *argv[] = {"open", url.c_str(), NULL};
+ const char *argv[] = {"open", uri.c_str(), NULL};
return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv,
(*_NSGetEnviron())) == 0;
#else
- const char *argv[] = {"xdg-open", url.c_str(), NULL};
+ const char *argv[] = {"xdg-open", uri.c_str(), NULL};
return posix_spawnp(NULL, "xdg-open", NULL, NULL, (char**)argv, environ) == 0;
#endif
}
+bool open_url(const std::string &url)
+{
+ if (url.substr(0, 7) != "http://" && url.substr(0, 8) != "https://") {
+ errorstream << "Unable to open browser as URL is missing schema: " << url << std::endl;
+ return false;
+ }
+
+ return open_uri(url);
+}
+
+bool open_directory(const std::string &path)
+{
+ if (!fs::IsDir(path)) {
+ errorstream << "Unable to open directory as it does not exist: " << path << std::endl;
+ return false;
+ }
+
+ return open_uri(path);
+}
+
// Load performance counter frequency only once at startup
#ifdef _WIN32