diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2007-05-18 02:41:44 +0000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2007-05-18 02:41:44 +0000 |
commit | 1ca0e752fd1eacf2bf51afba00fef971e0ea05ee (patch) | |
tree | 0a10a245e3c7391f030878cf60d3fcda4db3a58a /libs/ardour | |
parent | 09d6a963216ded5c47adc911c546fb280b8ac89e (diff) |
Move Session::find_session into a session_utils.h header
git-svn-id: svn://localhost/ardour2/trunk@1865 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/SConscript | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/session_utils.h | 15 | ||||
-rw-r--r-- | libs/ardour/find_session.cc | 166 | ||||
-rw-r--r-- | libs/ardour/session.cc | 150 |
5 files changed, 182 insertions, 153 deletions
diff --git a/libs/ardour/SConscript b/libs/ardour/SConscript index ba22de18ca..9ae82096b5 100644 --- a/libs/ardour/SConscript +++ b/libs/ardour/SConscript @@ -30,6 +30,7 @@ ardour_files=Split(""" chan_count.cc diskstream.cc filename_extensions.cc +find_session.cc track.cc audio_diskstream.cc audio_library.cc diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 59da5dc2c0..35f4d32372 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -240,9 +240,6 @@ class Session : public PBD::StatefulDestructible virtual ~Session (); - - static int find_session (string str, string& path, string& snapshot, bool& isnew); - string path() const { return _path; } string name() const { return _name; } string snap_name() const { return _current_snapshot_name; } diff --git a/libs/ardour/ardour/session_utils.h b/libs/ardour/ardour/session_utils.h new file mode 100644 index 0000000000..8aa4505fe5 --- /dev/null +++ b/libs/ardour/ardour/session_utils.h @@ -0,0 +1,15 @@ + +#ifndef __ardour_session_utils_h__ +#define __ardour_session_utils_h__ + +#include <string> + +namespace ARDOUR { + +using std::string; + +int find_session (string str, string& path, string& snapshot, bool& isnew); + +}; + +#endif diff --git a/libs/ardour/find_session.cc b/libs/ardour/find_session.cc new file mode 100644 index 0000000000..f8ed3d5a46 --- /dev/null +++ b/libs/ardour/find_session.cc @@ -0,0 +1,166 @@ +#include <unistd.h> +#include <sys/stat.h> + +#include <climits> +#include <cerrno> + +#include <pbd/compose.h> +#include <pbd/error.h> + +#include <ardour/session_utils.h> +#include <ardour/filename_extensions.h> +#include <ardour/utils.h> + +#include "i18n.h" + +using namespace PBD; + +int +ARDOUR::find_session (string str, string& path, string& snapshot, bool& isnew) +{ + struct stat statbuf; + char buf[PATH_MAX+1]; + + isnew = false; + + if (!realpath (str.c_str(), buf) && (errno != ENOENT && errno != ENOTDIR)) { + error << string_compose (_("Could not resolve path: %1 (%2)"), buf, strerror(errno)) << endmsg; + return -1; + } + + str = buf; + + /* check to see if it exists, and what it is */ + + if (stat (str.c_str(), &statbuf)) { + if (errno == ENOENT) { + isnew = true; + } else { + error << string_compose (_("cannot check session path %1 (%2)"), str, strerror (errno)) + << endmsg; + return -1; + } + } + + if (!isnew) { + + /* it exists, so it must either be the name + of the directory, or the name of the statefile + within it. + */ + + if (S_ISDIR (statbuf.st_mode)) { + + string::size_type slash = str.find_last_of ('/'); + + if (slash == string::npos) { + + /* a subdirectory of cwd, so statefile should be ... */ + + string tmp; + tmp = str; + tmp += '/'; + tmp += str; + tmp += statefile_suffix; + + /* is it there ? */ + + if (stat (tmp.c_str(), &statbuf)) { + error << string_compose (_("cannot check statefile %1 (%2)"), tmp, strerror (errno)) + << endmsg; + return -1; + } + + path = str; + snapshot = str; + + } else { + + /* some directory someplace in the filesystem. + the snapshot name is the directory name + itself. + */ + + path = str; + snapshot = str.substr (slash+1); + + } + + } else if (S_ISREG (statbuf.st_mode)) { + + string::size_type slash = str.find_last_of ('/'); + string::size_type suffix; + + /* remove the suffix */ + + if (slash != string::npos) { + snapshot = str.substr (slash+1); + } else { + snapshot = str; + } + + suffix = snapshot.find (statefile_suffix); + + if (suffix == string::npos) { + error << string_compose (_("%1 is not an Ardour snapshot file"), str) << endmsg; + return -1; + } + + /* remove suffix */ + + snapshot = snapshot.substr (0, suffix); + + if (slash == string::npos) { + + /* we must be in the directory where the + statefile lives. get it using cwd(). + */ + + char cwd[PATH_MAX+1]; + + if (getcwd (cwd, sizeof (cwd)) == 0) { + error << string_compose (_("cannot determine current working directory (%1)"), strerror (errno)) + << endmsg; + return -1; + } + + path = cwd; + + } else { + + /* full path to the statefile */ + + path = str.substr (0, slash); + } + + } else { + + /* what type of file is it? */ + error << string_compose (_("unknown file type for session %1"), str) << endmsg; + return -1; + } + + } else { + + /* its the name of a new directory. get the name + as "dirname" does. + */ + + string::size_type slash = str.find_last_of ('/'); + + if (slash == string::npos) { + + /* no slash, just use the name, but clean it up */ + + path = legalize_for_path (str); + snapshot = path; + + } else { + + path = str; + snapshot = str.substr (slash+1); + } + } + + return 0; +} diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 0542298c58..59c326264f 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -105,156 +105,6 @@ sigc::signal<void> Session::SMPTEOffsetChanged; sigc::signal<void> Session::StartTimeChanged; sigc::signal<void> Session::EndTimeChanged; -int -Session::find_session (string str, string& path, string& snapshot, bool& isnew) -{ - struct stat statbuf; - char buf[PATH_MAX+1]; - - isnew = false; - - if (!realpath (str.c_str(), buf) && (errno != ENOENT && errno != ENOTDIR)) { - error << string_compose (_("Could not resolve path: %1 (%2)"), buf, strerror(errno)) << endmsg; - return -1; - } - - str = buf; - - /* check to see if it exists, and what it is */ - - if (stat (str.c_str(), &statbuf)) { - if (errno == ENOENT) { - isnew = true; - } else { - error << string_compose (_("cannot check session path %1 (%2)"), str, strerror (errno)) - << endmsg; - return -1; - } - } - - if (!isnew) { - - /* it exists, so it must either be the name - of the directory, or the name of the statefile - within it. - */ - - if (S_ISDIR (statbuf.st_mode)) { - - string::size_type slash = str.find_last_of ('/'); - - if (slash == string::npos) { - - /* a subdirectory of cwd, so statefile should be ... */ - - string tmp; - tmp = str; - tmp += '/'; - tmp += str; - tmp += statefile_suffix; - - /* is it there ? */ - - if (stat (tmp.c_str(), &statbuf)) { - error << string_compose (_("cannot check statefile %1 (%2)"), tmp, strerror (errno)) - << endmsg; - return -1; - } - - path = str; - snapshot = str; - - } else { - - /* some directory someplace in the filesystem. - the snapshot name is the directory name - itself. - */ - - path = str; - snapshot = str.substr (slash+1); - - } - - } else if (S_ISREG (statbuf.st_mode)) { - - string::size_type slash = str.find_last_of ('/'); - string::size_type suffix; - - /* remove the suffix */ - - if (slash != string::npos) { - snapshot = str.substr (slash+1); - } else { - snapshot = str; - } - - suffix = snapshot.find (statefile_suffix); - - if (suffix == string::npos) { - error << string_compose (_("%1 is not an Ardour snapshot file"), str) << endmsg; - return -1; - } - - /* remove suffix */ - - snapshot = snapshot.substr (0, suffix); - - if (slash == string::npos) { - - /* we must be in the directory where the - statefile lives. get it using cwd(). - */ - - char cwd[PATH_MAX+1]; - - if (getcwd (cwd, sizeof (cwd)) == 0) { - error << string_compose (_("cannot determine current working directory (%1)"), strerror (errno)) - << endmsg; - return -1; - } - - path = cwd; - - } else { - - /* full path to the statefile */ - - path = str.substr (0, slash); - } - - } else { - - /* what type of file is it? */ - error << string_compose (_("unknown file type for session %1"), str) << endmsg; - return -1; - } - - } else { - - /* its the name of a new directory. get the name - as "dirname" does. - */ - - string::size_type slash = str.find_last_of ('/'); - - if (slash == string::npos) { - - /* no slash, just use the name, but clean it up */ - - path = legalize_for_path (str); - snapshot = path; - - } else { - - path = str; - snapshot = str.substr (slash+1); - } - } - - return 0; -} - Session::Session (AudioEngine &eng, string fullpath, string snapshot_name, |