contacts: display reachable contacts

This commits introduces integration with user's contacts
Only reachable contacts are displayed, based on accounts available.
No edition is provided within Ring.

Change-Id: I8d897802b086eccc42446d58f3efa83cb953e14b
diff --git a/src/QNSTreeController.mm b/src/QNSTreeController.mm
index 75533c2..eca4884 100644
--- a/src/QNSTreeController.mm
+++ b/src/QNSTreeController.mm
@@ -84,13 +84,33 @@
     NSUInteger myArray[[idx length]];
     [idx getIndexes:myArray];
     QModelIndex toReturn;
-    if(idx.length == 2)
-        toReturn = self->privateQModel->index(myArray[1], 0, self->privateQModel->index(myArray[0], 0));
-    else
-        toReturn = self->privateQModel->index(myArray[0], 0);
+
+    for (int i = 0; i < idx.length; ++i) {
+        toReturn = self->privateQModel->index(myArray[i], 0, toReturn);
+    }
+
     return toReturn;
 }
 
+- (void) insertChildAtQIndex:(QModelIndex) qIdx
+{
+    Node* child = [[Node alloc] init];
+
+    QModelIndex tmp = qIdx.parent();
+    NSMutableArray* allIndexes = [NSMutableArray array];
+    while (tmp.isValid()) {
+        [allIndexes insertObject:@(tmp.row()) atIndex:0];
+        tmp = tmp.parent();
+    }
+    [allIndexes insertObject:@(qIdx.row()) atIndex:allIndexes.count];
+
+    NSUInteger indexes[allIndexes.count];
+    for (int i = 0 ; i < allIndexes.count ; ++i) {
+        indexes[i] = [[allIndexes objectAtIndex:i] intValue];
+    }
+    [self insertObject:child atArrangedObjectIndexPath:[[NSIndexPath alloc] initWithIndexes:indexes length:allIndexes.count]];
+}
+
 - (void)connect
 {
     QObject::connect(self->privateQModel,
@@ -102,9 +122,7 @@
                                  Node* n = [[Node alloc] init];
                                  [self insertObject:n atArrangedObjectIndexPath:[[NSIndexPath alloc] initWithIndex:row]];
                              } else {
-                                 Node* child = [[Node alloc] init];
-                                 NSUInteger indexes[] = { (NSUInteger)parent.row(), (NSUInteger)row};
-                                 [self insertObject:child atArrangedObjectIndexPath:[[NSIndexPath alloc] initWithIndexes:indexes length:2]];
+                                 [self insertChildAtQIndex:self->privateQModel->index(row, 0, parent)];
                              }
                          }
                      }