From 804679db852b13664ca351e0ee302cc70e96bf67 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 19 Jun 2020 16:42:22 +0200 Subject: Recursively create a nodes subtree when being created as consequence of a move command. --- src/messagehandler.cc | 56 ++++++++++++++++----------------------------------- 1 file changed, 17 insertions(+), 39 deletions(-) (limited to 'src/messagehandler.cc') diff --git a/src/messagehandler.cc b/src/messagehandler.cc index 6986d21..e4db5e7 100644 --- a/src/messagehandler.cc +++ b/src/messagehandler.cc @@ -118,50 +118,28 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi) node_manager.moveNode(m.move.id, m.move.parentid, m.move.insertbeforeid); node_t createnode = node_manager.node(m.move.id); -// NodeIdList commonAncestors; -// NodeIdList removeAncestors; -// NodeIdList createAncestors; -// -// // find command ancestors and fill ancestors for remove command -// for(NodeIdList::iterator it_remove = tilpair.first.begin(); -// it_remove != tilpair.first.end(); it_remove++) -// { -// nodeid_t removeid = *it; -// bool common = false; -// for(NodeIdList::iterator it_create = tilpair.second.begin(); -// it_create = != tilpair.second.end(); it_create++) -// { -// nodeid_t createid = *id; -// if(removeid == createid) -// { -// commandAncestors.push_back(removeid); -// common = true; -// } -// } -// if(!common) -// { -// removeAncestors.push_back(removeid); -// } -// } -// -// // fill ancestors for create command -// for(NodeIdList::iterator it_create = tilpair.second.begin(); -// it_create = != tilpair.second.end(); it_create++) -// { -// nodeid_t createid = *id; -// if(removeid == createid) -// { -// commandAncestors.push_back(removeid); -// common = true; -// } -// } - message_t removemsg = create_msg_remove(removenode); removemsg.nodes = tilpair.first; message_t createmsg = create_msg_create_with_attributes(createnode, m.move.insertbeforeid); - createmsg.attributes = createnode.attributes; + createmsg.create.attributes = createnode.attributes; + + for(const auto& child_node_id : node_manager.subNodes(m.move.id)) + { + if(child_node_id == m.move.id) + { + continue; + } + auto child_node = node_manager.node(child_node_id); + create_t child; + child.id = child_node.id; + child.parentid = child_node.parentid; + child.insertbeforeid = -1; + child.attributes = child_node.attributes; + createmsg.create.children.push_back(child); + } + createmsg.nodes = tilpair.second; outmsgs.push_back(removemsg); -- cgit v1.2.3