13
0

Fix loading session by relative path

Previously (since bc91ea3c4) that would create a new session
even if -N was not specified.

This also uses Glib API to test for absolute path, rather
than a custom hack.
This commit is contained in:
Robin Gareus 2024-03-12 04:29:33 +01:00
parent 2f61071974
commit f2d938914d
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -583,15 +583,6 @@ StartupFSM::get_session_parameters_from_path (string const & path_, string const
string path (path_);
/* ... did the user give us a path or just a name? */
if (path.find (G_DIR_SEPARATOR) == string::npos) {
/* user gave session name with no path info, use
default session folder.
*/
path = Glib::build_filename (Config->get_default_session_parent_dir (), path);
}
if (Glib::file_test (path.c_str(), Glib::FILE_TEST_EXISTS)) {
session_is_new = false;
@ -606,6 +597,10 @@ StartupFSM::get_session_parameters_from_path (string const & path_, string const
}
}
// TODO THIS SHOULD CALL ::check_session_parameters (false)
// to handle session archives etc
// (needs refactoring of ::check_session_parameters)
session_name = basename_nosuffix (path);
if (Glib::file_test (path.c_str(), Glib::FILE_TEST_IS_REGULAR)) {
@ -642,6 +637,18 @@ StartupFSM::get_session_parameters_from_path (string const & path_, string const
}
if (!ARDOUR_COMMAND_LINE::new_session) {
return false;
}
/* ... did the user give us a path or just a name? */
if (!Glib::path_is_absolute (path)) {
/* check for cwd relative path */
if (path.find (G_DIR_SEPARATOR) == string::npos) {
path = Glib::build_filename (Config->get_default_session_parent_dir (), path);
}
}
/* Everything after this involves a new session */
session_name = basename_nosuffix (path);
@ -810,25 +817,11 @@ StartupFSM::check_session_parameters (bool must_be_new)
session_template = session_dialog->session_template_name();
}
if (session_name[0] == G_DIR_SEPARATOR ||
#ifdef PLATFORM_WINDOWS
// Windows file system .. detect absolute path
// C:/*
(session_name.length() > 3 && session_name[1] == ':' && session_name[2] == G_DIR_SEPARATOR)
#else
// Sensible file systems
// /* or ./* or ../*
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == G_DIR_SEPARATOR) ||
(session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == G_DIR_SEPARATOR)
#endif
)
{
if (Glib::path_is_absolute (session_name) || session_name.find (G_DIR_SEPARATOR) != string::npos) {
/* user typed absolute path or cwd-relative path
specified into session name field. So ... infer
session path and name from what was given.
*/
* specified into session name field. So ... infer
* session path and name from what was given.
*/
session_path = Glib::path_get_dirname (session_name);
session_name = Glib::path_get_basename (session_name);