|
Evan@660
|
1 |
// |
|
Evan@660
|
2 |
// PurpleFacebookAccount.m |
|
Evan@660
|
3 |
// Adium |
|
Evan@660
|
4 |
// |
|
Evan@660
|
5 |
// Created by Evan Schoenberg on 1/15/09. |
|
Evan@660
|
6 |
// Copyright 2009 Adium X. All rights reserved. |
|
Evan@660
|
7 |
// |
|
Evan@660
|
8 |
|
|
Evan@660
|
9 |
#import "PurpleFacebookAccount.h" |
|
Evan@660
|
10 |
#import <Adium/AIHTMLDecoder.h> |
|
Evan@793
|
11 |
#import <Adium/AIListContact.h> |
|
David@837
|
12 |
#import <Adium/AIStatus.h> |
|
Evan@660
|
13 |
|
|
Evan@660
|
14 |
@implementation PurpleFacebookAccount |
|
Evan@660
|
15 |
|
|
Evan@660
|
16 |
- (const char*)protocolPlugin |
|
Evan@660
|
17 |
{ |
|
Evan@660
|
18 |
return "prpl-bigbrownchunx-facebookim"; |
|
Evan@660
|
19 |
} |
|
Evan@660
|
20 |
|
|
Evan@660
|
21 |
- (NSString *)webProfileStringForContact:(AIListContact *)contact |
|
Evan@660
|
22 |
{ |
|
Evan@660
|
23 |
return [NSString stringWithFormat:NSLocalizedString(@"View %@'s Facebook profile", nil), |
|
David@837
|
24 |
contact.displayName]; |
|
Evan@660
|
25 |
} |
|
Evan@660
|
26 |
|
|
Evan@660
|
27 |
- (void)configurePurpleAccount |
|
Evan@660
|
28 |
{ |
|
Evan@660
|
29 |
[super configurePurpleAccount]; |
|
Evan@660
|
30 |
|
|
Evan@660
|
31 |
/* We could add a pref for this, but not without some enhancements to mail notifications. Currently, this being |
|
Evan@660
|
32 |
* enabled means ugly nasty "You have new mail!" popups continuously, since that's how 'notifications' are passed |
|
Evan@660
|
33 |
* to us. |
|
Evan@660
|
34 |
*/ |
|
Evan@660
|
35 |
purple_account_set_bool(account, "facebook_get_notifications", FALSE); |
|
zacw@2731
|
36 |
|
|
zacw@2731
|
37 |
// We do our own history; don't let the server's history get displayed as new messages |
|
zacw@2731
|
38 |
purple_account_set_bool(account, "facebook_show_history", FALSE); |
|
zacw@2731
|
39 |
|
|
zacw@2832
|
40 |
// Use friends list as groups. |
|
zacw@2731
|
41 |
purple_account_set_bool(account, "facebook_use_groups", TRUE); |
|
zacw@2832
|
42 |
|
|
zacw@2832
|
43 |
// Allow for moving through libpurple |
|
zacw@2832
|
44 |
purple_account_set_bool(account, "facebook_manage_friends", TRUE); |
|
Evan@660
|
45 |
} |
|
Evan@660
|
46 |
|
|
Evan@660
|
47 |
- (NSString *)host |
|
Evan@660
|
48 |
{ |
|
Evan@660
|
49 |
return @"login.facebook.com"; |
|
Evan@660
|
50 |
} |
|
Evan@660
|
51 |
|
|
Evan@660
|
52 |
- (const char *)purpleStatusIDForStatus:(AIStatus *)statusState |
|
Evan@660
|
53 |
arguments:(NSMutableDictionary *)arguments |
|
Evan@660
|
54 |
{ |
|
David@837
|
55 |
if (statusState.statusType == AIOfflineStatusType) { |
|
Evan@660
|
56 |
return "offline"; |
|
Evan@660
|
57 |
} else { |
|
Evan@660
|
58 |
return "available"; |
|
Evan@660
|
59 |
} |
|
Evan@660
|
60 |
} |
|
Evan@660
|
61 |
|
|
Evan@660
|
62 |
- (void)setSocialNetworkingStatusMessage:(NSAttributedString *)statusMessage |
|
Evan@660
|
63 |
{ |
|
Evan@660
|
64 |
NSMutableDictionary *arguments = [NSMutableDictionary dictionary]; |
|
Evan@660
|
65 |
NSString *encodedStatusMessage = (statusMessage ? |
|
Evan@660
|
66 |
[self encodedAttributedString:statusMessage |
|
Evan@660
|
67 |
forStatusState:nil] : |
|
Evan@660
|
68 |
nil); |
|
Evan@660
|
69 |
if (encodedStatusMessage) { |
|
Evan@660
|
70 |
[arguments setObject:encodedStatusMessage |
|
Evan@660
|
71 |
forKey:@"message"]; |
|
Evan@660
|
72 |
} |
|
Evan@660
|
73 |
|
|
Evan@660
|
74 |
purple_account_set_bool(account, "facebook_set_status_through_pidgin", TRUE); |
|
Evan@660
|
75 |
[self setStatusState:nil |
|
Evan@660
|
76 |
statusID:"available" /* facebook only supports available */ |
|
Evan@660
|
77 |
isActive:[NSNumber numberWithBool:YES] |
|
Evan@660
|
78 |
arguments:arguments]; |
|
Evan@660
|
79 |
purple_account_set_bool(account, "facebook_set_status_through_pidgin", FALSE); |
|
Evan@660
|
80 |
} |
|
Evan@660
|
81 |
|
|
Evan@660
|
82 |
- (NSString *)encodedAttributedString:(NSAttributedString *)inAttributedString forListObject:(AIListObject *)inListObject |
|
Evan@660
|
83 |
{ |
|
Evan@660
|
84 |
return [AIHTMLDecoder encodeHTML:inAttributedString |
|
Evan@660
|
85 |
headers:YES |
|
Evan@660
|
86 |
fontTags:YES |
|
Evan@660
|
87 |
includingColorTags:YES |
|
Evan@660
|
88 |
closeFontTags:YES |
|
Evan@660
|
89 |
styleTags:YES |
|
Evan@660
|
90 |
closeStyleTagsOnFontChange:YES |
|
Evan@699
|
91 |
encodeNonASCII:NO |
|
Evan@660
|
92 |
encodeSpaces:NO |
|
Evan@660
|
93 |
imagesPath:nil |
|
Evan@660
|
94 |
attachmentsAsText:YES |
|
Evan@660
|
95 |
onlyIncludeOutgoingImages:NO |
|
Evan@660
|
96 |
simpleTagsOnly:NO |
|
Evan@660
|
97 |
bodyBackground:NO |
|
Evan@660
|
98 |
allowJavascriptURLs:YES]; |
|
Evan@660
|
99 |
} |
|
Evan@660
|
100 |
|
|
Evan@793
|
101 |
/*! |
|
Evan@793
|
102 |
* @brief Set an alias for a contact |
|
Evan@793
|
103 |
* |
|
Evan@793
|
104 |
* Normally, we consider the name a 'serverside alias' unless it matches the UID's characters |
|
Evan@793
|
105 |
* However, the UID in facebook should never be presented to the user if possible; it's for internal use |
|
Evan@793
|
106 |
* only. We'll therefore consider any alias a formatted UID such that it will replace the UID when displayed |
|
Evan@793
|
107 |
* in Adium. |
|
Evan@793
|
108 |
*/ |
|
Evan@793
|
109 |
- (void)updateContact:(AIListContact *)theContact toAlias:(NSString *)purpleAlias |
|
Evan@793
|
110 |
{ |
|
David@837
|
111 |
if (![purpleAlias isEqualToString:theContact.formattedUID] && |
|
David@837
|
112 |
![purpleAlias isEqualToString:theContact.UID]) { |
|
Evan@793
|
113 |
[theContact setFormattedUID:purpleAlias |
|
Evan@793
|
114 |
notify:NotifyLater]; |
|
Evan@793
|
115 |
|
|
Evan@793
|
116 |
//Apply any changes |
|
Evan@793
|
117 |
[theContact notifyOfChangedPropertiesSilently:silentAndDelayed]; |
|
Evan@793
|
118 |
} |
|
Evan@793
|
119 |
} |
|
Evan@793
|
120 |
|
|
Evan@660
|
121 |
@end |