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.
10 #import <AIUtilities/AICharacterSetAdditions.h>
11 #import <AIUtilities/AIImageAdditions.h>
12 #import <Adium/AIStatusControllerProtocol.h>
13 #import <AISharedAdium.h>
15 #import "DCPurpleSIPEJoinChatViewController.h"
16 #import "ESSIPEAccountViewController.h"
17 #import "ESPurpleSIPEAccount.h"
18 #import "ESSIPEService.h"
20 @implementation ESSIPEService
22 #pragma mark Account/Chat Creation
25 return [ESPurpleSIPEAccount class];
28 - (AIAccountViewController *)accountViewController{
29 return [ESSIPEAccountViewController accountViewController];
32 - (DCJoinChatViewController *)joinChatView{
33 return [DCPurpleSIPEJoinChatViewController joinChatView];
36 - (BOOL)canCreateGroupChats{
40 #pragma mark Service Description Metadata
41 - (NSString *)serviceCodeUniqueID{
42 return @"libpurple-SIPE";
45 - (NSString *)serviceID{
49 - (NSString *)serviceClass{
53 - (NSString *)shortDescription{
57 - (NSString *)longDescription{
58 return @"Office Communicator";
61 - (BOOL)caseSensitive{
64 - (AIServiceImportance)serviceImportance{
65 return AIServiceSecondary;
68 // Some auth schemes may not need a password
69 - (BOOL)requiresPassword{
73 - (NSImage *)defaultServiceIconOfType:(AIServiceIconType)iconType {
74 NSImage *baseImage = [NSImage imageNamed:@"sipe" forClass:[self class]];
76 if ((iconType == AIServiceIconSmall) || (iconType == AIServiceIconList)) {
77 [baseImage setSize:NSMakeSize(16, 16)];
84 #pragma mark Service Properties
85 - (NSCharacterSet *)allowedCharacters
87 NSMutableCharacterSet *allowedCharacters = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
88 NSCharacterSet *returnSet;
90 [allowedCharacters addCharactersInString:@"._@-()[]^%#|/\\`=,"];
91 returnSet = [allowedCharacters immutableCopy];
93 return [returnSet autorelease];
97 - (void)registerStatuses{
98 NSDictionary *statuses =
99 [NSDictionary dictionaryWithObjectsAndKeys:
100 AIAvailableStatusType, STATUS_NAME_AVAILABLE,
101 AIAwayStatusType, STATUS_NAME_AWAY,
102 AIAwayStatusType, STATUS_NAME_BUSY,
103 AIInvisibleStatusType, STATUS_NAME_INVISIBLE,
104 AIAwayStatusType, STATUS_NAME_BRB,
105 AIAwayStatusType, STATUS_NAME_DND,
106 AIAwayStatusType, STATUS_NAME_LUNCH,
107 AIOfflineStatusType, STATUS_NAME_OFFLINE,
108 AIAwayStatusType, STATUS_NAME_PHONE,
109 AIAwayStatusType, STATUS_NAME_NOT_AT_DESK,
110 AIAwayStatusType, STATUS_NAME_NOT_IN_OFFICE,
111 AIAwayStatusType, STATUS_NAME_AWAY_FRIENDS_ONLY,
115 for (NSString* key in statuses) {
116 AIStatusType value = [statuses objectForKey:key];
118 [adium.statusController
120 withDescription:[adium.statusController localizedDescriptionForCoreStatusName:key]