From cc384f6f622cc10fd83616256080b80dc2123aaf Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 14 Sep 2006 02:27:02 +0000 Subject: Cleaned up client-side model code significantly (made everything private so only Store can change the state of models). Extremely broken, just committing to move code between machines :). git-svn-id: http://svn.drobilla.net/lad/ingen@133 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/client/Store.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 3 deletions(-) (limited to 'src/libs/client/Store.cpp') diff --git a/src/libs/client/Store.cpp b/src/libs/client/Store.cpp index e2637c0f..64824b39 100644 --- a/src/libs/client/Store.cpp +++ b/src/libs/client/Store.cpp @@ -85,6 +85,45 @@ Store::resolve_plugin_orphans(CountedPtr plugin) } +void +Store::add_connection_orphan(CountedPtr connection) +{ + cerr << "WARNING: Orphan connection received." << endl; + + cerr << "FIXME (add_connection_orphan)" << endl; + + throw; // FIXME: (lazy) +#if 0 + map > >::iterator spawn + = m_connection_orphans.find(node->connection_uri()); + + if (spawn != m_connection_orphans.end()) { + spawn->second.push_back(node); + } else { + list > l; + l.push_back(node); + m_connection_orphans[node->connection_uri()] = l; + } +#endif +} + + +void +Store::resolve_connection_orphans(CountedPtr port) +{ + cerr << "FIXME (add_connection_orphan)" << endl; + throw; // FIXME: (lazy) +#if 0 + map > >::iterator spawn + = m_connection_orphans.find(connection->uri()); + + if (spawn != m_connection_orphans.end()) { + cerr << "XXXXXXXXXX PLUGIN-ORPHAN PLUGIN FOUND!! XXXXXXXXXXXXXXXXX" << endl; + } +#endif +} + + void Store::add_orphan(CountedPtr child) { @@ -133,8 +172,18 @@ Store::add_object(CountedPtr object) } } + // If we already have "this" object, merge the existing one into the new + // 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; + } + m_objects[object->path()] = object; + // FIXME: emit this when we already had one? new_object_sig.emit(object); resolve_orphans(object); @@ -327,10 +376,21 @@ Store::connection_event(const Path& src_port_path, const Path& dst_port_path) CountedPtr patch = PtrCast(this->object(cm->patch_path())); - if (patch) + CountedPtr src_obj = this->object(src_port_path); + CountedPtr dst_obj = this->object(dst_port_path); + + if (!src_obj || !dst_obj || !patch) { + add_connection_orphan(cm); + } else { + CountedPtr src_port = PtrCast(src_obj); + CountedPtr dst_port = PtrCast(dst_obj); + assert(src_port && dst_port); + + cm->set_src_port(src_port); + cm->set_dst_port(dst_port); + patch->add_connection(cm); - else - cerr << "ERROR: connection in nonexistant patch" << endl; + } } -- cgit v1.2.1