adium 2222:00cd762b8ecd: For the tune tooltip, iterate through a...

commits at adium.im commits at adium.im
Sun May 17 16:39:20 UTC 2009


details:	http://hg.adium.im/adium/rev/00cd762b8ecd
revision:	2222:00cd762b8ecd
author:		Zachary West <zacw at adium.im>
date:		Sun May 17 12:39:12 2009 -0400

For the tune tooltip, iterate through a meta contact to find a contact which supports tune.

Alter change the order of the message to "title - artist" instead of the opposite, since that's how the MSN prpl formats it for status messages where appropriate (no status message is set).

diffstat:

 Plugins/Purple Service/AMPurpleTuneTooltip.m |  71 +++++++++++++++++------
 1 files changed, 52 insertions(+), 19 deletions(-)

diffs (114 lines):

diff -r aec584787c0f -r 00cd762b8ecd Plugins/Purple Service/AMPurpleTuneTooltip.m
--- a/Plugins/Purple Service/AMPurpleTuneTooltip.m	Sun May 17 12:14:06 2009 -0400
+++ b/Plugins/Purple Service/AMPurpleTuneTooltip.m	Sun May 17 12:39:12 2009 -0400
@@ -9,33 +9,33 @@
 #import "AMPurpleTuneTooltip.h"
 #import <Adium/AIListObject.h>
 #import <Adium/AIListContact.h>
+#import <Adium/AIMetaContact.h>
 #import <Adium/AIHTMLDecoder.h>
 #import "CBPurpleAccount.h"
 #import <libpurple/blist.h>
 
+ at interface AMPurpleTuneTooltip()
+- (AIListContact *)tuneContactForListObject:(AIListObject *)listObject;
+ at end
+
 @implementation AMPurpleTuneTooltip
 
-- (NSString *)labelForObject:(AIListObject *)inObject {
-	if ([inObject isKindOfClass:[AIListContact class]] &&
-		[[(AIListContact *)inObject account] isKindOfClass:[CBPurpleAccount class]]) {
-		PurpleAccount *account = [(CBPurpleAccount *)[(AIListContact *)inObject account] purpleAccount];
-		PurpleBuddy *buddy = (account ? purple_find_buddy(account, [inObject.UID UTF8String]) : nil);
-		PurplePresence *presence = (buddy ? purple_buddy_get_presence(buddy) : nil);
-		PurpleStatus *status = (presence ? purple_presence_get_status(presence, "tune") : nil);
-		PurpleValue *value = (status ? purple_status_get_attr_value(status, "tune_title") : nil);
-		
-		if (value && purple_value_get_type(value) == PURPLE_TYPE_STRING && purple_value_get_string(value))
-			return AILocalizedString(@"Tune","user tune tooltip title");
+- (NSString *)labelForObject:(AIListObject *)inObject
+{
+	if ([self tuneContactForListObject:inObject]) {
+		return AILocalizedString(@"Tune","user tune tooltip title");
 	}
 	
 	return nil;
 }
 
-- (NSAttributedString *)entryForObject:(AIListObject *)inObject {
-	if ([inObject isKindOfClass:[AIListContact class]] &&
-		[[(AIListContact *)inObject account] isKindOfClass:[CBPurpleAccount class]]) {
-		PurpleAccount *account = [(CBPurpleAccount *)[(AIListContact *)inObject account] purpleAccount];
-		PurpleBuddy *buddy = (account ? purple_find_buddy(account, [inObject.UID UTF8String]) : nil);
+- (NSAttributedString *)entryForObject:(AIListObject *)inObject
+{
+	AIListContact *tuneContact = [self tuneContactForListObject:inObject];
+	
+	if (tuneContact) {
+		PurpleAccount *account = [(CBPurpleAccount *)tuneContact.account purpleAccount];
+		PurpleBuddy *buddy = (account ? purple_find_buddy(account, [tuneContact.UID UTF8String]) : nil);
 		PurplePresence *presence = (buddy ? purple_buddy_get_presence(buddy) : nil);
 		PurpleStatus *status = (presence ? purple_presence_get_status(presence, "tune") : nil);
 		
@@ -49,7 +49,6 @@
 		PurpleValue *album = purple_status_get_attr_value(status, "tune_album");
 		PurpleValue *time = purple_status_get_attr_value(status, "tune_time");
 		
-		
 		const char *titlestr = purple_value_get_string(title);
 		const char *artiststr = NULL;
 		const char *albumstr = NULL;
@@ -64,11 +63,15 @@
 			timeval = purple_value_get_int(time);
 		
 		NSMutableString *text = [NSMutableString string];
+		
+		[text appendString:[NSString stringWithUTF8String:titlestr]];
+		
 		if (artiststr && artiststr[0] != '\0')
-			[text appendFormat:@"%@ - ", [NSString stringWithUTF8String:artiststr]];
-		[text appendString:[NSString stringWithUTF8String:titlestr]];
+			[text appendFormat:@" - %@", [NSString stringWithUTF8String:artiststr]];
+		
 		if (albumstr && albumstr[0] != '\0')
 			[text appendFormat:@" (%@)", [NSString stringWithUTF8String:albumstr]];
+		
 		if (timeval > 0)
 			[text appendFormat:@" - [%d:%02d]", timeval / 60, timeval % 60];
 		
@@ -83,4 +86,34 @@
 	return YES;
 }
 
+- (AIListContact *)tuneContactForListObject:(AIListObject *)listObject
+{
+	NSMutableArray *contacts = [NSMutableArray array];
+	
+	if ([listObject isKindOfClass:[AIMetaContact class]]) {
+		for (AIListContact *contact in (AIMetaContact *)listObject) {
+			if ([contact.account isKindOfClass:[CBPurpleAccount class]]) {
+				[contacts addObject:contact];
+			}
+		}
+	} else if ([listObject isKindOfClass:[AIListContact class]] &&
+			   [((AIListContact *)listObject).account isKindOfClass:[CBPurpleAccount class]]) {
+		[contacts addObject:listObject];
+	}
+	
+	for (AIListContact *contact in contacts) {
+		PurpleAccount *account = [(CBPurpleAccount *)contact.account purpleAccount];
+		PurpleBuddy *buddy = (account ? purple_find_buddy(account, [contact.UID UTF8String]) : nil);
+		PurplePresence *presence = (buddy ? purple_buddy_get_presence(buddy) : nil);
+		PurpleStatus *status = (presence ? purple_presence_get_status(presence, "tune") : nil);
+		PurpleValue *value = (status ? purple_status_get_attr_value(status, "tune_title") : nil);
+		
+		if (value && purple_value_get_type(value) == PURPLE_TYPE_STRING && purple_value_get_string(value)) {
+			return contact;
+		}
+	}
+	
+	return nil;
+}
+
 @end




More information about the commits mailing list