Add additional PBD::string_to/to_string specializations for PBD::ID
[ardour.git] / libs / pbd / openuri.cc
index 5f4f1ab5461cd83306a51a65ee43b7229aade13f..0d744ae50d56bac379296865988eb01ac670cd5a 100644 (file)
@@ -29,6 +29,7 @@
 #include "pbd/openuri.h"
 
 #ifdef __APPLE__
+#include <curl/curl.h>
        extern bool cocoa_open_url (const char*);
 #endif
 
@@ -57,8 +58,14 @@ PBD::open_uri (const char* uri)
                global_epa->restore ();
        }
 
+       std::string s(uri);
+       while (s.find("\\") != std::string::npos)
+               s.replace(s.find("\\"), 1, "\\\\");
+       while (s.find("\"") != std::string::npos)
+               s.replace(s.find("\\"), 1, "\\\"");
+
        std::string command = "xdg-open ";
-       command += uri;
+       command += '"' + s + '"';
        command += " &";
        (void) system (command.c_str());
 
@@ -71,3 +78,21 @@ PBD::open_uri (const std::string& uri)
 {
        return open_uri (uri.c_str());
 }
+
+bool
+PBD::open_folder (const std::string& d)
+{
+#ifdef __APPLE__
+       CURL *curl = curl_easy_init ();
+       bool rv = false;
+       if (curl) {
+               char * e = curl_easy_escape (curl, d.c_str(), d.size());
+               std::string url = "file:///" + std::string(e);
+               rv = PBD::open_uri (url);
+               curl_free (e);
+       }
+       return rv;
+#else
+       return PBD::open_uri (d);
+#endif
+}