X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fsession_directory.cc;h=c52fe1aeb5c30e72389f8ac348fa643a818caae3;hb=c8c6bca6587450ff64303dbc994a4cd28d6ce7aa;hp=491a593398378a5bae8bea419ce0d4406a98919f;hpb=ceab8cf313c4d0afb028c032998697e25b87067f;p=ardour.git diff --git a/libs/ardour/session_directory.cc b/libs/ardour/session_directory.cc index 491a593398..c52fe1aeb5 100644 --- a/libs/ardour/session_directory.cc +++ b/libs/ardour/session_directory.cc @@ -24,12 +24,13 @@ #include "pbd/error.h" #include "pbd/compose.h" #include "pbd/file_utils.h" +#include "pbd/openuri.h" #include "ardour/directory_names.h" #include "ardour/session_directory.h" #include "ardour/utils.h" -#include "i18n.h" +#include "pbd/i18n.h" namespace ARDOUR { @@ -140,7 +141,20 @@ SessionDirectory::sources_root () const try { Glib::Dir dir(sources_root_path); - std::list entries (dir.begin(), dir.end()); + std::list entries; + + for (Glib::DirIterator di = dir.begin(); di != dir.end(); di++) { + // ignore hidden files (eg. OS X ".DS_Store") + if ((*di).at(0) == '.') { + continue; + } + // and skip regular files (eg. Win Thumbs.db) + string fullpath = Glib::build_filename (sources_root_path, *di); + if (!Glib::file_test (fullpath, Glib::FILE_TEST_IS_DIR)) { + continue; + } + entries.push_back(*di); + } if (entries.size() == 1) { if (entries.front() != legalized_root) { @@ -149,6 +163,7 @@ SessionDirectory::sources_root () const root_cache[m_root_path] = Glib::build_filename (sources_root_path, entries.front()); } else if (entries.size() > 1) { + PBD::open_folder (sources_root_path); PBD::fatal << string_compose (_("The session's interchange dir is tainted.\nThere is more than one folder in '%1'.\nPlease remove extra subdirs to reduce possible filename ambiguties."), sources_root_path) << endmsg; assert (0); // not reached }