Tempo ramps - audio-locked meters have a bbt of 1|1|0
[ardour.git] / libs / pbd / openuri.cc
index 5e6cc9a2d6ad3df2d8cf20d698c951ac37f8ff3a..0d744ae50d56bac379296865988eb01ac670cd5a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012 Paul Davis 
+    Copyright (C) 2012 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #include "pbd/openuri.h"
 
 #ifdef __APPLE__
+#include <curl/curl.h>
        extern bool cocoa_open_url (const char*);
 #endif
 
+#ifdef PLATFORM_WINDOWS
+       #include <windows.h>
+       #include <shellapi.h>
+#endif
+
 bool
 PBD::open_uri (const char* uri)
 {
-#ifdef __APPLE__
+#ifdef PLATFORM_WINDOWS
+       ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOWNORMAL);
+       return true;
+#elif __APPLE__
        return cocoa_open_url (uri);
 #else
        EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa ();
@@ -49,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());
 
@@ -59,7 +74,25 @@ PBD::open_uri (const char* uri)
 }
 
 bool
-PBD::open_uri (const std::string& uri) 
+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
+}