Inflate template archives rather in `.config/ardour5/` than in ...
authorJohannes Mueller <github@johannes-mueller.org>
Wed, 12 Jul 2017 15:34:22 +0000 (17:34 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 15 Jul 2017 09:37:15 +0000 (11:37 +0200)
`.config/ardour5/(templates|route_templates)`.

We put as toplevel directory of the archive `templates` or
`route_templates`. Then no matter if the user imports a session template or a
route template archives, we always put them into the correct folder.

As now the user can also import route templates while the
SessionTemplateManager is visible and vice versa, we need to signal the
successful import to the corresponding template manager. Therfor we introduce
the signal TemplatesImported.

gtk2_ardour/template_dialog.cc
gtk2_ardour/template_dialog.h

index 4b3b9ca9a41549c058b95ab4a67d7212f2cb58ae..daba8bdd7f4bf72a56b5820197fb7af8ac0703b7 100644 (file)
@@ -36,6 +36,9 @@
 #include "pbd/i18n.h"
 #include "pbd/xml++.h"
 
+#include "gtkmm2ext/gui_thread.h"
+
+#include "ardour/filesystem_paths.h"
 #include "ardour/template_utils.h"
 
 #include "template_dialog.h"
@@ -64,6 +67,9 @@ TemplateDialog::TemplateDialog ()
 
        session_tm->init ();
        route_tm->init ();
+
+       session_tm->TemplatesImported.connect (*this, invalidator (*this), boost::bind (&RouteTemplateManager::init, route_tm), gui_context ());
+       route_tm->TemplatesImported.connect (*this, invalidator (*this), boost::bind (&SessionTemplateManager::init, session_tm), gui_context ());
 }
 
 TemplateManager::TemplateManager ()
@@ -260,7 +266,7 @@ TemplateManager::export_all_templates ()
                return;
        }
 
-       PBD::copy_recurse (templates_dir (), tmpdir);
+       PBD::copy_recurse (templates_dir (), Glib::build_filename (tmpdir, Glib::path_get_basename (templates_dir ())));
 
        vector<string> files;
        PBD::find_files_matching_regex (files, tmpdir, string ("\\.template$"), /* recurse = */ true);
@@ -315,17 +321,12 @@ TemplateManager::import_template_set ()
                return;
        }
 
-       if (!g_file_test (templates_dir().c_str(), G_FILE_TEST_IS_DIR)) {
-               cout << "making " << templates_dir() << endl;
-               g_mkdir (templates_dir().c_str(), 0755);
-       }
-
        _current_action = _("Importing templates");
 
        FileArchive ar (dialog.get_filename ());
        PBD::ScopedConnectionList progress_connection;
        ar.progress.connect_same_thread (progress_connection, boost::bind (&_set_progress, this, _1, _2));
-       ar.inflate (templates_dir());
+       ar.inflate (user_config_directory ());
 
        vector<string> files;
        PBD::find_files_matching_regex (files, templates_dir (), string ("\\.template$"), /* recurse = */ true);
@@ -346,6 +347,7 @@ TemplateManager::import_template_set ()
        }
 
        init ();
+       TemplatesImported (); /* emit signal */
 }
 
 bool
index 470d5b92a591fd2efcec612e77825b46301ff395..0d1ba29e8c8b09c4321678ca90de1fa13c668e2f 100644 (file)
@@ -37,7 +37,8 @@ namespace ARDOUR {
 class XMLTree;
 class XMLNode;
 
-class TemplateDialog : public ArdourDialog
+class TemplateDialog : public ArdourDialog,
+                      public PBD::ScopedConnectionList
 {
 public:
        TemplateDialog ();
@@ -51,6 +52,8 @@ public:
        virtual ~TemplateManager () {}
        virtual void init () = 0;
 
+       PBD::Signal0<void> TemplatesImported;
+
 protected:
        TemplateManager ();