X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession_directory.cc;h=a848ceee4b632c14aac9ba12c79c215d40615824;hb=ad547e53fc168410b22628a8cb125e8d4da4b293;hp=e871b84244eb51c512f96b5f9b7900ad025bb64e;hpb=f160408d4bca9139b18faf304d7e3ed30c5e79bf;p=ardour.git diff --git a/libs/ardour/session_directory.cc b/libs/ardour/session_directory.cc index e871b84244..a848ceee4b 100644 --- a/libs/ardour/session_directory.cc +++ b/libs/ardour/session_directory.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Tim Mayberry + Copyright (C) 2007 Tim Mayberry This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,25 +16,22 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include +#include "pbd/error.h" +#include "pbd/compose.h" +#include "pbd/filesystem.h" -#include -#include - -#include -#include -#include - -#include -#include +#include "ardour/directory_names.h" +#include "ardour/session_directory.h" +#include "ardour/utils.h" #include "i18n.h" namespace ARDOUR { +using namespace std; using namespace PBD::sys; -SessionDirectory::SessionDirectory (const string& session_path) +SessionDirectory::SessionDirectory (const path& session_path) : m_root_path(session_path) { @@ -43,23 +40,26 @@ SessionDirectory::SessionDirectory (const string& session_path) bool SessionDirectory::create () { - if (is_directory (m_root_path)) - { - PBD::error << string_compose(_("Cannot create Session directory at path %1 as it already exists"), m_root_path.to_string()) << endmsg; - return false; - } + bool is_new = false; vector sub_dirs = sub_directories (); for (vector::const_iterator i = sub_dirs.begin(); i != sub_dirs.end(); ++i) { - if (!create_directories(*i)) + try { - PBD::error << string_compose(_("Cannot create Session directory at path %1 Error: %2"), (*i).to_string(), g_strerror (errno)) << endmsg; - return false; + if(create_directories(*i)) is_new = true; + } + catch (PBD::sys::filesystem_error& ex) + { + // log the error + PBD::error << string_compose(_("Cannot create Session directory at path %1 Error: %2"), (*i).to_string(), ex.what()) << endmsg; + + // and rethrow + throw ex; } } - return true; + return is_new; } bool @@ -81,7 +81,15 @@ SessionDirectory::is_valid () const const path SessionDirectory::old_sound_path () const { - return path(m_root_path) /= old_sound_dir_name; + return m_root_path / old_sound_dir_name; +} + +const path +SessionDirectory::sources_root () const +{ + const string legalized_root(legalize_for_path(m_root_path.leaf())); + + return m_root_path / interchange_dir_name / legalized_root; } const path @@ -90,41 +98,70 @@ SessionDirectory::sound_path () const if(is_directory (old_sound_path ())) return old_sound_path(); // the new style sound directory - path l_sound_path(m_root_path); + return sources_root() / sound_dir_name; +} - l_sound_path /= interchange_dir_name; - l_sound_path /= basename(m_root_path); - l_sound_path /= sound_dir_name; +const path +SessionDirectory::sound_stub_path () const +{ + if(is_directory (old_sound_path ())) return old_sound_path(); - return l_sound_path; + // the new style sound directory + return sources_root() / sound_dir_name / stub_dir_name; +} + +const path +SessionDirectory::midi_path () const +{ + return sources_root() / midi_dir_name; +} + +const path +SessionDirectory::midi_stub_path () const +{ + return sources_root() / midi_dir_name / stub_dir_name; +} + +const path +SessionDirectory::midi_patch_path () const +{ + return sources_root() / midi_patch_dir_name; } const path SessionDirectory::peak_path () const { - return path(m_root_path) /= peak_dir_name; + return m_root_path / peak_dir_name; } const path SessionDirectory::dead_sound_path () const { - return path(m_root_path) /= dead_sound_dir_name; + return m_root_path / dead_sound_dir_name; +} + +const path +SessionDirectory::dead_midi_path () const +{ + return m_root_path / dead_midi_dir_name; } const path SessionDirectory::export_path () const { - return path(m_root_path) /= export_dir_name; + return m_root_path / export_dir_name; } const vector SessionDirectory::sub_directories () const { - vector tmp_paths; + vector tmp_paths; tmp_paths.push_back ( sound_path () ); + tmp_paths.push_back ( midi_path () ); tmp_paths.push_back ( peak_path () ); tmp_paths.push_back ( dead_sound_path () ); + tmp_paths.push_back ( dead_midi_path () ); tmp_paths.push_back ( export_path () ); return tmp_paths;