finally get to the bottom of where NO_PLUGIN_STATE needs to be in order to be useful
[ardour.git] / libs / ardour / file_source.cc
index 8c207feea73d4d65b80e7be0cb2292791beb7a7e..09214981861f142536d714b894b44adeb8e2d2a1 100644 (file)
@@ -55,8 +55,8 @@ PBD::Signal3<int,std::string,std::string,std::vector<std::string> > FileSource::
 
 FileSource::FileSource (Session& session, DataType type, const string& path, const string& origin, Source::Flag flag)
        : Source(session, type, path, flag)
-       , _path(path)
-       , _file_is_new(true)
+       , _path (path)
+       , _file_is_new (!origin.empty()) // origin empty => new file VS. origin !empty => new file
        , _channel (0)
         , _origin (origin)
         , _open (false)
@@ -111,33 +111,24 @@ FileSource::init (const string& pathstr, bool must_exist)
 {
        _timeline_position = 0;
 
-       if (!_file_is_new) {
-
-               if (Stateful::loading_state_version < 3000) {
-                       if (!find_2X (_session, _type, pathstr, must_exist, _file_is_new, _channel, _path)) {
-                               throw MissingSource (pathstr, _type);
-                       }
-               } else {
-                       string look_for;
-                       
-                       if (!_origin.empty()) {
-                               look_for = _origin;
-                       } else {
-                               look_for = pathstr;
-                       }
-                       
-                       if (!find (_session, _type, look_for, must_exist, _file_is_new, _channel, _path)) {
-                               throw MissingSource (pathstr, _type);
-                       }
+       if (Stateful::loading_state_version < 3000) {
+               if (!find_2X (_session, _type, pathstr, must_exist, _file_is_new, _channel, _path)) {
+                       throw MissingSource (pathstr, _type);
+               }
+       } else {
+               if (!find (_session, _type, pathstr, must_exist, _file_is_new, _channel, _path)) {
+                       throw MissingSource (pathstr, _type);
                }
        }
 
        set_within_session_from_path (_path);
-       
+
         _name = Glib::path_get_basename (_path);
 
-       if (_file_is_new && must_exist) {
-               return -1;
+       if (must_exist) {
+               if (!Glib::file_test (_path, Glib::FILE_TEST_EXISTS)) {
+                       throw MissingSource (pathstr, _type);
+               }
        }
 
        return 0;