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