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];
101 return [returnSet autorelease];
104 #pragma mark Statuses
105 - (void)registerStatuses{
106 NSDictionary *statuses =
107 [NSDictionary dictionaryWithObjectsAndKeys:
108 AIAvailableStatusType, STATUS_NAME_AVAILABLE,
109 AIAwayStatusType, STATUS_NAME_AWAY,
110 AIAwayStatusType, STATUS_NAME_BUSY,
111 AIInvisibleStatusType, STATUS_NAME_INVISIBLE,
112 AIAwayStatusType, STATUS_NAME_BRB,
113 AIAwayStatusType, STATUS_NAME_DND,
114 AIAwayStatusType, STATUS_NAME_LUNCH,
115 AIOfflineStatusType, STATUS_NAME_OFFLINE,
116 AIAwayStatusType, STATUS_NAME_PHONE,
117 AIAwayStatusType, STATUS_NAME_NOT_AT_DESK,
118 AIAwayStatusType, STATUS_NAME_NOT_IN_OFFICE,
119 AIAwayStatusType, STATUS_NAME_AWAY_FRIENDS_ONLY,
123 for (NSString* key in statuses) {
124 AIStatusType value = [statuses objectForKey:key];
126 [adium.statusController
128 withDescription:[adium.statusController localizedDescriptionForCoreStatusName:key]