Changeset 3548
- Timestamp:
- 01/21/06 02:15:11 (3 years ago)
- Files:
-
- WiredClient/trunk/WCAccount.h (modified) (3 diffs)
- WiredClient/trunk/WCAccount.m (modified) (24 diffs)
- WiredClient/trunk/WCAccountEditor.h (modified) (1 diff)
- WiredClient/trunk/WCAccountEditor.m (modified) (21 diffs)
- WiredClient/trunk/WCAccounts.m (modified) (14 diffs)
- WiredClient/trunk/WCChat.m (modified) (1 diff)
- WiredClient/trunk/WCServer.m (modified) (1 diff)
- WiredClient/trunk/WCServerConnection.m (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
WiredClient/trunk/WCAccount.h
r3413 r3548 27 27 */ 28 28 29 enum WCAccountType {30 WCAccount TypeUser,31 WCAccount TypeGroup29 enum _WCAccountType { 30 WCAccountUser, 31 WCAccountGroup 32 32 }; 33 typedef enum WCAccountType WCAccountType;33 typedef enum _WCAccountType WCAccountType; 34 34 35 35 … … 37 37 WCAccountType _type; 38 38 NSString *_name; 39 NSString *_password; 40 NSString *_group; 39 41 NSArray *_privileges; 40 42 } 41 43 42 44 43 - (id)initWithType:(WCAccountType)type; 45 + (id)userAccountWithPrivilegesArguments:(NSArray *)arguments; 46 + (id)userAccountWithAccountsArguments:(NSArray *)arguments; 47 + (id)groupAccountWithAccountsArguments:(NSArray *)arguments; 48 + (id)userAccountWithAccountArguments:(NSArray *)arguments; 49 + (id)groupAccountWithAccountArguments:(NSArray *)arguments; 44 50 45 - (void)setType:(WCAccountType)type;46 51 - (WCAccountType)type; 47 - (void)setName:(NSString *)name; 52 48 53 - (NSString *)name; 49 - (void)setPrivileges:(NSArray *)privileges; 50 - (NSArray *)privileges; 51 54 - (NSString *)group; 55 - (NSString *)password; 52 56 - (BOOL)getUserInfo; 53 57 - (BOOL)broadcast; … … 68 72 - (BOOL)banUsers; 69 73 - (BOOL)cannotBeKicked; 74 - (unsigned int)downloadSpeedLimit; 75 - (unsigned int)uploadSpeedLimit; 76 - (unsigned int)downloadLimit; 77 - (unsigned int)uploadLimit; 70 78 - (BOOL)setTopic; 71 79 WiredClient/trunk/WCAccount.m
r3413 r3548 29 29 #import "WCAccount.h" 30 30 31 @interface WCAccount(Private) 32 33 - (id)_initWithType:(WCAccountType)type; 34 35 - (void)_setPrivileges:(NSArray *)privileges; 36 - (void)_setName:(NSString *)name; 37 - (void)_setPassword:(NSString *)password; 38 - (void)_setGroup:(NSString *)group; 39 40 @end 41 42 43 @implementation WCAccount(Private) 44 45 - (id)_initWithType:(WCAccountType)type { 46 self = [super init]; 47 48 _type = type; 49 50 return self; 51 } 52 53 54 55 #pragma mark - 56 57 - (void)_setPrivileges:(NSArray *)privileges { 58 [privileges retain]; 59 [_privileges release]; 60 61 _privileges = privileges; 62 } 63 64 65 66 - (void)_setName:(NSString *)name { 67 [name retain]; 68 [_name release]; 69 70 _name = name; 71 } 72 73 74 75 - (void)_setPassword:(NSString *)password { 76 [password retain]; 77 [_password release]; 78 79 _password = password; 80 } 81 82 83 84 - (void)_setGroup:(NSString *)group { 85 [group retain]; 86 [_group release]; 87 88 _group = group; 89 } 90 91 @end 92 93 31 94 @implementation WCAccount 32 95 33 - (id)initWithType:(WCAccountType)type { 34 self = [super init]; 35 36 [self setType:type]; 37 38 return self; 96 + (id)userAccountWithPrivilegesArguments:(NSArray *)arguments { 97 WCAccount *account; 98 99 account = [[self alloc] _initWithType:WCAccountUser]; 100 [account _setPrivileges:arguments]; 101 102 return [account autorelease]; 103 } 104 105 106 107 + (id)userAccountWithAccountsArguments:(NSArray *)arguments { 108 WCAccount *account; 109 110 account = [[self alloc] _initWithType:WCAccountUser]; 111 [account _setName:[arguments safeObjectAtIndex:0]]; 112 113 return [account autorelease]; 114 } 115 116 117 118 + (id)groupAccountWithAccountsArguments:(NSArray *)arguments { 119 WCAccount *account; 120 121 account = [[self alloc] _initWithType:WCAccountGroup]; 122 [account _setName:[arguments safeObjectAtIndex:0]]; 123 124 return [account autorelease]; 125 } 126 127 128 129 + (id)userAccountWithAccountArguments:(NSArray *)arguments { 130 WCAccount *account; 131 132 account = [[self alloc] _initWithType:WCAccountUser]; 133 [account _setName:[arguments safeObjectAtIndex:0]]; 134 [account _setPassword:[arguments safeObjectAtIndex:1]]; 135 [account _setGroup:[arguments safeObjectAtIndex:2]]; 136 [account _setPrivileges:[arguments subarrayWithRange:NSMakeRange(3, [arguments count] - 3)]]; 137 138 return [account autorelease]; 139 } 140 141 142 143 + (id)groupAccountWithAccountArguments:(NSArray *)arguments { 144 WCAccount *account; 145 146 account = [[self alloc] _initWithType:WCAccountGroup]; 147 [account _setName:[arguments safeObjectAtIndex:0]]; 148 [account _setPrivileges:[arguments subarrayWithRange:NSMakeRange(1, [arguments count] - 1)]]; 149 150 return [account autorelease]; 39 151 } 40 152 … … 43 155 - (void)dealloc { 44 156 [_name release]; 157 [_password release]; 158 [_group release]; 45 159 [_privileges release]; 46 160 … … 74 188 #pragma mark - 75 189 76 77 - (void)setType:(WCAccountType)type { 78 _type = type; 79 } 80 190 - (NSString *)description { 191 return [NSSWF:@"<%@ %p>{name = %@}", 192 [self className], 193 self, 194 [self name]]; 195 } 196 197 198 199 #pragma mark - 81 200 82 201 … … 87 206 88 207 89 - (void)setName:(NSString *)name { 90 [name retain]; 91 [_name release]; 92 93 _name = name; 94 } 95 96 208 #pragma mark - 97 209 98 210 - (NSString *)name { … … 102 214 103 215 104 - (void)setPrivileges:(NSArray *)privileges { 105 [privileges retain]; 106 [_privileges release]; 107 108 _privileges = privileges; 109 } 110 111 112 113 - (NSArray *)privileges { 114 return _privileges; 115 } 116 117 118 119 #pragma mark - 216 - (NSString *)group { 217 return _group; 218 } 219 220 221 222 - (NSString *)password { 223 return _password; 224 } 225 226 120 227 121 228 - (BOOL)getUserInfo { 122 return [[ [self privileges]safeObjectAtIndex:0] isEqualToString:@"1"];229 return [[_privileges safeObjectAtIndex:0] isEqualToString:@"1"]; 123 230 } 124 231 … … 126 233 127 234 - (BOOL)broadcast { 128 return [[ [self privileges]safeObjectAtIndex:1] isEqualToString:@"1"];235 return [[_privileges safeObjectAtIndex:1] isEqualToString:@"1"]; 129 236 } 130 237 … … 132 239 133 240 - (BOOL)postNews { 134 return [[ [self privileges]safeObjectAtIndex:2] isEqualToString:@"1"];241 return [[_privileges safeObjectAtIndex:2] isEqualToString:@"1"]; 135 242 } 136 243 … … 138 245 139 246 - (BOOL)clearNews { 140 return [[ [self privileges]safeObjectAtIndex:3] isEqualToString:@"1"];247 return [[_privileges safeObjectAtIndex:3] isEqualToString:@"1"]; 141 248 } 142 249 … … 144 251 145 252 - (BOOL)download { 146 return [[ [self privileges]safeObjectAtIndex:4] isEqualToString:@"1"];253 return [[_privileges safeObjectAtIndex:4] isEqualToString:@"1"]; 147 254 } 148 255 … … 150 257 151 258 - (BOOL)upload { 152 return [[ [self privileges]safeObjectAtIndex:5] isEqualToString:@"1"];259 return [[_privileges safeObjectAtIndex:5] isEqualToString:@"1"]; 153 260 } 154 261 … … 156 263 157 264 - (BOOL)uploadAnywhere { 158 return [[ [self privileges]safeObjectAtIndex:6] isEqualToString:@"1"];265 return [[_privileges safeObjectAtIndex:6] isEqualToString:@"1"]; 159 266 } 160 267 … … 162 269 163 270 - (BOOL)createFolders { 164 return [[ [self privileges]safeObjectAtIndex:7] isEqualToString:@"1"];271 return [[_privileges safeObjectAtIndex:7] isEqualToString:@"1"]; 165 272 } 166 273 … … 168 275 169 276 - (BOOL)alterFiles { 170 return [[ [self privileges]safeObjectAtIndex:8] isEqualToString:@"1"];277 return [[_privileges safeObjectAtIndex:8] isEqualToString:@"1"]; 171 278 } 172 279 … … 174 281 175 282 - (BOOL)deleteFiles { 176 return [[ [self privileges]safeObjectAtIndex:9] isEqualToString:@"1"];283 return [[_privileges safeObjectAtIndex:9] isEqualToString:@"1"]; 177 284 } 178 285 … … 180 287 181 288 - (BOOL)viewDropBoxes { 182 return [[ [self privileges]safeObjectAtIndex:10] isEqualToString:@"1"];289 return [[_privileges safeObjectAtIndex:10] isEqualToString:@"1"]; 183 290 } 184 291 … … 186 293 187 294 - (BOOL)createAccounts { 188 return [[ [self privileges]safeObjectAtIndex:11] isEqualToString:@"1"];295 return [[_privileges safeObjectAtIndex:11] isEqualToString:@"1"]; 189 296 } 190 297 … … 192 299 193 300 - (BOOL)editAccounts { 194 return [[ [self privileges]safeObjectAtIndex:12] isEqualToString:@"1"];301 return [[_privileges safeObjectAtIndex:12] isEqualToString:@"1"]; 195 302 } 196 303 … … 198 305 199 306 - (BOOL)deleteAccounts { 200 return [[ [self privileges]safeObjectAtIndex:13] isEqualToString:@"1"];307 return [[_privileges safeObjectAtIndex:13] isEqualToString:@"1"]; 201 308 } 202 309 … … 204 311 205 312 - (BOOL)elevatePrivileges { 206 return [[ [self privileges]safeObjectAtIndex:14] isEqualToString:@"1"];313 return [[_privileges safeObjectAtIndex:14] isEqualToString:@"1"]; 207 314 } 208 315 … … 210 317 211 318 - (BOOL)kickUsers { 212 return [[ [self privileges]safeObjectAtIndex:15] isEqualToString:@"1"];319 return [[_privileges safeObjectAtIndex:15] isEqualToString:@"1"]; 213 320 } 214 321 … … 216 323 217 324 - (BOOL)banUsers { 218 return [[ [self privileges]safeObjectAtIndex:16] isEqualToString:@"1"];325 return [[_privileges safeObjectAtIndex:16] isEqualToString:@"1"]; 219 326 } 220 327 … … 222 329 223 330 - (BOOL)cannotBeKicked { 224 return [[[self privileges] safeObjectAtIndex:17] isEqualToString:@"1"]; 331 return [[_privileges safeObjectAtIndex:17] isEqualToString:@"1"]; 332 } 333 334 335 336 - (unsigned int)downloadSpeedLimit { 337 return [[_privileges safeObjectAtIndex:18] unsignedIntValue]; 338 } 339 340 341 342 - (unsigned int)uploadSpeedLimit { 343 return [[_privileges safeObjectAtIndex:19] unsignedIntValue]; 344 } 345 346 347 348 - (unsigned int)downloadLimit { 349 return [[_privileges safeObjectAtIndex:20] unsignedIntValue]; 350 } 351 352 353 354 - (unsigned int)uploadLimit { 355 return [[_privileges safeObjectAtIndex:21] unsignedIntValue]; 225 356 } 226 357 … … 228 359 229 360 - (BOOL)setTopic { 230 return [[ [self privileges]safeObjectAtIndex:22] isEqualToString:@"1"];361 return [[_privileges safeObjectAtIndex:22] isEqualToString:@"1"]; 231 362 } 232 363 … … 242 373 243 374 - (NSComparisonResult)compareType:(WCAccount *)account { 244 if([self type] == WCAccount TypeUser && [account type] == WCAccountTypeGroup)375 if([self type] == WCAccountUser && [account type] == WCAccountGroup) 245 376 return NSOrderedAscending; 246 else if([self type] == WCAccount TypeGroup && [account type] == WCAccountTypeUser)377 else if([self type] == WCAccountGroup && [account type] == WCAccountUser) 247 378 return NSOrderedDescending; 248 379 WiredClient/trunk/WCAccountEditor.h
r3413 r3548 68 68 IBOutlet NSButton *_okButton; 69 69 70 NSArray *_buttons; 71 70 72 NSMutableArray *_groups; 71 73 WCAccount *_account; 72 NSString *_password;73 NSString *_group;74 74 } 75 75 76 76 77 77 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection; 78 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection edit:(WCAccount *)account;78 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection account:(WCAccount *)account; 79 79 80 80 - (IBAction)create:(id)sender; WiredClient/trunk/WCAccountEditor.m
r3540 r3548 31 31 #import "WCAccounts.h" 32 32 33 @interface WCAccountEditor(Private) 34 35 - (void)_updateType; 36 - (void)_updateGroup; 37 38 @end 39 40 41 @implementation WCAccountEditor(Private) 42 43 - (void)_updateType { 44 if([_typePopUpButton selectedItem] == _userMenuItem) { 45 [_passwordTextField setEnabled:YES]; 46 [_groupPopUpButton setEnabled:YES]; 47 } 48 else if([_typePopUpButton selectedItem] == _groupMenuItem) { 49 [_passwordTextField setEnabled:NO]; 50 [_groupPopUpButton setEnabled:NO]; 51 52 [_groupPopUpButton selectItem:_noneMenuItem]; 53 } 54 } 55 56 57 58 - (void)_updateGroup { 59 NSEnumerator *enumerator; 60 NSButton *button; 61 WCAccount *account; 62 63 account = [[self connection] account]; 64 65 if([_groupPopUpButton selectedItem] == _noneMenuItem || ![[_groupPopUpButton selectedItem] title]) { 66 [_groupPopUpButton selectItem:_noneMenuItem]; 67 68 if([account elevatePrivileges]) { 69 enumerator = [_buttons objectEnumerator]; 70 71 while((button = [enumerator nextObject])) 72 [button setEnabled:YES]; 73 74 [_downloadSpeedTextField setEnabled:YES]; 75 [_uploadSpeedTextField setEnabled:YES]; 76 } else { 77 [_getUserInfoButton setEnabled:[account getUserInfo]]; 78 [_broadcastButton setEnabled:[account broadcast]]; 79 [_setTopicButton setEnabled:[account setTopic]]; 80 [_postNewsButton setEnabled:[account postNews]]; 81 [_clearNewsButton setEnabled:[account clearNews]]; 82 83 [_downloadButton setEnabled:[account download]]; 84 [_uploadButton setEnabled:[account upload]]; 85 [_uploadAnywhereButton setEnabled:[account uploadAnywhere]]; 86 [_createFoldersButton setEnabled:[account createFolders]]; 87 [_moveButton setEnabled:[account alterFiles]]; 88 [_deleteButton setEnabled:[account deleteFiles]]; 89 [_viewDropBoxButton setEnabled:[account viewDropBoxes]]; 90 91 [_createAccountsButton setEnabled:[account createAccounts]]; 92 [_editAccountsButton setEnabled:[account editAccounts]]; 93 [_deleteAccountsButton setEnabled:[account deleteAccounts]]; 94 [_elevatePrivilegesButton setEnabled:[account elevatePrivileges]]; 95 [_kickUsersButton setEnabled:[account kickUsers]]; 96 [_banUsersButton setEnabled:[account banUsers]]; 97 [_cannotBeKickedButton setEnabled:[account cannotBeKicked]]; 98 } 99 100 [_selectAllButton setEnabled:YES]; 101 } else { 102 [[self connection] sendCommand:WCReadGroupCommand 103 withArgument:[[_groupPopUpButton selectedItem] title]]; 104 105 enumerator = [_buttons objectEnumerator]; 106 107 while((button = [enumerator nextObject])) 108 [button setEnabled:NO]; 109 110 [_downloadSpeedTextField setEnabled:NO]; 111 [_uploadSpeedTextField setEnabled:NO]; 112 113 [_selectAllButton setEnabled:NO]; 114 } 115 } 116 117 @end 118 119 33 120 @implementation WCAccountEditor 34 121 35 122 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection { 36 return [self initAccountEditorWithConnection:connection edit:NULL];37 } 38 39 40 41 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection edit:(WCAccount *)account {123 return [self initAccountEditorWithConnection:connection account:NULL]; 124 } 125 126 127 128 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection account:(WCAccount *)account { 42 129 self = [super initWithWindowNibName:@"AccountEditor" 43 130 name:NSLS(@"Account Editor", @"Account editor window title") … … 47 134 _groups = [[NSMutableArray alloc] init]; 48 135 49 // --- load the window50 136 [self window]; 51 137 52 // --- subscribe to these53 138 [[self connection] addObserver:self 54 139 selector:@selector(accountEditorReceivedUser:) … … 60 145 61 146 if(_account) { 62 if([_account type] == WCAccountTypeUser) { 63 // --- read user 147 if([_account type] == WCAccountUser) { 64 148 [_typePopUpButton selectItem:_userMenuItem]; 65 [self type:self];66 149 67 150 [[self connection] sendCommand:WCReadUserCommand withArgument:[_account name]]; 68 151 } else { 69 // --- read group70 152 [_typePopUpButton selectItem:_groupMenuItem]; 71 [self type:self];72 153 73 154 [[self connection] sendCommand:WCReadGroupCommand withArgument:[_account name]]; 74 155 } 75 156 76 // --- switch to edit77 157 [_okButton setAction:@selector(edit:)]; 78 158 [_okButton setTitle:NSLS(@"Save", @"Account Editor button title")]; … … 81 161 [_nameTextField setEnabled:NO]; 82 162 } else { 83 // --- switch to create84 163 [_okButton setAction:@selector(create:)]; 85 164 [_okButton setTitle:NSLS(@"Add", @"Account Editor button title")]; … … 89 168 } 90 169 91 [self group:self]; 170 [self _updateType]; 171 [self _updateGroup]; 172 92 173 [self showWindow:self]; 93 174 … … 98 179 99 180 - (void)dealloc { 181 [_buttons release]; 100 182 [_groups release]; 101 183 [_account release]; 102 [_password release];103 [_group release];104 184 105 185 [super dealloc]; … … 112 192 - (void)windowDidLoad { 113 193 NSEnumerator *enumerator; 194 NSArray *groups; 114 195 NSMenuItem *item; 115 196 WCAccount *account; 116 197 117 // --- set up window118 198 [[self window] setTitle:[[self connection] name] withSubtitle:[self name]]; 119 199 [self setShouldSaveWindowSizeOnly:YES]; … … 121 201 [self setWindowFrameAutosaveName:@"AccountEditor"]; 122 202 123 // --- menu icons124 203 [_userMenuItem setImage:[NSImage imageNamed:@"User"]]; 125 204 [_groupMenuItem setImage:[NSImage imageNamed:@"Group"]]; 126 205 127 // --- add groups128 enumerator = [ [[[self connection] accounts] groups]objectEnumerator];206 groups = [[[self connection] accounts] groups]; 207 enumerator = [groups objectEnumerator]; 129 208 130 209 while((account = [enumerator nextObject])) { … … 134 213 [item release]; 135 214 } 215 216 _buttons = [[NSArray alloc] initWithObjects: 217 _getUserInfoButton, 218 _broadcastButton, 219 _setTopicButton, 220 _postNewsButton, 221 _clearNewsButton, 222 _downloadButton, 223 _uploadButton, 224 _uploadAnywhereButton, 225 _createFoldersButton, 226 _moveButton, 227 _deleteButton, 228 _viewDropBoxButton, 229 _createAccountsButton, 230 _editAccountsButton, 231 _deleteAccountsButton, 232 _elevatePrivilegesButton, 233 _kickUsersButton, 234 _banUsersButton, 235 _cannotBeKickedButton, 236 NULL]; 136 237 } 137 238 … … 157 258 158 259 - (void)accountEditorReceivedUser:(NSNotification *)notification { 159 NSArray *fields; 160 NSString *name, *password, *group; 161 BOOL elevate; 162 int limit; 163 164 fields = [[notification userInfo] objectForKey:WCArgumentsKey]; 165 name = [fields safeObjectAtIndex:0]; 166 password = [fields safeObjectAtIndex:1]; 167 group = [fields safeObjectAtIndex:2]; 168 169 if(![name isEqualToString:[_account name]]) 260 WCAccount *account; 261 262 account = [WCAccount userAccountWithAccountArguments: 263 [[notification userInfo] objectForKey:WCArgumentsKey]]; 264 265 if(![[account name] isEqualToString:[_account name]]) 170 266 return; 171 267 268 [_nameTextField setStringValue:[account name]]; 269 [_passwordTextField setStringValue:[account password]]; 270 271 if([[account group] length] > 0) 272 [_groupPopUpButton selectItemWithTitle:[account group]]; 273 274 [_getUserInfoButton setState:[account getUserInfo]]; 275 [_broadcastButton setState:[account broadcast]]; 276 [_postNewsButton setState:[account postNews]]; 277 [_clearNewsButton setState:[account clearNews]]; 278 [_setTopicButton setState:[account setTopic]]; 279 280 [_downloadButton setState:[account download]]; 281 [_uploadButton setState:[account upload]]; 282 [_uploadAnywhereButton setState:[account uploadAnywhere]]; 283 [_createFoldersButton setState:[account createFolders]]; 284 [_moveButton setState:[account alterFiles]]; 285 [_deleteButton setState:[account deleteFiles]]; 286 [_viewDropBoxButton setState:[account viewDropBoxes]]; 287 288 [_createAccountsButton setState:[account createAccounts]]; 289 [_editAccountsButton setState:[account editAccounts]]; 290 [_deleteAccountsButton setState:[account deleteAccounts]]; 291 [_elevatePrivilegesButton setState:[account elevatePrivileges]]; 292 [_kickUsersButton setState:[account kickUsers]]; 293 [_banUsersButton setState:[account banUsers]]; 294 [_cannotBeKickedButton setState:[account cannotBeKicked]]; 295 296 if([account downloadSpeedLimit] > 0) 297 [_downloadSpeedTextField setIntValue:[account downloadSpeedLimit]]; 298 299 if([account uploadSpeedLimit] > 0) 300 [_uploadSpeedTextField setIntValue:[account uploadSpeedLimit]]; 301 302 [_account release]; 303 _account = [account retain]; 304 305 [self _updateGroup]; 306 172 307 [[self connection] removeObserver:self name:WCAccountEditorReceivedUser]; 173 174 // --- save the password and group175 _password = [password retain];176 _group = [group retain];177 178 // --- can we give privileges that we do not possess?179 elevate = [[[self connection] account] elevatePrivileges];180 181 // --- set fields182 [_nameTextField setStringValue:name];183 [_passwordTextField setStringValue:password];184 185 if([_group length] > 0)186 [_groupPopUpButton selectItemWithTitle:_group];187 188 [self group:self];189 190 [_getUserInfoButton setState:[[fields safeObjectAtIndex:3] intValue]];191 [_broadcastButton setState:[[fields safeObjectAtIndex:4] intValue]];192 [_postNewsButton setState:[[fields safeObjectAtIndex:5] intValue]];193 [_clearNewsButton setState:[[fields safeObjectAtIndex:6] intValue]];194 [_setTopicButton setState:[[fields safeObjectAtIndex:25] intValue]];195 196 [_downloadButton setState:[[fields safeObjectAtIndex:7] intValue]];197 [_uploadButton setState:[[fields safeObjectAtIndex:8] intValue]];198 [_uploadAnywhereButton setState:[[fields safeObjectAtIndex:9] intValue]];199 [_createFoldersButton setState:[[fields safeObjectAtIndex:10] intValue]];200 [_moveButton setState:[[fields safeObjectAtIndex:11] intValue]];201 [_deleteButton setState:[[fields safeObjectAtIndex:12] intValue]];202 [_viewDropBoxButton setState:[[fields safeObjectAtIndex:13] intValue]];203 204 [_createAccountsButton setState:[[fields safeObjectAtIndex:14] intValue]];205 [_editAccountsButton setState:[[fields safeObjectAtIndex:15] intValue]];206 [_deleteAccountsButton setState:[[fields safeObjectAtIndex:16] intValue]];207 [_elevatePrivilegesButton setState:[[fields safeObjectAtIndex:17] intValue]];208 [_kickUsersButton setState:[[fields safeObjectAtIndex:18] intValue]];209 [_banUsersButton setState:[[fields safeObjectAtIndex:19] intValue]];210 [_cannotBeKickedButton setState:[[fields safeObjectAtIndex:20] intValue]];211 212 limit = [[fields safeObjectAtIndex:21] intValue] / (double) 1024.0;213 214 if(limit > 0)215 [_downloadSpeedTextField setIntValue:limit];216 217 limit = [[fields safeObjectAtIndex:22] intValue] / (double) 1024.0;218 219 if(limit > 0)220 [_uploadSpeedTextField setIntValue:limit];221 308 } 222 309 … … 224 311 225 312 - (void)accountEditorReceivedGroup:(NSNotification *)notification { 226 NSArray *fields; 227 NSString *name; 228 BOOL user = NO, elevate; 229 int limit; 230 231 fields = [[notification userInfo] objectForKey:WCArgumentsKey]; 232 name = [fields safeObjectAtIndex:0]; 233 234 if(![name isEqualToString:[_account name]]) { 235 user = ([_typePopUpButton selectedItem] == _userMenuItem); 236 237 if(!user) 313 WCAccount *account; 314 315 account = [WCAccount groupAccountWithAccountArguments: 316 [[notification userInfo] objectForKey:WCArgumentsKey]]; 317 318 if(![[account name] isEqualToString:[_account name]]) { 319 if([_typePopUpButton selectedItem] != _userMenuItem) 238 320 return; 239 321 } 240 322 323 if([_typePopUpButton selectedItem] == _groupMenuItem) 324 [_nameTextField setStringValue:[account name]]; 325 326 [_getUserInfoButton setState:[account getUserInfo]]; 327 [_broadcastButton setState:[account broadcast]]; 328 [_postNewsButton setState:[account postNews]]; 329 [_clearNewsButton setState:[account clearNews]]; 330 [_setTopicButton setState:[account setTopic]]; 331 332 [_downloadButton setState:[account download]]; 333 [_uploadButton setState:[account upload]]; 334 [_uploadAnywhereButton setState:[account uploadAnywhere]]; 335 [_createFoldersButton setState:[account createFolders]]; 336 [_moveButton setState:[account alterFiles]]; 337 [_deleteButton setState:[account deleteFiles]]; 338 [_viewDropBoxButton setState:[account viewDropBoxes]]; 339 340 [_createAccountsButton setState:[account createAccounts]]; 341 [_editAccountsButton setState:[account editAccounts]]; 342 [_deleteAccountsButton setState:[account deleteAccounts]]; 343 [_elevatePrivilegesButton setState:[account elevatePrivileges]]; 344 [_kickUsersButton setState:[account kickUsers]]; 345 [_banUsersButton setState:[account banUsers]]; 346 [_cannotBeKickedButton setState:[account cannotBeKicked]]; 347 348 if([account downloadSpeedLimit] > 0) 349 [_downloadSpeedTextField setIntValue:[account downloadSpeedLimit]]; 350 351 if([account uploadSpeedLimit] > 0) 352 [_uploadSpeedTextField setIntValue:[account uploadSpeedLimit]]; 353 354 if([_typePopUpButton selectedItem] == _groupMenuItem) { 355 [_account release]; 356 _account = [account retain]; 357 } 358 241 359 [[self connection] removeObserver:self name:WCAccountEditorReceivedGroup]; 242 243 // --- can we give privileges that we do not possess?244 elevate = [[[self connection] account] elevatePrivileges];245 246 // --- set fields247 if([_typePopUpButton selectedItem] == _groupMenuItem)248 [_nameTextField setStringValue:name];249 250 // --- set buttons251 [_getUserInfoButton setState:[[fields safeObjectAtIndex:1] intValue]];252 [_broadcastButton setState:[[fields safeObjectAtIndex:2] intValue]];253 [_postNewsButton setState:[[fields safeObjectAtIndex:3] intValue]];254 [_clearNewsButton setState:[[fields safeObjectAtIndex:4] intValue]];255 256 if([[self connection] protocol] >= 1.1)257 [_setTopicButton setState:[[fields safeObjectAtIndex:23] intValue]];258 259 [_downloadButton setState:[[fields safeObjectAtIndex:5] intValue]];260 [_uploadButton setState:[[fields safeObjectAtIndex:6] intValue]];261 [_uploadAnywhereButton setState:[[fields safeObjectAtIndex:7] intValue]];262 [_createFoldersButton setState:[[fields safeObjectAtIndex:8] intValue]];263 [_moveButton setState:[[fields safeObjectAtIndex:9] intValue]];264 [_deleteButton setState:[[fields safeObjectAtIndex:10] intValue]];265 [_viewDropBoxButton setState:[[fields safeObjectAtIndex:11] intValue]];266 267 [_createAccountsButton setState:[[fields safeObjectAtIndex:12] intValue]];268 [_editAccountsButton setState:[[fields safeObjectAtIndex:13] intValue]];269 [_deleteAccountsButton setState:[[fields safeObjectAtIndex:14] intValue]];270 [_elevatePrivilegesButton setState:[[fields safeObjectAtIndex:14] intValue]];271 [_kickUsersButton setState:[[fields safeObjectAtIndex:16] intValue]];272 [_banUsersButton setState:[[fields safeObjectAtIndex:17] intValue]];273 [_cannotBeKickedButton setState:[[fields safeObjectAtIndex:18] intValue]];274 275 // --- set text fields276 limit = [[fields safeObjectAtIndex:19] intValue] / (double) 1024.0;277 278 if(limit > 0)279 [_downloadSpeedTextField setIntValue:limit];280 281 limit = [[fields safeObjectAtIndex:20] intValue] / (double) 1024.0;282 283 if(limit > 0)284 [_uploadSpeedTextField setIntValue:limit];285 360 } 286 361 … … 292 367 NSString *password, *group; 293 368 294 // --- don't encrypt the password if the field is empty, just send295 369 if([[_passwordTextField stringValue] isEqualToString:@""]) 296 370 password = @""; … … 303 377 group = @""; 304 378 305 // --- send create account command306 379 if([_typePopUpButton selectedItem] == _userMenuItem) { 307 380 [[self connection] sendCommand:WCCreateUserCommand … … 330 403 [NSNumber numberWithInt:[_downloadSpeedTextField intValue] * 1024], 331 404 [NSNumber numberWithInt:[_uploadSpeedTextField intValue] * 1024], 332 @"0",333 @"0",405 [NSNumber numberWithInt:[_account downloadLimit]], 406 [NSNumber numberWithInt:[_account uploadLimit]], 334 407 [_setTopicButton stringValue], 335 408 NULL]]; … … 359 432 [NSNumber numberWithInt:[_downloadSpeedTextField intValue] * 1024], 360 433 [NSNumber numberWithInt:[_uploadSpeedTextField intValue] * 1024], 361 @"0",362 @"0",434 [NSNumber numberWithInt:[_account downloadLimit]], 435 [NSNumber numberWithInt:[_account uploadLimit]], 363 436 [_setTopicButton stringValue], 364 437 NULL]]; … … 366 439 367 440 [[self connection] postNotificationName:WCAccountsShouldReload object:[self connection]]; 441 368 442 [self close]; 369 443 } … … 375 449 376 450 if([[_passwordTextField stringValue] isEqualToString:@""]) { 377 // --- don't encrypt the password if the field is empty, just send378 451 password = @""; 379 452 } else { 380 // --- only send a new encrypted password if it's actually changed 381 if([_password isEqualToString:[_passwordTextField stringValue]]) 382 password = _password; 453 if([[_account password] isEqualToString:[_passwordTextField stringValue]]) 454 password = [_account password]; 383 455 else 384 456 password = [[_passwordTextField stringValue] SHA1]; … … 390 462 group = @""; 391 463 392 // --- send edit account command 393 if([_account type] == WCAccountTypeUser) { 464 if([_account type] == WCAccountUser) { 394 465 [[self connection] sendCommand:WCEditUserCommand 395 466 withArguments:[NSArray arrayWithObjects: 396 [_nameTextField stringValue],397 password,398 group,399 [_getUserInfoButton stringValue],400 [_broadcastButton stringValue],401 [_postNewsButton stringValue],402 [_clearNewsButton stringValue],403 [_downloadButton stringValue],404 [_uploadButton stringValue],405
