From 07e25181666cd8ce1fa7197afd5c4941d9b4e7dc Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 8 Sep 2022 07:46:56 -0600 Subject: [PATCH] steps towards downloading loop libraries --- gtk2_ardour/library_download_dialog.cc | 42 ++++++++++++++++++++++++++ gtk2_ardour/library_download_dialog.h | 5 +++ 2 files changed, 47 insertions(+) diff --git a/gtk2_ardour/library_download_dialog.cc b/gtk2_ardour/library_download_dialog.cc index 328bc3442c..38859d5e68 100644 --- a/gtk2_ardour/library_download_dialog.cc +++ b/gtk2_ardour/library_download_dialog.cc @@ -16,14 +16,20 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include + #include "pbd/i18n.h" #include +#include "ardour/rc_configuration.h" #include "ardour/library.h" #include "library_download_dialog.h" +using namespace ARDOUR; +using std::string; + LibraryDownloadDialog::LibraryDownloadDialog () : ArdourDialog (_("Loop Library Manager"), true) /* modal */ { @@ -67,6 +73,7 @@ LibraryDownloadDialog::add_library (ARDOUR::LibraryDescription const & ld) (*i)[_columns.license] = ld.license(); (*i)[_columns.size] = ld.size(); (*i)[_columns.installed] = ld.installed(); + (*i)[_columns.url] = ld.url(); /* tooltip must be escape for pango markup, and we should strip all * duplicate spaces @@ -80,4 +87,39 @@ LibraryDownloadDialog::add_library (ARDOUR::LibraryDescription const & ld) void LibraryDownloadDialog::install_activated (std::string str) { + Gtk::TreeModel::iterator row = _model->get_iter (Gtk::TreePath (str)); + std::string url = (*row)[_columns.url]; + + std::cerr << "will download " << url << " to " << Config->get_clip_library_dir() << std::endl; + + ARDOUR::Downloader* downloader = new ARDOUR::Downloader (url, ARDOUR::Config->get_clip_library_dir()); + + /* setup timer callback to update progressbar */ + + Glib::signal_timeout().connect (sigc::bind (sigc::mem_fun (*this, &LibraryDownloadDialog::dl_timer_callback), downloader, str), 40); + + /* and go ... */ + + downloader->start (); + + (*row)[_columns.downloader] = downloader; + + /* and back to the GUI, though we're modal so not much is possible */ +} + +bool +LibraryDownloadDialog::dl_timer_callback (Downloader* dl, std::string path_str) +{ + double prog = dl->progress(); + + std::cerr << "prog: " << prog << std::endl; + + /* set something based on this */ + if (dl->status() != 0) { + delete dl; + Gtk::TreeModel::iterator row = _model->get_iter (Gtk::TreePath (path_str)); + (*row)[_columns.downloader] = 0; + return false; /* no more calls, done or cancelled */ + } + return true; } diff --git a/gtk2_ardour/library_download_dialog.h b/gtk2_ardour/library_download_dialog.h index 28d4e0f552..9fc6032b9c 100644 --- a/gtk2_ardour/library_download_dialog.h +++ b/gtk2_ardour/library_download_dialog.h @@ -29,6 +29,7 @@ namespace ARDOUR { class LibraryDescription; + class Downloader; } class LibraryDownloadDialog : public ArdourDialog @@ -48,6 +49,7 @@ class LibraryDownloadDialog : public ArdourDialog add (size); add (installed); add (description); + add (url); } Gtk::TreeModelColumn name; @@ -55,7 +57,9 @@ class LibraryDownloadDialog : public ArdourDialog Gtk::TreeModelColumn license; Gtk::TreeModelColumn size; Gtk::TreeModelColumn description; + Gtk::TreeModelColumn url; Gtk::TreeModelColumn installed; + Gtk::TreeModelColumn downloader; }; Gtk::TreeView _display; @@ -81,6 +85,7 @@ class LibraryDownloadDialog : public ArdourDialog void setup_toggle (Gtk::TreeViewColumn*, sigc::slot); void install_activated (std::string str); + bool dl_timer_callback (ARDOUR::Downloader*, std::string); };