further code simplification and rationalization related to MIDI source/file renaming

This commit is contained in:
Paul Davis 2014-04-13 11:12:22 -04:00
parent 0d5f4c553a
commit b49bb451d2
6 changed files with 51 additions and 144 deletions

View file

@ -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)