\r
// Allow connections to time out (without using signals)\r
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);\r
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);\r
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30);\r
\r
\r
}\r
};\r
\r
//------------------------------------------------------------------------\r
-std::string Mootcher::getAudioFile(std::string originalFileName, std::string ID, std::string audioURL, Gtk::ProgressBar *progress_bar)\r
+std::string Mootcher::getAudioFile(std::string originalFileName, std::string ID, std::string audioURL, SoundFileBrowser *caller)\r
{\r
ensureWorkingDir();\r
std::string audioFileName = basePath + "snd/" + ID + "-" + originalFileName;\r
curl_easy_setopt(curl, CURLOPT_WRITEDATA, theFile);\r
\r
std::cerr << "downloading " << audioFileName << " from " << audioURL << "..." << std::endl;\r
+ /* hack to get rid of the barber-pole stripes */\r
+ caller->progress_bar.hide();\r
+ caller->progress_bar.show();\r
\r
curl_easy_setopt (curl, CURLOPT_NOPROGRESS, 0); // turn on the progress bar\r
curl_easy_setopt (curl, CURLOPT_PROGRESSFUNCTION, progress_callback);\r
- curl_easy_setopt (curl, CURLOPT_PROGRESSDATA, progress_bar);\r
+ curl_easy_setopt (curl, CURLOPT_PROGRESSDATA, caller);\r
\r
CURLcode res = curl_easy_perform(curl);\r
fclose(theFile);\r
\r
curl_easy_setopt (curl, CURLOPT_NOPROGRESS, 1); // turn off the progress bar\r
- progress_bar->set_fraction(0.0);\r
-\r
+ caller->progress_bar.set_fraction(0.0);\r
+ \r
if( res != 0 ) {\r
std::cerr << "curl error " << res << " (" << curl_easy_strerror(res) << ")" << std::endl;\r
remove( audioFileName.c_str() ); \r
}\r
\r
//---------\r
-int Mootcher::progress_callback(void *bar, double dltotal, double dlnow, double ultotal, double ulnow)\r
+int Mootcher::progress_callback(void *caller, double dltotal, double dlnow, double ultotal, double ulnow)\r
{\r
\r
+SoundFileBrowser *sfb = (SoundFileBrowser *) caller;\r
//XXX I hope it's OK to do GTK things in this callback. Otherwise\r
// I'll have to do stuff like in interthread_progress_window.\r
+ if (sfb->freesound_stop) {\r
+ return -1;\r
+ }\r
+ \r
\r
- Gtk::ProgressBar *progress_bar = (Gtk::ProgressBar *) bar;\r
- progress_bar->set_fraction(dlnow/dltotal);\r
+ sfb->progress_bar.set_fraction(dlnow/dltotal);\r
/* Make sure the progress widget gets updated */\r
while (Glib::MainContext::get_default()->iteration (false)) {\r
/* do nothing */\r
#include <gtkmm/progressbar.h>\r
//#include <ctime>\r
\r
+#include "sfdb_ui.h"\r
+\r
#include "curl/curl.h"\r
\r
//--- struct to store XML file\r
Mootcher(const char *saveLocation);\r
~Mootcher();\r
\r
- std::string getAudioFile(std::string originalFileName, std::string ID, std::string audioURL, Gtk::ProgressBar *progress_bar);\r
+ std::string getAudioFile(std::string originalFileName, std::string ID, std::string audioURL, SoundFileBrowser *caller);\r
std::string searchText(std::string query, int page, std::string filter, enum sortMethod sort);\r
\r
private:\r
passbox->pack_start (freesound_search_btn, false, false);
passbox->pack_start (progress_bar);
+ passbox->pack_end (freesound_stop_btn, false, false);
+ freesound_stop_btn.set_label(_("Stop"));
Gtk::ScrolledWindow *scroll = manage(new ScrolledWindow);
scroll->add(freesound_list_view);
freesound_list_view.append_column(_("ID") , freesound_list_columns.id);
freesound_list_view.append_column(_("Filename"), freesound_list_columns.filename);
- freesound_list_view.append_column(_("URI") , freesound_list_columns.uri);
+ // freesound_list_view.append_column(_("URI") , freesound_list_columns.uri);
freesound_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_list_view_selected));
freesound_list_view.get_selection()->set_mode (SELECTION_MULTIPLE);
freesound_list_view.signal_row_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::freesound_list_view_activated));
freesound_search_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_search_clicked));
freesound_entry.signal_activate().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_search_clicked));
+ freesound_stop_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_stop_clicked));
notebook.append_page (*vbox, _("Search Freesound"));
}
#endif
gdk_window_set_cursor (get_window()->gobj(), gdk_cursor_new(GDK_WATCH));
gdk_flush();
- file = theMootcher.getAudioFile(ofn, id, uri, &progress_bar);
+ freesound_stop = false;
+ file = theMootcher.getAudioFile(ofn, id, uri, this);
gdk_window_set_cursor (get_window()->gobj(), prev_cursor);
- chooser.set_filename (file);
- set_response_sensitive (RESPONSE_OK, true);
+ if (file != "") {
+ chooser.set_filename (file);
+ set_response_sensitive (RESPONSE_OK, true);
+ }
} else {
set_response_sensitive (RESPONSE_OK, false);
}
freesound_search();
}
+void
+SoundFileBrowser::freesound_stop_clicked ()
+{
+ freesound_stop = true;
+}
+
void
SoundFileBrowser::freesound_search()
gdk_window_set_cursor (get_window()->gobj(), gdk_cursor_new(GDK_WATCH));
gdk_flush();
- string str = theMootcher.getAudioFile(ofn, id, uri, &progress_bar);
- results.push_back (str);
+ freesound_stop = false;
+ string str = theMootcher.getAudioFile(ofn, id, uri, this);
+ if (str != "") {
+ results.push_back (str);
+ }
gdk_window_set_cursor (get_window()->gobj(), prev_cursor);
#include <sigc++/signal.h>
+#include <gtkmm/stock.h>
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/frame.h>
#include <gtkmm/label.h>
#include <gtkmm/textview.h>
+#include <gtkmm/table.h>
+#include <gtkmm/liststore.h>
+#include <gtkmm/spinbutton.h>
+#include <gtkmm/notebook.h>
+
#include "ardour/audiofilesource.h"
#include "ardour/session_handle.h"
FreesoundColumns freesound_list_columns;
Glib::RefPtr<Gtk::ListStore> freesound_list;
- Gtk::ProgressBar progress_bar;
+ Gtk::Button freesound_stop_btn;
public:
SoundFileBrowser (Gtk::Window& parent, std::string title, ARDOUR::Session* _s, bool persistent);
Gtk::Button freesound_search_btn;
Gtk::TreeView freesound_list_view;
+ Gtk::ProgressBar progress_bar;
+
+ bool freesound_stop;
void freesound_search();
void freesound_list_view_selected ();
void freesound_list_view_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn*);
void freesound_search_clicked ();
-
+ void freesound_stop_clicked ();
+
void chooser_file_activated ();
bool on_audio_filter (const Gtk::FileFilter::Info& filter_info);