diff options
Diffstat (limited to 'src/messagehandler.cc')
-rw-r--r-- | src/messagehandler.cc | 56 |
1 files changed, 17 insertions, 39 deletions
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); |