X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffile_source.cc;h=caddc12b5bdd8b6c3b1f4c7c3f402ca1be8d13cb;hb=50131b3751e6ed5c9ed7450406049b2195ea9ecf;hp=08ba0eb23e9098d74828e4324e97e117dbf8ffa2;hpb=b88e7fdcca8ef8fa4c22f93c2934b30713ab4716;p=ardour.git diff --git a/libs/ardour/file_source.cc b/libs/ardour/file_source.cc index 08ba0eb23e..caddc12b5b 100644 --- a/libs/ardour/file_source.cc +++ b/libs/ardour/file_source.cc @@ -55,22 +55,26 @@ static const std::string PATH_SEP = "/"; // I don't do windows map FileSource::search_paths; -FileSource::FileSource (Session& session, DataType type, - const ustring& path, bool embedded, Source::Flag flag) +FileSource::FileSource (Session& session, DataType type, const ustring& path, Source::Flag flag) : Source(session, type, path, flag) , _path(path) , _file_is_new(true) , _channel (0) - , _is_embedded(embedded) { + set_within_session_from_path (path); } FileSource::FileSource (Session& session, const XMLNode& node, bool /*must_exist*/) : Source(session, node) , _file_is_new (false) { + /* this setting of _path is temporary - we expect derived classes + to call ::init() which will actually locate the file + and reset _path and _within_session correctly. + */ + _path = _name; - set_embedded_from_name(); + _within_session = true; } bool @@ -90,9 +94,9 @@ FileSource::init (const ustring& pathstr, bool must_exist) throw MissingSource (); } - /* XXX is this necessary? or even wise? */ + set_within_session_from_path (pathstr); - if (_is_embedded) { + if (_within_session) { _name = Glib::path_get_basename (_name); } @@ -103,12 +107,6 @@ FileSource::init (const ustring& pathstr, bool must_exist) return 0; } -void -FileSource::set_embedded_from_name () -{ - _is_embedded = (_name.find(PATH_SEP) != string::npos); -} - int FileSource::set_state (const XMLNode& node, int /*version*/) { @@ -120,8 +118,6 @@ FileSource::set_state (const XMLNode& node, int /*version*/) _channel = 0; } - set_embedded_from_name(); - return 0; } @@ -136,12 +132,7 @@ FileSource::mark_take (const ustring& id) int FileSource::move_to_trash (const ustring& trash_dir_name) { - if (is_embedded()) { - cerr << "tried to move an embedded region to trash" << endl; - return -1; - } - - if (!writable()) { + if (!within_session() || !writable()) { return -1; } @@ -202,7 +193,7 @@ FileSource::move_to_trash (const ustring& trash_dir_name) /** Find the actual source file based on \a filename. * - * If the source is embedded, \a filename should be a simple filename (no slashes). + * If the source is within the session tree, \a filename should be a simple filename (no slashes). * If the source is external, \a filename should be a full path. * In either case, found_path is set to the complete absolute path of the source file. * \return true iff the file was found. @@ -426,3 +417,8 @@ FileSource::mark_immutable () } } +void +FileSource::set_within_session_from_path (const std::string& path) +{ + _within_session = _session.path_is_within_session (path); +}