projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix bumping .mid file name (snapshots & playlist copy)
[ardour.git]
/
libs
/
ardour
/
session.cc
diff --git
a/libs/ardour/session.cc
b/libs/ardour/session.cc
index de236f61201199b3ee978804d54f7548c735b52c..8814d019780528f03d681eee0211f5cf4dfec77b 100644
(file)
--- a/
libs/ardour/session.cc
+++ b/
libs/ardour/session.cc
@@
-380,8
+380,12
@@
Session::Session (AudioEngine &eng,
*/
if (!mix_template.empty()) {
*/
if (!mix_template.empty()) {
- if (load_state (_current_snapshot_name)) {
- throw SessionException (_("Failed to load template/snapshot state"));
+ try {
+ if (load_state (_current_snapshot_name)) {
+ throw SessionException (_("Failed to load template/snapshot state"));
+ }
+ } catch (PBD::unknown_enumeration& e) {
+ throw SessionException (_("Failed to parse template/snapshot state"));
}
store_recent_templates (mix_template);
}
}
store_recent_templates (mix_template);
}
@@
-5273,15
+5277,10
@@
Session::new_audio_source_path (const string& base, uint32_t nchan, uint32_t cha
string
Session::new_midi_source_path (const string& base, bool need_lock)
{
string
Session::new_midi_source_path (const string& base, bool need_lock)
{
- uint32_t cnt;
- char buf[PATH_MAX+1];
- const uint32_t limit = 10000;
- string legalized;
string possible_path;
string possible_name;
string possible_path;
string possible_name;
- buf[0] = '\0';
- legalized = legalize_for_path (base);
+ possible_name = legalize_for_path (base);
// Find a "version" of the file name that doesn't exist in any of the possible directories.
std::vector<string> sdirs = source_search_path(DataType::MIDI);
// Find a "version" of the file name that doesn't exist in any of the possible directories.
std::vector<string> sdirs = source_search_path(DataType::MIDI);
@@
-5296,17
+5295,15
@@
Session::new_midi_source_path (const string& base, bool need_lock)
*/
std::reverse(sdirs.begin(), sdirs.end());
*/
std::reverse(sdirs.begin(), sdirs.end());
- for (cnt = 1; cnt <= limit; ++cnt) {
+ while (true) {
+ possible_name = bump_name_once (possible_name, '-');
vector<space_and_path>::iterator i;
uint32_t existing = 0;
for (vector<string>::const_iterator i = sdirs.begin(); i != sdirs.end(); ++i) {
vector<space_and_path>::iterator i;
uint32_t existing = 0;
for (vector<string>::const_iterator i = sdirs.begin(); i != sdirs.end(); ++i) {
- snprintf (buf, sizeof(buf), "%s-%u.mid", legalized.c_str(), cnt);
- possible_name = buf;
-
- possible_path = Glib::build_filename (*i, possible_name);
+ possible_path = Glib::build_filename (*i, possible_name + ".mid");
if (Glib::file_test (possible_path, Glib::FILE_TEST_EXISTS)) {
existing++;
if (Glib::file_test (possible_path, Glib::FILE_TEST_EXISTS)) {
existing++;
@@
-5317,17
+5314,17
@@
Session::new_midi_source_path (const string& base, bool need_lock)
}
}
}
}
- if (existing == 0) {
- break;
- }
-
- if (cnt > limit) {
+ if (possible_path.size () >= PATH_MAX) {
error << string_compose(
error << string_compose(
- _("There are already
%1 recordings for %2, which I consider too many
."),
-
limit, base
) << endmsg;
+ _("There are already
many recordings for %1, resulting in a too long file-path %2
."),
+
base, possible_path
) << endmsg;
destroy ();
return 0;
}
destroy ();
return 0;
}
+
+ if (existing == 0) {
+ break;
+ }
}
/* No need to "find best location" for software/app-based RAID, because
}
/* No need to "find best location" for software/app-based RAID, because
@@
-5509,7
+5506,7
@@
Session::registered_lua_functions ()
if (!i.key ().isString ()) { assert(0); continue; }
rv.push_back (i.key ().cast<std::string> ());
}
if (!i.key ().isString ()) { assert(0); continue; }
rv.push_back (i.key ().cast<std::string> ());
}
- } catch (
luabridge::LuaException const& e
) { }
+ } catch (
...
) { }
return rv;
}
return rv;
}
@@
-5525,7
+5522,7
@@
Session::try_run_lua (pframes_t nframes)
if (_n_lua_scripts == 0) return;
Glib::Threads::Mutex::Lock tm (lua_lock, Glib::Threads::TRY_LOCK);
if (tm.locked ()) {
if (_n_lua_scripts == 0) return;
Glib::Threads::Mutex::Lock tm (lua_lock, Glib::Threads::TRY_LOCK);
if (tm.locked ()) {
- try { (*_lua_run)(nframes); } catch (
luabridge::LuaException const& e
) { }
+ try { (*_lua_run)(nframes); } catch (
...
) { }
lua.collect_garbage_step ();
}
}
lua.collect_garbage_step ();
}
}
@@
-5657,7
+5654,12
@@
Session::setup_lua ()
_lua_cleanup = new luabridge::LuaRef(lua_sess["cleanup"]);
} catch (luabridge::LuaException const& e) {
fatal << string_compose (_("programming error: %1"),
_lua_cleanup = new luabridge::LuaRef(lua_sess["cleanup"]);
} catch (luabridge::LuaException const& e) {
fatal << string_compose (_("programming error: %1"),
- X_("Failed to setup Lua interpreter"))
+ std::string ("Failed to setup session Lua interpreter") + e.what ())
+ << endmsg;
+ abort(); /*NOTREACHED*/
+ } catch (...) {
+ fatal << string_compose (_("programming error: %1"),
+ X_("Failed to setup session Lua interpreter"))
<< endmsg;
abort(); /*NOTREACHED*/
}
<< endmsg;
abort(); /*NOTREACHED*/
}
@@
-5683,6
+5685,11
@@
Session::scripts_changed ()
}
_n_lua_scripts = cnt;
} catch (luabridge::LuaException const& e) {
}
_n_lua_scripts = cnt;
} catch (luabridge::LuaException const& e) {
+ fatal << string_compose (_("programming error: %1"),
+ std::string ("Indexing Lua Session Scripts failed.") + e.what ())
+ << endmsg;
+ abort(); /*NOTREACHED*/
+ } catch (...) {
fatal << string_compose (_("programming error: %1"),
X_("Indexing Lua Session Scripts failed."))
<< endmsg;
fatal << string_compose (_("programming error: %1"),
X_("Indexing Lua Session Scripts failed."))
<< endmsg;