diff libpurple/protocols/msn/user.c @ 30692:1830fa548302

propagate from branch 'im.pidgin.pidgin' (head b0098e2250f135d121960d8152e144e7e344125e) to branch 'im.pidgin.cpw.qulogic.msnp16' (head 03b7207e3af73e90ff9aea7c633dec9dd9d3ed1a)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 06 Feb 2010 05:15:35 +0000
parents f56126c5aa44 746bf7d8b34e
children 6376fc7a092e
line wrap: on
line diff
--- a/libpurple/protocols/msn/user.c	Thu Feb 04 20:57:01 2010 +0000
+++ b/libpurple/protocols/msn/user.c	Sat Feb 06 05:15:35 2010 +0000
@@ -75,12 +75,15 @@
 	g_free(user->passport);
 	g_free(user->friendly_name);
 	g_free(user->uid);
-	g_free(user->phone.home);
-	g_free(user->phone.work);
-	g_free(user->phone.mobile);
-	g_free(user->media.artist);
-	g_free(user->media.title);
-	g_free(user->media.album);
+	if (user->extinfo) {
+		g_free(user->extinfo->media_album);
+		g_free(user->extinfo->media_artist);
+		g_free(user->extinfo->media_title);
+		g_free(user->extinfo->phone_home);
+		g_free(user->extinfo->phone_mobile);
+		g_free(user->extinfo->phone_work);
+		g_free(user->extinfo);
+	}
 	g_free(user->statusline);
 	g_free(user->invite_message);
 
@@ -115,24 +118,24 @@
 		purple_prpl_got_user_status_deactive(account, user->passport, "mobile");
 	}
 
-	if (!offline && user->media.type != CURRENT_MEDIA_UNKNOWN) {
-		if (user->media.type == CURRENT_MEDIA_MUSIC) {
+	if (!offline && user->extinfo && user->extinfo->media_type != CURRENT_MEDIA_UNKNOWN) {
+		if (user->extinfo->media_type == CURRENT_MEDIA_MUSIC) {
 			purple_prpl_got_user_status(account, user->passport, "tune",
-			                            PURPLE_TUNE_ARTIST, user->media.artist,
-			                            PURPLE_TUNE_ALBUM, user->media.album,
-			                            PURPLE_TUNE_TITLE, user->media.title,
+			                            PURPLE_TUNE_ARTIST, user->extinfo->media_artist,
+			                            PURPLE_TUNE_ALBUM, user->extinfo->media_album,
+			                            PURPLE_TUNE_TITLE, user->extinfo->media_title,
 			                            NULL);
-		} else if (user->media.type == CURRENT_MEDIA_GAMES) {
+		} else if (user->extinfo->media_type == CURRENT_MEDIA_GAMES) {
 			purple_prpl_got_user_status(account, user->passport, "tune",
-			                            "game", user->media.title,
+			                            "game", user->extinfo->media_title,
 			                            NULL);
-		} else if (user->media.type == CURRENT_MEDIA_OFFICE) {
+		} else if (user->extinfo->media_type == CURRENT_MEDIA_OFFICE) {
 			purple_prpl_got_user_status(account, user->passport, "tune",
-			                            "office", user->media.title,
+			                            "office", user->extinfo->media_title,
 			                            NULL);
 		} else {
 			purple_debug_warning("msn", "Got CurrentMedia with unknown type %d.\n",
-			                     user->media.type);
+			                     user->extinfo->media_type);
 		}
 	} else {
 		purple_prpl_got_user_status_deactive(account, user->passport, "tune");
@@ -216,21 +219,6 @@
 }
 
 void
-msn_user_set_currentmedia(MsnUser *user, const CurrentMedia *media)
-{
-	g_return_if_fail(user != NULL);
-
-	g_free(user->media.title);
-	g_free(user->media.album);
-	g_free(user->media.artist);
-
-	user->media.type   = media ? media->type : CURRENT_MEDIA_UNKNOWN;
-	user->media.title  = media ? g_strdup(media->title) : NULL;
-	user->media.artist = media ? g_strdup(media->artist) : NULL;
-	user->media.album  = media ? g_strdup(media->album) : NULL;
-}
-
-void
 msn_user_set_uid(MsnUser *user, const char *uid)
 {
 	g_return_if_fail(user != NULL);
@@ -415,8 +403,15 @@
 {
 	g_return_if_fail(user != NULL);
 
-	g_free(user->phone.home);
-	user->phone.home = g_strdup(number);
+	if (!number && !user->extinfo)
+		return;
+
+	if (user->extinfo)
+		g_free(user->extinfo->phone_home);
+	else
+		user->extinfo = g_new0(MsnUserExtendedInfo, 1);
+
+	user->extinfo->phone_home = g_strdup(number);
 }
 
 void
@@ -424,8 +419,15 @@
 {
 	g_return_if_fail(user != NULL);
 
-	g_free(user->phone.work);
-	user->phone.work = g_strdup(number);
+	if (!number && !user->extinfo)
+		return;
+
+	if (user->extinfo)
+		g_free(user->extinfo->phone_work);
+	else
+		user->extinfo = g_new0(MsnUserExtendedInfo, 1);
+
+	user->extinfo->phone_work = g_strdup(number);
 }
 
 void
@@ -433,8 +435,15 @@
 {
 	g_return_if_fail(user != NULL);
 
-	g_free(user->phone.mobile);
-	user->phone.mobile = g_strdup(number);
+	if (!number && !user->extinfo)
+		return;
+
+	if (user->extinfo)
+		g_free(user->extinfo->phone_mobile);
+	else
+		user->extinfo = g_new0(MsnUserExtendedInfo, 1);
+
+	user->extinfo->phone_mobile = g_strdup(number);
 }
 
 void
@@ -517,7 +526,7 @@
 {
 	g_return_val_if_fail(user != NULL, NULL);
 
-	return user->phone.home;
+	return user->extinfo ? user->extinfo->phone_home : NULL;
 }
 
 const char *
@@ -525,7 +534,7 @@
 {
 	g_return_val_if_fail(user != NULL, NULL);
 
-	return user->phone.work;
+	return user->extinfo ? user->extinfo->phone_work : NULL;
 }
 
 const char *
@@ -533,7 +542,7 @@
 {
 	g_return_val_if_fail(user != NULL, NULL);
 
-	return user->phone.mobile;
+	return user->extinfo ? user->extinfo->phone_mobile : NULL;
 }
 
 guint