summaryrefslogtreecommitdiffstats
path: root/src/libs/client/Store.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-09-18 07:19:42 +0000
committerDavid Robillard <d@drobilla.net>2006-09-18 07:19:42 +0000
commitf0d7a30b0a4d9daeb8db95c59a5b0e836b03b31b (patch)
treedf254e018dbede7f7ef83a70a5f4c0d57102978e /src/libs/client/Store.cpp
parent6f93b3d7c80f9dee2d95fac1bbc4f781a6f45979 (diff)
downloadingen-f0d7a30b0a4d9daeb8db95c59a5b0e836b03b31b.tar.gz
ingen-f0d7a30b0a4d9daeb8db95c59a5b0e836b03b31b.tar.bz2
ingen-f0d7a30b0a4d9daeb8db95c59a5b0e836b03b31b.zip
More store error correcting fixes.
Working (sometimes...) patch refresh button. git-svn-id: http://svn.drobilla.net/lad/ingen@143 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/client/Store.cpp')
-rw-r--r--src/libs/client/Store.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/libs/client/Store.cpp b/src/libs/client/Store.cpp
index f6662422..3b7e9768 100644
--- a/src/libs/client/Store.cpp
+++ b/src/libs/client/Store.cpp
@@ -224,9 +224,7 @@ Store::add_object(CountedPtr<ObjectModel> object)
// one (with precedence to the new values).
ObjectMap::iterator existing = m_objects.find(object->path());
if (existing != m_objects.end()) {
- cerr << "[Store] Warning: Assimilating " << object->path() << endl;
- object->assimilate(existing->second);
- existing->second = object;
+ existing->second->set(object);
} else {
if (object->path() != "/") {
@@ -243,6 +241,10 @@ Store::add_object(CountedPtr<ObjectModel> object)
resolve_metadata_orphans(parent);
resolve_orphans(parent);
+ CountedPtr<PortModel> port = PtrCast<PortModel>(object);
+ if (port)
+ resolve_connection_orphans(port);
+
} else {
add_orphan(object);
}
@@ -279,6 +281,9 @@ Store::remove_object(const Path& path)
parent->remove_child(result);
}
}
+
+ assert(!object(path));
+
return result;
} else {
@@ -305,16 +310,18 @@ Store::object(const Path& path)
{
assert(path.length() > 0);
map<Path, CountedPtr<ObjectModel> >::iterator i = m_objects.find(path);
- if (i == m_objects.end())
+ if (i == m_objects.end()) {
return CountedPtr<ObjectModel>();
- else
- return (*i).second;
+ } else {
+ assert(i->second->path() == "/" || i->second->parent());
+ return i->second;
+ }
}
void
Store::add_plugin(CountedPtr<PluginModel> pm)
{
- // FIXME: dupes? assimilate?
+ // FIXME: dupes? merge, like with objects?
m_plugins[pm->uri()] = pm;
}
@@ -452,8 +459,11 @@ Store::connection_event(const Path& src_port_path, const Path& dst_port_path)
CountedPtr<ConnectionModel> dangling_cm(new ConnectionModel(src_port_path, dst_port_path));
- if (src_port && src_port->parent() && dst_port && dst_port->parent()) {
+ if (src_port && dst_port) {
+ assert(src_port->parent());
+ assert(dst_port->parent());
+
CountedPtr<PatchModel> patch = PtrCast<PatchModel>(this->object(dangling_cm->patch_path()));
assert(patch);