Allow loading sessions with missing external files #7067

The issue was introduced in dbf86a495b, forcing must_exist = true
for *all* files that have a absolute _origin, including stub
SilentFileSources.

If an external file is no longer available and a user chooses to
"ignore, skip" an SilentFile is created instead of the actual source,
The SilentFileSource has the same XML state which includes _origin.

ARDOUR::SilentFileSource::SilentFileSource () c'tor calls
AudioFileSource::AudioFileSource (,.., must_exit = false)
but since the file has an absolute _origin, the AudioFileSource c'tor sets
must_exist = true; throws and the session cannot be loaded.
This commit is contained in:
Robin Gareus 2016-10-11 22:05:27 +02:00
parent c60b4ff4cb
commit feed9648e1
3 changed files with 4 additions and 4 deletions

View File

@ -88,7 +88,7 @@ protected:
SampleFormat samp_format, HeaderFormat hdr_format);
/** Constructor to be called for existing in-session files */
AudioFileSource (Session&, const XMLNode&, bool must_exist = true);
AudioFileSource (Session&, const XMLNode&, bool must_exist = true, bool optional_origin = false);
/** Constructor to be called for crash recovery. Final argument is not
* used but exists to differentiate from the external-to-session

View File

@ -45,7 +45,7 @@ protected:
SilentFileSource (Session& s, const XMLNode& x, framecnt_t len, float srate)
: Source (s, x)
, AudioFileSource (s, x, false)
, AudioFileSource (s, x, false, true)
, _sample_rate(srate)
{
_length = len;

View File

@ -135,7 +135,7 @@ AudioFileSource::AudioFileSource (Session& s, const string& path, Source::Flag f
* is an absolute path after ::set_state(), then the file is external to the
* session.
*/
AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exist)
AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exist, bool optional_origin)
: Source (s, node)
, AudioSource (s, node)
, FileSource (s, node, must_exist)
@ -146,7 +146,7 @@ AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exi
if (Glib::path_is_absolute (_origin)) {
_path = _origin;
must_exist = true;
must_exist = !optional_origin;
}
if (init (_path, must_exist)) {