Use user catalog in sharing presentation and editing
[pithos-macos] / pithos-macos / PithosAccountNode.m
index ee1ded1..f5768d4 100644 (file)
@@ -73,6 +73,37 @@ static NSImage *sharedIcon = nil;
 }
 
 #pragma mark -
+#pragma mark Internal
+
+- (void)updateGroups {
+    if (!pithosAccount) {
+        self.translatedGroups = [NSMutableDictionary dictionary];
+    } else if (pithosAccountManager) {
+        NSMutableSet *UUIDs = [NSMutableSet set];
+        for (NSString *groupName in pithosAccount.groups) {
+            [UUIDs addObjectsFromArray:[pithosAccount.groups objectForKey:groupName]];
+        }
+        [UUIDs removeObject:@""];
+        [UUIDs removeObject:@"*"];
+        if (UUIDs.count) {
+            [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:[UUIDs allObjects]];
+        }
+        
+        NSMutableDictionary *newTranslatedGroups = [NSMutableDictionary dictionaryWithCapacity:pithosAccount.groups.count];
+        for (NSString *groupName in pithosAccount.groups) {
+            NSMutableArray *groupUsers = [NSMutableArray array];
+            for (NSString *UUID in [pithosAccount.groups objectForKey:groupName]) {
+                [groupUsers addObject:[pithosAccountManager displaynameForUUID:UUID safe:YES]];
+            }
+            [newTranslatedGroups setObject:groupUsers forKey:groupName];
+        }
+        self.translatedGroups = newTranslatedGroups;
+    } else {
+        self.translatedGroups = [pithosAccount.groups copy];
+    }
+}
+
+#pragma mark -
 #pragma mark Properties
 
 - (void)setPithos:(ASIPithos *)aPithos {
@@ -90,32 +121,9 @@ static NSImage *sharedIcon = nil;
 }
 
 - (void)setPithosAccount:(ASIPithosAccount *)aPithosAccount {
-    if (!aPithosAccount) {
+    if (![pithosAccount isEqualTo:aPithosAccount]) {
         pithosAccount = aPithosAccount;
-        self.translatedGroups = [NSMutableDictionary dictionary];
-    } else if (![aPithosAccount isEqualTo:pithosAccount]) {
-        pithosAccount = aPithosAccount;
-        if (pithosAccountManager) {
-            NSMutableArray *UUIDs = [NSMutableArray array];
-            for (NSString *groupName in pithosAccount.groups) {
-                [UUIDs addObjectsFromArray:[pithosAccount.groups objectForKey:groupName]];
-            }
-            if (UUIDs.count) {
-                [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:UUIDs];
-            }
-            
-            NSMutableDictionary *newTranslatedGroups = [NSMutableDictionary dictionaryWithCapacity:pithosAccount.groups.count];
-            for (NSString *groupName in pithosAccount.groups) {
-                NSMutableArray *groupUsers = [NSMutableArray array];
-                for (NSString *UUID in [pithosAccount.groups objectForKey:groupName]) {
-                    [groupUsers addObject:[pithosAccountManager displaynameForUUID:UUID safe:YES]];
-                }
-                [newTranslatedGroups setObject:groupUsers forKey:groupName];
-            }
-            self.translatedGroups = newTranslatedGroups;
-        } else {
-            self.translatedGroups = [pithosAccount.groups copy];
-        }
+        [self updateGroups];
     }
 }
 
@@ -418,7 +426,7 @@ static NSImage *sharedIcon = nil;
                                 }
                             }
                             if (!inexistentGroupUsers.count) {
-                                // create groups
+                                // Create groups.
                                 for (NSString *groupName in translatedGroups) {
                                     NSMutableArray *groupUsers = [NSMutableArray array];
                                     for (NSString *groupUser in [translatedGroups objectForKey:groupName]) {
@@ -461,7 +469,14 @@ static NSImage *sharedIcon = nil;
                             }
                         }
                     } else {
-                        [groups setObject:[NSArray arrayWithObject:@""] forKey:@"group"];
+                        for (NSString *groupName in translatedGroups) {
+                            if ([[translatedGroups objectForKey:groupName] containsObject:@"*"]) {
+                                [groups setObject:[NSMutableArray arrayWithObject:@"*"] forKey:groupName];
+                            }
+                        }
+                        if (!groups.count) {
+                            [groups setObject:[NSArray arrayWithObject:@""] forKey:@"group"];
+                        }
                     }
                 } else {
                     [groups addEntriesFromDictionary:translatedGroups];