5 // Created by Matt Meissner on 10/30/09.
6 // Modified by Michael Lamb on 2/27/13
7 // Copyright 2013 Michael Lamb/Harris Kauffman. All rights reserved.
8 // Copyright (C) 2014 SIPE Project <http://sipe.sourceforge.net/>
11 #import <AIUtilities/AICharacterSetAdditions.h>
12 #import <AIUtilities/AIImageAdditions.h>
13 #import <Adium/AIStatusControllerProtocol.h>
14 #import <AISharedAdium.h>
16 #import "DCPurpleSIPEJoinChatViewController.h"
17 #import "ESSIPEAccountViewController.h"
18 #import "ESPurpleSIPEAccount.h"
19 #import "ESSIPEService.h"
21 @implementation ESSIPEService
23 #pragma mark Account/Chat Creation
26 return [ESPurpleSIPEAccount class];
29 - (AIAccountViewController *)accountViewController{
30 return [ESSIPEAccountViewController accountViewController];
33 - (DCJoinChatViewController *)joinChatView{
34 return [DCPurpleSIPEJoinChatViewController joinChatView];
37 - (BOOL)canCreateGroupChats{
41 #pragma mark Service Description Metadata
42 - (NSString *)serviceCodeUniqueID{
43 return @"libpurple-SIPE";
46 - (NSString *)serviceID{
50 - (NSString *)serviceClass{
54 - (NSString *)shortDescription{
58 - (NSString *)longDescription{
59 return @"Office Communicator";
62 - (BOOL)caseSensitive{
65 - (AIServiceImportance)serviceImportance{
66 return AIServiceSecondary;
69 // Some auth schemes may not need a password
70 - (BOOL)requiresPassword{
74 - (NSImage *)defaultServiceIconOfType:(AIServiceIconType)iconType {
75 NSImage *baseImage = [NSImage imageNamed:@"sipe" forClass:[self class]];
77 if ((iconType == AIServiceIconSmall) || (iconType == AIServiceIconList)) {
78 [baseImage setSize:NSMakeSize(16, 16)];
85 #pragma mark Service Properties
86 - (NSCharacterSet *)allowedCharacters
88 NSMutableCharacterSet *allowedCharacters = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
89 NSCharacterSet *returnSet;
92 // NOTE: needs to be in sync with sipe-utils.c:escape_uri_part()
96 // ._-~ - unreserved, see RFC 3986 Appendix A
98 [allowedCharacters addCharactersInString:@"@:._-~"];
99 returnSet = [allowedCharacters immutableCopy];
100 [allowedCharacters release];
102 return [returnSet autorelease];
105 #pragma mark Statuses
106 - (void)registerStatuses{
108 NSNumber *awayStatus, *availableStatus, *invisibleStatus, *offlineStatus;
110 awayStatus = [NSNumber numberWithInt:AIAwayStatusType];
111 availableStatus = [NSNumber numberWithInt:AIAvailableStatusType];
112 invisibleStatus = [NSNumber numberWithInt:AIInvisibleStatusType];
113 offlineStatus = [NSNumber numberWithInt:AIOfflineStatusType];
115 NSDictionary *statuses =
116 [NSDictionary dictionaryWithObjectsAndKeys:
117 availableStatus, STATUS_NAME_AVAILABLE,
118 awayStatus, STATUS_NAME_AWAY,
119 awayStatus, STATUS_NAME_BUSY,
120 invisibleStatus, STATUS_NAME_INVISIBLE,
121 awayStatus, STATUS_NAME_BRB,
122 awayStatus, STATUS_NAME_DND,
123 awayStatus, STATUS_NAME_LUNCH,
124 offlineStatus, STATUS_NAME_OFFLINE,
125 awayStatus, STATUS_NAME_PHONE,
126 awayStatus, STATUS_NAME_NOT_AT_DESK,
127 awayStatus, STATUS_NAME_NOT_IN_OFFICE,
128 awayStatus, STATUS_NAME_AWAY_FRIENDS_ONLY,
132 for (NSString* key in statuses) {
133 AIStatusType value = [[statuses objectForKey:key] intValue];
135 [adium.statusController
137 withDescription:[adium.statusController localizedDescriptionForCoreStatusName:key]