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 / AIPurpleGTalkAccount.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 "AIPurpleGTalkAccount.h"

@implementation AIPurpleGTalkAccount

- (const char *)purpleAccountName
{
        NSString         *userNameWithGmailDotCom = nil;

        /*
         * Purple stores the username in the format username@server/resource.  We need to pass it a username in this format
         *
         * Append @gmail.com if no domain is specified.
         * Valid domains include gmail.com, googlemail.com, and google-hosted domains like e.co.za.
         */
        if ([UID rangeOfString:@"@"].location == NSNotFound) {
                userNameWithGmailDotCom = [UID stringByAppendingString:@"@gmail.com"];
        } else {
                userNameWithGmailDotCom = UID;
        }

        NSString *completeUserName = [NSString stringWithFormat:@"%@/%@",userNameWithGmailDotCom, [self resourceName]];

        return [completeUserName UTF8String];
}

- (NSString *)serverSuffix
{
        return @"@gmail.com";
}

/*!
 * @brief Allow a file transfer with an object?
 *
 * As of July 28th, 2006, GTalk allows transfers.
 */
- (BOOL)allowFileTransferWithListObject:(AIListObject *)inListObject
{
        return YES;
}

- (AIReconnectDelayType)shouldAttemptReconnectAfterDisconnectionError:(NSString **)disconnectionError
{
        AIReconnectDelayType shouldAttemptReconnect = [super shouldAttemptReconnectAfterDisconnectionError:disconnectionError];
        
        if (disconnectionError && *disconnectionError) {
                if (([*disconnectionError rangeOfString:@"401"].location != NSNotFound) ||
                        ([*disconnectionError rangeOfString:@"Authentication Failure"].location != NSNotFound) ||
                        ([*disconnectionError rangeOfString:@"Not Authorized"].location != NSNotFound)) {
                        [self setLastDisconnectionError:AILocalizedString(@"Incorrect username or password","Error message displayed when the server reports username or password as being incorrect.")];
                        [self serverReportedInvalidPassword];
                        shouldAttemptReconnect = AIReconnectImmediately;
                }
        }

        return shouldAttemptReconnect;
}

- (void)configurePurpleAccount
{
        [super configurePurpleAccount];
        
        // force connect server
        purple_account_set_string(account, "connect_server", "talk.google.com");
}

- (BOOL)allowAccountUnregistrationIfSupportedByLibpurple
{
        return NO;
}

@end