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 / ESPurpleICQAccount.m

/* 
 * Adium is the legal property of its developers, whose names are listed in the copyright file included
 * with this source distribution.
 * 
 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
 * General Public License as published by the Free Software Foundation; either version 2 of the License,
 * or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
 * Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with this program; if not,
 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#import <Adium/AIStatusControllerProtocol.h>
#import "ESPurpleICQAccount.h"
#import <Adium/AIListContact.h>
#import <Adium/AIStatus.h>
#import <Adium/AIContentMessage.h>
#import <AIUtilities/AIAttributedStringAdditions.h>

@implementation ESPurpleICQAccount
- (const char *)protocolPlugin
{
    return "prpl-icq";
}

- (void)configurePurpleAccount
{
        [super configurePurpleAccount];

        NSString        *encoding;

        //Default encoding
        if ((encoding = [self preferenceForKey:KEY_ICQ_ENCODING group:GROUP_ACCOUNT_STATUS])) {
                purple_account_set_string(account, "encoding", [encoding UTF8String]);
        }
        
        //Defaults to YES
        purple_account_set_bool(account, "authorization", [[self preferenceForKey:KEY_ICQ_REQUIRE_AUTH group:GROUP_ACCOUNT_STATUS] boolValue]);
        
        //Defaults to NO - web_aware will cause lots of spam for many users!
        purple_account_set_bool(account, "web_aware", [[self preferenceForKey:KEY_ICQ_WEB_AWARE group:GROUP_ACCOUNT_STATUS] boolValue]);
}

#pragma mark Contact updates

- (const char *)purpleStatusIDForStatus:(AIStatus *)statusState
                                                        arguments:(NSMutableDictionary *)arguments
{
        const char              *statusID = NULL;
        NSString                *statusName = statusState.statusName;
        NSString                *statusMessageString = [statusState statusMessageString];
        
        if (!statusMessageString) statusMessageString = @"";
                
        switch (statusState.statusType) {
                case AIAvailableStatusType:
                        if ([statusName isEqualToString:STATUS_NAME_FREE_FOR_CHAT]) {
                                statusID = OSCAR_STATUS_ID_FREE4CHAT;
                        }
                        break;

                case AIAwayStatusType:
                {
                        if (([statusName isEqualToString:STATUS_NAME_DND]) ||
                           ([statusMessageString caseInsensitiveCompare:[adium.statusController localizedDescriptionForCoreStatusName:STATUS_NAME_DND]]== NSOrderedSame))
                                statusID = OSCAR_STATUS_ID_DND;
                        else if (([statusName isEqualToString:STATUS_NAME_NOT_AVAILABLE]) ||
                                         ([statusMessageString caseInsensitiveCompare:[adium.statusController localizedDescriptionForCoreStatusName:STATUS_NAME_NOT_AVAILABLE]]== NSOrderedSame))
                                statusID = OSCAR_STATUS_ID_NA;
                        else if (([statusName isEqualToString:STATUS_NAME_OCCUPIED]) ||
                                         ([statusMessageString caseInsensitiveCompare:[adium.statusController localizedDescriptionForCoreStatusName:STATUS_NAME_OCCUPIED]]== NSOrderedSame))
                                statusID = OSCAR_STATUS_ID_OCCUPIED;
                        break;
                }
                        
                case AIInvisibleStatusType: 
                case AIOfflineStatusType:
                        break;
        }

        //If we didn't get a purple status type, request one from super
        if (statusID == NULL) statusID = [super purpleStatusIDForStatus:statusState arguments:arguments];
        
        return statusID;
}

@end