#include <string>
#include <cerrno>
#include <gtkmm.h>
-#include <curl/curl.h>
#include "pbd/error.h"
+#include "pbd/string_convert.h"
+
#include "ardour/ardour.h"
#include "ardour/session_directory.h"
-#include "video_image_frame.h"
+
+#include "ardour_http.h"
+#include "utils.h"
#include "utils_videotl.h"
+#include "video_image_frame.h"
#ifdef WAF_BUILD
#include "gtk2ardour-version.h"
#ifndef ARDOUR_CURL_TIMEOUT
#define ARDOUR_CURL_TIMEOUT (60)
#endif
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace Gtk;
using namespace std;
using namespace ARDOUR;
using namespace VideoUtils;
+unsigned int VideoUtils::harvid_version = 0x0;
+
bool
-VideoUtils::confirm_video_outfn (std::string outfn, std::string docroot)
+VideoUtils::confirm_video_outfn (Gtk::Window& parent, std::string outfn, std::string docroot)
{
/* replace docroot's '/' to G_DIR_SEPARATOR for the comparison */
size_t look_here = 0;
}
if (Glib::file_test(outfn, Glib::FILE_TEST_EXISTS)) {
- ArdourDialog confirm (_("Confirm Overwrite"), true);
- Label m (_("A file with the same name already exists. Do you want to overwrite it?"));
- confirm.get_vbox()->pack_start (m, true, true);
- confirm.add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
- confirm.add_button (_("Overwrite"), Gtk::RESPONSE_ACCEPT);
- confirm.show_all ();
- if (confirm.run() == RESPONSE_CANCEL) { return false; }
+ bool overwrite = ARDOUR_UI_UTILS::overwrite_file_dialog (parent,
+ _("Confirm Overwrite"),
+ _("A file with the same name already exists. Do you want to overwrite it?"));
+
+ if (!overwrite) {
+ return false;
+ }
}
std::string dir = Glib::path_get_dirname (outfn);
if (config->get_video_advanced_setup()) {
return config->get_video_server_docroot();
}
+#ifndef PLATFORM_WINDOWS
return X_("/");
+#else
+ if (harvid_version >= 0x000802) { // 0.8.2
+ return X_("");
+ } else {
+ return X_("C:\\");
+ }
+#endif
}
std::string
if (config->get_video_advanced_setup()) {
return config->get_video_server_url();
}
- return X_("http://localhost:1554");
+ return X_("http://127.0.0.1:1554");
}
std::string
VideoUtils::video_dest_file (const std::string dir, const std::string infile)
{
- return dir + "a3_" + strip_file_extension(Glib::path_get_basename(infile)) + ".avi";
+ return Glib::build_filename(dir, strip_file_extension(Glib::path_get_basename(infile)) + ".avi");
}
std::string
, video_server_url.c_str()
, (video_server_url.length()>0 && video_server_url.at(video_server_url.length()-1) == '/')?"":"/"
, filepath.c_str());
- char *res = a3_curl_http_get(url, NULL);
- if (!res) {
+ std::string res = ArdourCurl::http_get (url, false);
+ if (res.empty ()) {
return false;
}
std::vector<std::vector<std::string> > lines;
- ParseCSV(std::string(res), lines);
- free(res);
+ ParseCSV(res, lines);
if (lines.empty() || lines.at(0).empty() || lines.at(0).size() != 6) {
return false;
}
if (atoi(lines.at(0).at(0)) != 1) return false; // version
video_start_offset = 0.0;
- video_aspect_ratio = atof (lines.at(0).at(3));
- video_file_fps = atof (lines.at(0).at(4));
- video_duration = atoll(lines.at(0).at(5));
+ video_aspect_ratio = string_to<double>(lines.at(0).at(3));
+ video_file_fps = string_to<double>(lines.at(0).at(4));
+ video_duration = string_to<int64_t>(lines.at(0).at(5));
+
+ if (video_aspect_ratio < 0.01 || video_file_fps < 0.01) {
+ /* catch errors early, aspect == 0 or fps == 0 will
+ * wreak havoc down the road */
+ return false;
+ }
return true;
}
}
}
-
-extern "C" {
-#include <curl/curl.h>
-
- struct A3MemoryStruct {
- char *data;
- size_t size;
- };
-
- static size_t
- WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) {
- size_t realsize = size * nmemb;
- struct A3MemoryStruct *mem = (struct A3MemoryStruct *)data;
-
- mem->data = (char *)realloc(mem->data, mem->size + realsize + 1);
- if (mem->data) {
- memcpy(&(mem->data[mem->size]), ptr, realsize);
- mem->size += realsize;
- mem->data[mem->size] = 0;
- }
- return realsize;
- }
-
- char *a3_curl_http_get (const char *u, int *status) {
- CURL *curl;
- CURLcode res;
- struct A3MemoryStruct chunk;
- long int httpstatus;
- if (status) *status = 0;
- //Glib::usleep(500000); return NULL; // TEST & DEBUG
- if (strncmp("http://", u, 7)) return NULL;
-
- chunk.data=NULL;
- chunk.size=0;
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, u);
-
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_USERAGENT, PROGRAM_NAME VERSIONSTRING);
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, ARDOUR_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-#ifdef CURLERRORDEBUG
- char curlerror[CURL_ERROR_SIZE] = "";
- curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curlerror);
-#endif
-
- res = curl_easy_perform(curl);
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpstatus);
- curl_easy_cleanup(curl);
- if (status) *status = httpstatus;
- if (res) {
-#ifdef CURLERRORDEBUG
- printf("a3_curl_http_get() failed: %s\n", curlerror);
-#endif
- return NULL;
- }
- if (httpstatus != 200) {
- free (chunk.data);
- chunk.data = NULL;
- }
- return (chunk.data);
- }
-
-} /* end extern "C" */