mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 19:16:40 +01:00
further code simplification and rationalization related to MIDI source/file renaming
This commit is contained in:
parent
0d5f4c553a
commit
b49bb451d2
6 changed files with 51 additions and 144 deletions
|
|
@ -3366,112 +3366,6 @@ Session::count_sources_by_origin (const string& path)
|
|||
return cnt;
|
||||
}
|
||||
|
||||
string
|
||||
Session::generate_new_source_path_from_name (string path, string oldname, string newname, bool destructive)
|
||||
{
|
||||
string look_for;
|
||||
string old_basename = PBD::basename_nosuffix (oldname);
|
||||
string new_legalized = legalize_for_path (newname);
|
||||
|
||||
/* note: we know (or assume) the old path is already valid */
|
||||
|
||||
if (destructive) {
|
||||
|
||||
/* destructive file sources have a name of the form:
|
||||
|
||||
/path/to/Tnnnn-NAME(%[LR])?.wav
|
||||
|
||||
the task here is to replace NAME with the new name.
|
||||
*/
|
||||
|
||||
string dir;
|
||||
string prefix;
|
||||
string::size_type dash;
|
||||
|
||||
dir = Glib::path_get_dirname (path);
|
||||
path = Glib::path_get_basename (path);
|
||||
|
||||
/* '-' is not a legal character for the NAME part of the path */
|
||||
|
||||
if ((dash = path.find_last_of ('-')) == string::npos) {
|
||||
return "";
|
||||
}
|
||||
|
||||
prefix = path.substr (0, dash);
|
||||
|
||||
path += prefix;
|
||||
path += '-';
|
||||
path += new_legalized;
|
||||
path += native_header_format_extension (config.get_native_file_header_format(), DataType::AUDIO);
|
||||
path = Glib::build_filename (dir, path);
|
||||
|
||||
} else {
|
||||
|
||||
/* non-destructive file sources have a name of the form:
|
||||
|
||||
/path/to/NAME-nnnnn(%[LR])?.ext
|
||||
|
||||
the task here is to replace NAME with the new name.
|
||||
*/
|
||||
|
||||
string dir;
|
||||
string suffix;
|
||||
string::size_type dash;
|
||||
string::size_type postfix;
|
||||
|
||||
dir = Glib::path_get_dirname (path);
|
||||
path = Glib::path_get_basename (path);
|
||||
|
||||
/* '-' is not a legal character for the NAME part of the path */
|
||||
|
||||
if ((dash = path.find_last_of ('-')) == string::npos) {
|
||||
return "";
|
||||
}
|
||||
|
||||
suffix = path.substr (dash+1);
|
||||
|
||||
// Suffix is now everything after the dash. Now we need to eliminate
|
||||
// the nnnnn part, which is done by either finding a '%' or a '.'
|
||||
|
||||
postfix = suffix.find_last_of ("%");
|
||||
if (postfix == string::npos) {
|
||||
postfix = suffix.find_last_of ('.');
|
||||
}
|
||||
|
||||
if (postfix != string::npos) {
|
||||
suffix = suffix.substr (postfix);
|
||||
} else {
|
||||
error << "Logic error in Session::change_source_path_by_name(), please report" << endl;
|
||||
return "";
|
||||
}
|
||||
|
||||
const uint32_t limit = 10000;
|
||||
char buf[PATH_MAX+1];
|
||||
|
||||
for (uint32_t cnt = 1; cnt <= limit; ++cnt) {
|
||||
|
||||
snprintf (buf, sizeof(buf), "%s-%u%s", newname.c_str(), cnt, suffix.c_str());
|
||||
|
||||
if (!matching_unsuffixed_filename_exists_in (dir, buf)) {
|
||||
path = Glib::build_filename (dir, buf);
|
||||
if (!source_by_path (path)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
path = "";
|
||||
}
|
||||
|
||||
if (path.empty()) {
|
||||
fatal << string_compose (_("FATAL ERROR! Could not find a suitable version of %1 for a rename"),
|
||||
newname) << endl;
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
/** Return the full path (in some session directory) for a new within-session source.
|
||||
* \a name must be a session-unique name that does not contain slashes
|
||||
* (e.g. as returned by new_*_source_name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue