let rec insert_group ?(path=[]) g1 g2 =
match path with
[] ->
begin
try
let g = List.find (fun g -> g.group_title = g2.group_title) g1.group_groups in
let items = merge_items g.group_items g2.group_items in
g.group_items <- items;
List.iter (insert_group g) g2.group_groups
with
Not_found -> g1.group_groups <- g1.group_groups @ [g2]
end
| title :: q ->
begin
try
let g = List.find (fun g -> g.group_title = title) g1.group_groups in
insert_group ~path: q g g2
with
Not_found ->
let empty = group ~title () in
g1.group_groups <- g1.group_groups @ [empty];
insert_group ~path: q empty g2
end