]> cgit.babelmonkeys.de Git - jubjub.git/blobdiff - src/gui/gtk/JubGtkRosterUI.m
Show the domainpart for contacts without nick and nodepart
[jubjub.git] / src / gui / gtk / JubGtkRosterUI.m
index e474bf9bc2438b946860a277f5e477960a27ea73..901da507e2411b08c05ff67aca7e019fec1e021c 100644 (file)
@@ -204,11 +204,16 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model,
                            0, [item.name UTF8String],
                            1, [bareJID UTF8String],
                            2, "unavailable", -1);
-               else
+               else if (item.JID.node)
                        gtk_tree_store_set(roster_model, &contact_iter,
                            0, [item.JID.node UTF8String],
                            1, [bareJID UTF8String],
                            2, "unavailable", -1);
+               else
+                       gtk_tree_store_set(roster_model, &contact_iter,
+                           0, [item.JID.domain UTF8String],
+                           1, [bareJID UTF8String],
+                           2, "unavailable", -1);
 
                contact_path = gtk_tree_model_get_path(GTK_TREE_MODEL(
                        roster_model), &contact_iter);
@@ -316,6 +321,28 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model,
 -   (void)contact: (XMPPContact*)contact
   didSendPresence: (XMPPPresence*)presence
 {
+       OFDictionary *allPresences = [contact presences];
+       XMPPPresence *highPresence = [[[allPresences allObjects] sortedArray]
+                                        lastObject];
+       OFMutableString *tooltip =
+           [OFMutableString stringWithString: @"<b>Resources:</b>"];
+
+       [allPresences enumerateKeysAndObjectsUsingBlock:
+           ^(OFString *resource, XMPPPresence *pres, BOOL *stop) {
+               [tooltip appendString: @"\n"];
+               [tooltip appendString: resource];
+               if ([pres.type isEqual: @"available"]) {
+                       if (pres.show != nil)
+                               [tooltip appendFormat: @" (%@)", pres.show];
+                       else
+                               [tooltip appendString: @" (available)"];
+               } else
+                       [tooltip appendString: @" (unavailable)"];
+
+               if (pres.status)
+                       [tooltip appendFormat: @": <i>%@</i>", pres.status];
+       }];
+
        g_idle_add_block(^{
                GtkTreeIter iter;
                GtkTreePath *path;
@@ -330,19 +357,20 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model,
                            &iter, path);
                        gtk_tree_path_free(path);
 
-                       if ([presence.type isEqual: @"available"])
-                               if (presence.show != nil)
+                       if ([highPresence.type isEqual: @"available"]) {
+                               if (highPresence.show != nil)
                                        gtk_tree_store_set(roster_model, &iter,
-                                           2, [presence.show UTF8String], -1);
+                                           2, [highPresence.show UTF8String],
+                                           -1);
                                else
                                        gtk_tree_store_set(roster_model, &iter,
                                            2, "available", -1);
-                       else if ([presence.type isEqual: @"unavailable"])
+                       } else
                                gtk_tree_store_set(roster_model, &iter,
                                    2, "unavailable", -1);
 
                        gtk_tree_store_set(roster_model, &iter,
-                           3, [presence.status UTF8String], -1);
+                           3, [tooltip UTF8String], -1);
                }
 
                gtk_tree_model_filter_refilter(roster_filter);