diff libpurple/status.c @ 16798:c4460fa22886

Change some of the PurplePresence stuff to reflect how it's actually used
author Sean Egan <seanegan@gmail.com>
date Thu, 03 May 2007 06:32:42 +0000
parents d29c995c815b
children 49cc59b2490e
line wrap: on
line diff
--- a/libpurple/status.c	Thu May 03 06:31:27 2007 +0000
+++ b/libpurple/status.c	Thu May 03 06:32:42 2007 +0000
@@ -91,8 +91,7 @@
 		{
 			PurpleAccount *account;
 			char *name;
-			size_t ref_count;
-			GList *buddies;
+			PurpleBuddy *buddy;
 
 		} buddy;
 
@@ -131,7 +130,8 @@
 	-200,   /* extended away            */
 	-400,   /* mobile                   */
 	-10,    /* idle, special case.      */
-	-5      /* idle time, special case. */
+	-5,     /* idle time, special case. */
+	10      /* Offline messageable      */
 };
 
 static GHashTable *buddy_presences = NULL;
@@ -658,13 +658,8 @@
 	}
 	else if (context == PURPLE_PRESENCE_CONTEXT_BUDDY)
 	{
-		const GList *l;
-
-		for (l = purple_presence_get_buddies(presence); l != NULL; l = l->next)
-		{
-			notify_buddy_status_update((PurpleBuddy *)l->data, presence,
+			notify_buddy_status_update(purple_presence_get_buddy(presence), presence,
 					old_status, new_status);
-		}
 	}
 }
 
@@ -1148,10 +1143,7 @@
 		g_free(key->name);
 		g_free(key);
 	}
-
-	presence->u.buddy.ref_count++;
-	presence->u.buddy.buddies = g_list_append(presence->u.buddy.buddies,
-			buddy);
+	presence->u.buddy.buddy = buddy;
 
 	return presence;
 }
@@ -1165,9 +1157,6 @@
 	{
 		PurpleStatusBuddyKey key;
 
-		if(presence->u.buddy.ref_count != 0)
-			return;
-
 		key.account = presence->u.buddy.account;
 		key.name    = presence->u.buddy.name;
 
@@ -1189,27 +1178,6 @@
 	g_free(presence);
 }
 
-/*
- * TODO: Maybe we should cal purple_presence_destroy() after we
- *       decrement the ref count?  I don't see why we should
- *       make other places do it manually when we can do it here.
- */
-void
-purple_presence_remove_buddy(PurplePresence *presence, PurpleBuddy *buddy)
-{
-	g_return_if_fail(presence != NULL);
-	g_return_if_fail(buddy    != NULL);
-	g_return_if_fail(purple_presence_get_context(presence) ==
-			PURPLE_PRESENCE_CONTEXT_BUDDY);
-
-	if (g_list_find(presence->u.buddy.buddies, buddy) != NULL)
-	{
-		presence->u.buddy.buddies = g_list_remove(presence->u.buddy.buddies,
-				buddy);
-		presence->u.buddy.ref_count--;
-	}
-}
-
 void
 purple_presence_add_status(PurplePresence *presence, PurpleStatus *status)
 {
@@ -1345,11 +1313,8 @@
 		const GList *l;
 		time_t current_time = time(NULL);
 
-		for (l = purple_presence_get_buddies(presence); l != NULL; l = l->next)
-		{
-			update_buddy_idle((PurpleBuddy *)l->data, presence, current_time,
-			old_idle, idle);
-		}
+		update_buddy_idle(purple_presence_get_buddy(presence), presence, current_time,
+		old_idle, idle);
 	}
 	else if(purple_presence_get_context(presence) == PURPLE_PRESENCE_CONTEXT_ACCOUNT)
 	{
@@ -1443,14 +1408,14 @@
 	return presence->u.chat.user;
 }
 
-const GList *
-purple_presence_get_buddies(const PurplePresence *presence)
+PurpleBuddy *
+purple_presence_get_buddy(const PurplePresence *presence)
 {
 	g_return_val_if_fail(presence != NULL, NULL);
 	g_return_val_if_fail(purple_presence_get_context(presence) ==
 			PURPLE_PRESENCE_CONTEXT_BUDDY, NULL);
 
-	return presence->u.buddy.buddies;
+	return presence->u.buddy.buddy;
 }
 
 const GList *