Move Session::find_session into a session_utils.h header
git-svn-id: svn://localhost/ardour2/trunk@1865 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
09d6a96321
commit
1ca0e752fd
|
@ -56,6 +56,7 @@
|
|||
#include <ardour/ardour.h>
|
||||
#include <ardour/profile.h>
|
||||
#include <ardour/session_route.h>
|
||||
#include <ardour/session_utils.h>
|
||||
#include <ardour/port.h>
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/playlist.h>
|
||||
|
@ -1010,7 +1011,7 @@ ARDOUR_UI::open_session ()
|
|||
bool isnew;
|
||||
|
||||
if (session_path.length() > 0) {
|
||||
if (Session::find_session (session_path, path, name, isnew) == 0) {
|
||||
if (ARDOUR::find_session (session_path, path, name, isnew) == 0) {
|
||||
_session_is_new = isnew;
|
||||
load_session (path, name);
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "i18n.h"
|
||||
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/session_utils.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -2062,7 +2063,7 @@ ImageFrameSocketHandler::handle_open_session(const char* msg)
|
|||
std::string path, name ;
|
||||
bool isnew;
|
||||
|
||||
if (ARDOUR::Session::find_session(session_name, path, name, isnew) == 0) {
|
||||
if (ARDOUR::find_session(session_name, path, name, isnew) == 0) {
|
||||
if (ARDOUR_UI::instance()->load_session (path, name) == 0) {
|
||||
send_return_success() ;
|
||||
} else {
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include <ardour/version.h>
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/session_utils.h>
|
||||
|
||||
#include <gtkmm/main.h>
|
||||
#include <gtkmm2ext/popup.h>
|
||||
|
@ -140,7 +141,7 @@ maybe_load_session ()
|
|||
|
||||
bool isnew;
|
||||
|
||||
if (Session::find_session (session_name, path, name, isnew)) {
|
||||
if (find_session (session_name, path, name, isnew)) {
|
||||
error << string_compose(_("could not load command line session \"%1\""), session_name) << endmsg;
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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; }
|
||||
|
|
15
libs/ardour/ardour/session_utils.h
Normal file
15
libs/ardour/ardour/session_utils.h
Normal file
|
@ -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
|
166
libs/ardour/find_session.cc
Normal file
166
libs/ardour/find_session.cc
Normal file
|
@ -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;
|
||||
}
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue
Block a user