Changeset 3548

Show
Ignore:
Timestamp:
01/21/06 02:15:11 (3 years ago)
Author:
morris
Message:

Fix up accounts, looks to be working

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • WiredClient/trunk/WCAccount.h

    r3413 r3548  
    2727 */ 
    2828 
    29 enum WCAccountType { 
    30         WCAccountTypeUser, 
    31         WCAccountTypeGroup 
     29enum _WCAccountType { 
     30        WCAccountUser, 
     31        WCAccountGroup 
    3232}; 
    33 typedef enum WCAccountType            WCAccountType; 
     33typedef enum _WCAccountType           WCAccountType; 
    3434 
    3535 
     
    3737        WCAccountType                           _type; 
    3838        NSString                                        *_name; 
     39        NSString                                        *_password; 
     40        NSString                                        *_group; 
    3941        NSArray                                         *_privileges; 
    4042} 
    4143 
    4244 
    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; 
    4450 
    45 - (void)setType:(WCAccountType)type; 
    4651- (WCAccountType)type; 
    47 - (void)setName:(NSString *)name; 
     52 
    4853- (NSString *)name; 
    49 - (void)setPrivileges:(NSArray *)privileges; 
    50 - (NSArray *)privileges; 
    51  
     54- (NSString *)group; 
     55- (NSString *)password; 
    5256- (BOOL)getUserInfo; 
    5357- (BOOL)broadcast; 
     
    6872- (BOOL)banUsers; 
    6973- (BOOL)cannotBeKicked; 
     74- (unsigned int)downloadSpeedLimit; 
     75- (unsigned int)uploadSpeedLimit; 
     76- (unsigned int)downloadLimit; 
     77- (unsigned int)uploadLimit; 
    7078- (BOOL)setTopic; 
    7179 
  • WiredClient/trunk/WCAccount.m

    r3413 r3548  
    2929#import "WCAccount.h" 
    3030 
     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 
    3194@implementation WCAccount 
    3295 
    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]; 
    39151} 
    40152 
     
    43155- (void)dealloc { 
    44156        [_name release]; 
     157        [_password release]; 
     158        [_group release]; 
    45159        [_privileges release]; 
    46160 
     
    74188#pragma mark - 
    75189 
    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 - 
    81200 
    82201 
     
    87206 
    88207 
    89 - (void)setName:(NSString *)name { 
    90         [name retain]; 
    91         [_name release]; 
    92  
    93         _name = name; 
    94 
    95  
    96  
     208#pragma mark - 
    97209 
    98210- (NSString *)name { 
     
    102214 
    103215 
    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 
    120227 
    121228- (BOOL)getUserInfo { 
    122         return [[[self privileges] safeObjectAtIndex:0] isEqualToString:@"1"]; 
     229        return [[_privileges safeObjectAtIndex:0] isEqualToString:@"1"]; 
    123230} 
    124231 
     
    126233 
    127234- (BOOL)broadcast { 
    128         return [[[self privileges] safeObjectAtIndex:1] isEqualToString:@"1"]; 
     235        return [[_privileges safeObjectAtIndex:1] isEqualToString:@"1"]; 
    129236} 
    130237 
     
    132239 
    133240- (BOOL)postNews { 
    134         return [[[self privileges] safeObjectAtIndex:2] isEqualToString:@"1"]; 
     241        return [[_privileges safeObjectAtIndex:2] isEqualToString:@"1"]; 
    135242} 
    136243 
     
    138245 
    139246- (BOOL)clearNews { 
    140         return [[[self privileges] safeObjectAtIndex:3] isEqualToString:@"1"]; 
     247        return [[_privileges safeObjectAtIndex:3] isEqualToString:@"1"]; 
    141248} 
    142249 
     
    144251 
    145252- (BOOL)download { 
    146         return [[[self privileges] safeObjectAtIndex:4] isEqualToString:@"1"]; 
     253        return [[_privileges safeObjectAtIndex:4] isEqualToString:@"1"]; 
    147254} 
    148255 
     
    150257 
    151258- (BOOL)upload { 
    152         return [[[self privileges] safeObjectAtIndex:5] isEqualToString:@"1"]; 
     259        return [[_privileges safeObjectAtIndex:5] isEqualToString:@"1"]; 
    153260} 
    154261 
     
    156263 
    157264- (BOOL)uploadAnywhere { 
    158         return [[[self privileges] safeObjectAtIndex:6] isEqualToString:@"1"]; 
     265        return [[_privileges safeObjectAtIndex:6] isEqualToString:@"1"]; 
    159266} 
    160267 
     
    162269 
    163270- (BOOL)createFolders { 
    164         return [[[self privileges] safeObjectAtIndex:7] isEqualToString:@"1"]; 
     271        return [[_privileges safeObjectAtIndex:7] isEqualToString:@"1"]; 
    165272} 
    166273 
     
    168275 
    169276- (BOOL)alterFiles { 
    170         return [[[self privileges] safeObjectAtIndex:8] isEqualToString:@"1"]; 
     277        return [[_privileges safeObjectAtIndex:8] isEqualToString:@"1"]; 
    171278} 
    172279 
     
    174281 
    175282- (BOOL)deleteFiles { 
    176         return [[[self privileges] safeObjectAtIndex:9] isEqualToString:@"1"]; 
     283        return [[_privileges safeObjectAtIndex:9] isEqualToString:@"1"]; 
    177284} 
    178285 
     
    180287 
    181288- (BOOL)viewDropBoxes { 
    182         return [[[self privileges] safeObjectAtIndex:10] isEqualToString:@"1"]; 
     289        return [[_privileges safeObjectAtIndex:10] isEqualToString:@"1"]; 
    183290} 
    184291 
     
    186293 
    187294- (BOOL)createAccounts { 
    188         return [[[self privileges] safeObjectAtIndex:11] isEqualToString:@"1"]; 
     295        return [[_privileges safeObjectAtIndex:11] isEqualToString:@"1"]; 
    189296} 
    190297 
     
    192299 
    193300- (BOOL)editAccounts { 
    194         return [[[self privileges] safeObjectAtIndex:12] isEqualToString:@"1"]; 
     301        return [[_privileges safeObjectAtIndex:12] isEqualToString:@"1"]; 
    195302} 
    196303 
     
    198305 
    199306- (BOOL)deleteAccounts { 
    200         return [[[self privileges] safeObjectAtIndex:13] isEqualToString:@"1"]; 
     307        return [[_privileges safeObjectAtIndex:13] isEqualToString:@"1"]; 
    201308} 
    202309 
     
    204311 
    205312- (BOOL)elevatePrivileges { 
    206         return [[[self privileges] safeObjectAtIndex:14] isEqualToString:@"1"]; 
     313        return [[_privileges safeObjectAtIndex:14] isEqualToString:@"1"]; 
    207314} 
    208315 
     
    210317 
    211318- (BOOL)kickUsers { 
    212         return [[[self privileges] safeObjectAtIndex:15] isEqualToString:@"1"]; 
     319        return [[_privileges safeObjectAtIndex:15] isEqualToString:@"1"]; 
    213320} 
    214321 
     
    216323 
    217324- (BOOL)banUsers { 
    218         return [[[self privileges] safeObjectAtIndex:16] isEqualToString:@"1"]; 
     325        return [[_privileges safeObjectAtIndex:16] isEqualToString:@"1"]; 
    219326} 
    220327 
     
    222329 
    223330- (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]; 
    225356} 
    226357 
     
    228359 
    229360- (BOOL)setTopic { 
    230         return [[[self privileges] safeObjectAtIndex:22] isEqualToString:@"1"]; 
     361        return [[_privileges safeObjectAtIndex:22] isEqualToString:@"1"]; 
    231362} 
    232363 
     
    242373 
    243374- (NSComparisonResult)compareType:(WCAccount *)account { 
    244         if([self type] == WCAccountTypeUser && [account type] == WCAccountTypeGroup) 
     375        if([self type] == WCAccountUser && [account type] == WCAccountGroup) 
    245376                return NSOrderedAscending; 
    246         else if([self type] == WCAccountTypeGroup && [account type] == WCAccountTypeUser) 
     377        else if([self type] == WCAccountGroup && [account type] == WCAccountUser) 
    247378                return NSOrderedDescending; 
    248379 
  • WiredClient/trunk/WCAccountEditor.h

    r3413 r3548  
    6868        IBOutlet NSButton                                       *_okButton; 
    6969 
     70        NSArray                                                         *_buttons; 
     71         
    7072        NSMutableArray                                          *_groups; 
    7173        WCAccount                                                       *_account; 
    72         NSString                                                        *_password; 
    73         NSString                                                        *_group; 
    7474} 
    7575 
    7676 
    7777- (id)initAccountEditorWithConnection:(WCServerConnection *)connection; 
    78 - (id)initAccountEditorWithConnection:(WCServerConnection *)connection edit:(WCAccount *)account; 
     78- (id)initAccountEditorWithConnection:(WCServerConnection *)connection account:(WCAccount *)account; 
    7979 
    8080- (IBAction)create:(id)sender; 
  • WiredClient/trunk/WCAccountEditor.m

    r3540 r3548  
    3131#import "WCAccounts.h" 
    3232 
     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 
    33120@implementation WCAccountEditor 
    34121 
    35122- (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 { 
    42129        self = [super initWithWindowNibName:@"AccountEditor" 
    43130                                                                   name:NSLS(@"Account Editor", @"Account editor window title") 
     
    47134        _groups = [[NSMutableArray alloc] init]; 
    48135 
    49         // --- load the window 
    50136        [self window]; 
    51137 
    52         // --- subscribe to these 
    53138        [[self connection] addObserver:self 
    54139                                                  selector:@selector(accountEditorReceivedUser:) 
     
    60145 
    61146        if(_account) { 
    62                 if([_account type] == WCAccountTypeUser) { 
    63                         // --- read user 
     147                if([_account type] == WCAccountUser) { 
    64148                        [_typePopUpButton selectItem:_userMenuItem]; 
    65                         [self type:self]; 
    66149 
    67150                        [[self connection] sendCommand:WCReadUserCommand withArgument:[_account name]]; 
    68151                } else { 
    69                         // --- read group 
    70152                        [_typePopUpButton selectItem:_groupMenuItem]; 
    71                         [self type:self]; 
    72153 
    73154                        [[self connection] sendCommand:WCReadGroupCommand withArgument:[_account name]]; 
    74155                } 
    75156 
    76                 // --- switch to edit 
    77157                [_okButton setAction:@selector(edit:)]; 
    78158                [_okButton setTitle:NSLS(@"Save", @"Account Editor button title")]; 
     
    81161                [_nameTextField setEnabled:NO]; 
    82162        } else { 
    83                 // --- switch to create 
    84163                [_okButton setAction:@selector(create:)]; 
    85164                [_okButton setTitle:NSLS(@"Add", @"Account Editor button title")]; 
     
    89168        } 
    90169 
    91         [self group:self]; 
     170        [self _updateType]; 
     171        [self _updateGroup]; 
     172         
    92173        [self showWindow:self]; 
    93174 
     
    98179 
    99180- (void)dealloc { 
     181        [_buttons release]; 
    100182        [_groups release]; 
    101183        [_account release]; 
    102         [_password release]; 
    103         [_group release]; 
    104184 
    105185        [super dealloc]; 
     
    112192- (void)windowDidLoad { 
    113193        NSEnumerator    *enumerator; 
     194        NSArray                 *groups; 
    114195        NSMenuItem              *item; 
    115196        WCAccount               *account; 
    116197 
    117         // --- set up window 
    118198        [[self window] setTitle:[[self connection] name] withSubtitle:[self name]]; 
    119199        [self setShouldSaveWindowSizeOnly:YES]; 
     
    121201        [self setWindowFrameAutosaveName:@"AccountEditor"]; 
    122202 
    123         // --- menu icons 
    124203        [_userMenuItem setImage:[NSImage imageNamed:@"User"]]; 
    125204        [_groupMenuItem setImage:[NSImage imageNamed:@"Group"]]; 
    126205 
    127         // --- add groups 
    128         enumerator = [[[[self connection] accounts] groups] objectEnumerator]; 
     206        groups = [[[self connection] accounts] groups]; 
     207        enumerator = [groups objectEnumerator]; 
    129208 
    130209        while((account = [enumerator nextObject])) { 
     
    134213                [item release]; 
    135214        } 
     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]; 
    136237} 
    137238 
     
    157258 
    158259- (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]]) 
    170266                return; 
    171267 
     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 
    172307        [[self connection] removeObserver:self name:WCAccountEditorReceivedUser]; 
    173  
    174         // --- save the password and group 
    175         _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 fields 
    182         [_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]; 
    221308} 
    222309 
     
    224311 
    225312- (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) 
    238320                        return; 
    239321        } 
    240322 
     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 
    241359        [[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 fields 
    247         if([_typePopUpButton selectedItem] == _groupMenuItem) 
    248                 [_nameTextField setStringValue:name]; 
    249  
    250         // --- set buttons 
    251         [_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 fields 
    276         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]; 
    285360} 
    286361 
     
    292367        NSString                *password, *group; 
    293368 
    294         // --- don't encrypt the password if the field is empty, just send 
    295369        if([[_passwordTextField stringValue] isEqualToString:@""]) 
    296370                password = @""; 
     
    303377                group = @""; 
    304378 
    305         // --- send create account command 
    306379        if([_typePopUpButton selectedItem] == _userMenuItem) { 
    307380                [[self connection] sendCommand:WCCreateUserCommand 
     
    330403                                                         [NSNumber numberWithInt:[_downloadSpeedTextField intValue] * 1024], 
    331404                                                         [NSNumber numberWithInt:[_uploadSpeedTextField intValue] * 1024], 
    332                                                          @"0"
    333                                                          @"0"
     405                                                         [NSNumber numberWithInt:[_account downloadLimit]]
     406                                                         [NSNumber numberWithInt:[_account uploadLimit]]
    334407                                                         [_setTopicButton stringValue], 
    335408                                                         NULL]]; 
     
    359432                                                         [NSNumber numberWithInt:[_downloadSpeedTextField intValue] * 1024], 
    360433                                                         [NSNumber numberWithInt:[_uploadSpeedTextField intValue] * 1024], 
    361                                                          @"0"
    362                                                          @"0"
     434                                                         [NSNumber numberWithInt:[_account downloadLimit]]
     435                                                         [NSNumber numberWithInt:[_account uploadLimit]]
    363436                                                         [_setTopicButton stringValue], 
    364437                                                         NULL]]; 
     
    366439 
    367440        [[self connection] postNotificationName:WCAccountsShouldReload object:[self connection]]; 
     441         
    368442        [self close]; 
    369443} 
     
    375449 
    376450        if([[_passwordTextField stringValue] isEqualToString:@""]) { 
    377                 // --- don't encrypt the password if the field is empty, just send 
    378451                password = @""; 
    379452        } 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]; 
    383455                else 
    384456                        password = [[_passwordTextField stringValue] SHA1]; 
     
    390462                group = @""; 
    391463 
    392         // --- send edit account command 
    393         if([_account type] == WCAccountTypeUser) { 
     464        if([_account type] == WCAccountUser) { 
    394465                [[self connection] sendCommand:WCEditUserCommand 
    395466                                                 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