diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-12-19 13:27:15 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-19 13:27:15 +0000 |
commit | 664f5ce9605b580b9500547fff1e54eac553f295 (patch) | |
tree | c1500f8d0110c9657d1a66c5ad9bad6a6acc16f4 /src/porting.cpp | |
parent | 025035db5c87e9eaa9f83859f860539fc4fb4dc0 (diff) | |
download | minetest-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.cpp | 35 |
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 |