purple: fix possible gsize vs. size_t incompatibilty
[siplcs.git] / src / adium / ESPurpleSIPEAccount.m
blob05f98be6318ffcbb7a19b8f3becdbdfe3718adb3
1 //
2 //  ESSIPEAccount.m
3 //  SIPEAdiumPlugin
4 //
5 //  Created by Matt Meissner on 10/30/09.
6 //  Copyright 2009 Matt Meissner. All rights reserved.
7 //
9 #import <Adium/AIStatus.h>
10 #import <Adium/AIHTMLDecoder.h>
12 #import "ESPurpleSIPEAccount.h"
14 #include "sipe-core.h"
16 // taken from sipe.c
17 /* Status identifiers (see also: sipe_status_types()) */
18 #define SIPE_STATUS_ID_UNKNOWN     purple_primitive_get_id_from_type(PURPLE_STATUS_UNSET)     /* Unset (primitive) */
19 #define SIPE_STATUS_ID_OFFLINE     purple_primitive_get_id_from_type(PURPLE_STATUS_OFFLINE)   /* Offline (primitive) */
20 #define SIPE_STATUS_ID_AVAILABLE   purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE) /* Online */
21 /*      PURPLE_STATUS_UNAVAILABLE: */
22 #define SIPE_STATUS_ID_BUSY        "busy"                                                     /* Busy */
23 #define SIPE_STATUS_ID_DND         "do-not-disturb"                                           /* Do Not Disturb */
24 #define SIPE_STATUS_ID_ONPHONE     "on-the-phone"                                             /* On The Phone */
25 #define SIPE_STATUS_ID_INVISIBLE   purple_primitive_get_id_from_type(PURPLE_STATUS_INVISIBLE) /* Appear Offline */
26 /*      PURPLE_STATUS_AWAY: */
27 #define SIPE_STATUS_ID_IDLE        "idle"                                                     /* Idle/Inactive */
28 #define SIPE_STATUS_ID_BRB         "be-right-back"                                            /* Be Right Back */
29 #define SIPE_STATUS_ID_AWAY        purple_primitive_get_id_from_type(PURPLE_STATUS_AWAY)      /* Away (primitive) */
30 #define SIPE_STATUS_ID_LUNCH       "out-to-lunch"                                             /* Out To Lunch */
31 /* ???  PURPLE_STATUS_EXTENDED_AWAY */
32 /* ???  PURPLE_STATUS_MOBILE */
33 /* ???  PURPLE_STATUS_TUNE */
36 @implementation ESPurpleSIPEAccount
37 - (const char*)protocolPlugin
39         return "prpl-sipe";
42 - (void)configurePurpleAccount
44         [super configurePurpleAccount]; 
46         NSLog(@"AccountName: %s\n", self.purpleAccountName ? self.purpleAccountName : "NULL");
47         NSLog(@"Account: %x\n", account);
48         NSLog(@"Port: %d\n", self.port);
49         NSLog(@"Server: %@\n", self.host);
51         purple_account_set_username(account, self.purpleAccountName);
53         if (self.host && [self.host length]) {
54                 if (self.port) {
55                         // TODO: figure out a better size for this!
56                         char tmp[512];
57                         sprintf(tmp, "%s:%d", [self.host UTF8String], self.port);
58                         purple_account_set_string(account, "server", tmp);
59                 } else {
60                         // super-class already set this
61                 }
62         }
64         // TODO: hook up the GUI to actually set this
65         purple_account_set_string(account, "transport", "tls");
68 - (const char *)purpleStatusIDForStatus:(AIStatus *)statusState
69                                                           arguments:(NSMutableDictionary *)arguments
71     const char    *statusID = NULL;
72         
73     switch (statusState.statusType) {
74         case AIAvailableStatusType:
75             statusID = purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE);
76             break;
77         case AIAwayStatusType:
78             statusID = purple_primitive_get_id_from_type(PURPLE_STATUS_AWAY);
79             break;
80                         
81         case AIInvisibleStatusType:
82             statusID = purple_primitive_get_id_from_type(PURPLE_STATUS_INVISIBLE);
83             break;
84                         
85         case AIOfflineStatusType:
86             statusID = purple_primitive_get_id_from_type(PURPLE_STATUS_OFFLINE);
87             break;
88     }    
89     
90     return statusID;
94 #pragma mark File transfer
96 - (BOOL)canSendFolders
98         return NO;
101 - (void)beginSendOfFileTransfer:(ESFileTransfer *)fileTransfer
103         [super _beginSendOfFileTransfer:fileTransfer];
106 - (void)acceptFileTransferRequest:(ESFileTransfer *)fileTransfer
108     [super acceptFileTransferRequest:fileTransfer];    
111 - (void)rejectFileReceiveRequest:(ESFileTransfer *)fileTransfer
113     [super rejectFileReceiveRequest:fileTransfer];    
116 - (void)cancelFileTransfer:(ESFileTransfer *)fileTransfer
118         [super cancelFileTransfer:fileTransfer];
121 #pragma mark Status Messages
123 - (NSString *)statusNameForPurpleBuddy:(PurpleBuddy *)buddy
125     NSString        *statusName = nil;
126     PurplePresence  *presence = purple_buddy_get_presence(buddy);
127     PurpleStatus        *status = purple_presence_get_active_status(presence);
128     const char      *purpleStatusID = purple_status_get_id(status);
129     
130     if (!purpleStatusID) return nil;
131         
132     if (!strcmp(purpleStatusID, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT))) {
133         statusName = STATUS_NAME_FREE_FOR_CHAT;
134                 
135     } else if (!strcmp(purpleStatusID, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA))) {
136         statusName = STATUS_NAME_EXTENDED_AWAY;
137                 
138     } else if (!strcmp(purpleStatusID, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_DND))) {
139         statusName = STATUS_NAME_DND;
140                 
141     }   
142     
143     return statusName;
148  * @brief Status message for a contact
149  */
150 - (NSAttributedString *)statusMessageForPurpleBuddy:(PurpleBuddy *)buddy
152         PurplePresence                          *presence = purple_buddy_get_presence(buddy);
153         PurpleStatus                            *status = (presence ? purple_presence_get_active_status(presence) : NULL);
154         const char                                      *message = (status ? purple_status_get_attr_string(status, "message") : NULL);
155         char                                            *sipemessage = NULL;
156         NSString                                        *statusMessage = nil;
157         
158         // TODO: get sipe activity or annotation
159         
160         // Get the plugin's status message for this buddy if they don't have a status message
161         if (!message && !sipemessage) {
162                 PurplePluginProtocolInfo  *prpl_info = self.protocolInfo;
163                 
164                 if (prpl_info && prpl_info->status_text) {
165                         char *status_text = (prpl_info->status_text)(buddy);
166                         
167                         // Don't display "Offline" as a status message.
168                         if (status_text && strcmp(status_text, _("Offline")) != 0) {
169                                 statusMessage = [NSString stringWithUTF8String:status_text];                            
170                         }
171                         
172                         g_free(status_text);
173                 }
174         } else if (sipemessage) {
175                 statusMessage = [NSString stringWithUTF8String:sipemessage];
176                 g_free(sipemessage);
177         } else {
178                 statusMessage = [NSString stringWithUTF8String:message];
179         }
181         return statusMessage ? [AIHTMLDecoder decodeHTML:statusMessage] : nil;
182         }
184 @end