William Bowling is sharing code with you

Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.

Don't show this again

wbowling / adium (fork of adium / adium)

Fork of Adium for patches/improvements

Clone this repository (size: 338.7 MB): HTTPS / SSH
hg clone https://bitbucket.org/wbowling/adium
hg clone ssh://hg@bitbucket.org/wbowling/adium

adium / Plugins / Purple Service / AMPurpleJabberMoodTooltip.m

//
//  AMPurpleJabberMoodTooltip.m
//  Adium
//
//  Created by Andreas Monitzer on 2007-06-12.
//  Copyright 2007 Andreas Monitzer. All rights reserved.
//

#import "AMPurpleJabberMoodTooltip.h"
#import "ESPurpleJabberAccount.h"
#import <Adium/AIListContact.h>
#import <libpurple/blist.h>

@implementation AMPurpleJabberMoodTooltip

- (NSString *)labelForObject:(AIListObject *)inObject {
        if ([inObject isKindOfClass:[AIListContact class]] &&
                [[(AIListContact *)inObject account] isKindOfClass:[ESPurpleJabberAccount class]]) {
                PurpleAccount *account = [(ESPurpleJabberAccount *)[(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_active_status(presence) : nil);
                PurpleValue *value = (status ? purple_status_get_attr_value(status, "mood") : nil);
                
                if(value && (purple_value_get_type(value) == PURPLE_TYPE_STRING) && purple_value_get_string(value))
                        return AILocalizedString(@"Mood","user mood tooltip title");
        }

        return nil;
}

- (NSAttributedString *)entryForObject:(AIListObject *)inObject {
        if ([inObject isKindOfClass:[AIListContact class]] &&
                [[(AIListContact *)inObject account] isKindOfClass:[ESPurpleJabberAccount class]]) {
                PurpleAccount *account = [(ESPurpleJabberAccount *)[(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_active_status(presence) : nil);
                PurpleValue *value = (status ? purple_status_get_attr_value(status, "mood") : nil);
                
                if(value && (purple_value_get_type(value) == PURPLE_TYPE_STRING)) {
                        const char *mood = purple_value_get_string(value);
                        if(mood) {
                                NSString *str;
                                                        
                                value = purple_status_get_attr_value(status, "moodtext");
                                if(value && purple_value_get_type(value) == PURPLE_TYPE_STRING && purple_value_get_string(value) && purple_value_get_string(value)[0] != '\0')
                                        str = [NSString stringWithFormat:@"%s (%s)", mood, purple_value_get_string(value)];
                                else
                                        str = [NSString stringWithUTF8String:mood];
                                
                                return [[[NSAttributedString alloc] initWithString:str attributes:nil] autorelease];
                        }
                }
        }

        return nil;
}

- (BOOL)shouldDisplayInContactInspector
{
        return YES;
}

@end