Use PBD::sys::operator/ instead of PBD::sys::path::operator/= in ARDOUR::SessionDirectory
[ardour.git] / libs / ardour / template_utils.cc
index 6e5f7a342748aea30b7a0894964035746ae2cfdc..5def842c4cafe47ab70c20a8ee71963916a0eea3 100644 (file)
@@ -1,25 +1,36 @@
+#include <algorithm>
 
 #include <pbd/filesystem.h>
+#include <pbd/error.h>
 
 #include <ardour/template_utils.h>
-#include <ardour/ardour.h>
 #include <ardour/directory_names.h>
+#include <ardour/filesystem_paths.h>
 
 namespace ARDOUR {
 
 sys::path
 system_template_directory ()
 {
-       sys::path p(get_system_data_path());
-       p /= templates_dir_name;
+       SearchPath spath(system_data_search_path());
+       spath.add_subdirectory_to_paths(templates_dir_name);
 
-       return p;
+       // just return the first directory in the search path that exists
+       SearchPath::const_iterator i = std::find_if(spath.begin(), spath.end(), sys::exists);
+
+       if (i == spath.end())
+       {
+               warning << "System template directory does not exist" << endmsg;
+               return sys::path("");
+       }
+
+       return *i;
 }
 
 sys::path
 user_template_directory ()
 {
-       sys::path p(get_user_ardour_path());
+       sys::path p(user_config_directory());
        p /= templates_dir_name;
 
        return p;