Changeset 4272

Show
Ignore:
Timestamp:
06/09/06 19:37:09 (2 years ago)
Author:
morris
Message:

Make sure we don't start another download when an upload finishes and vice versa, fixes #138

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • WiredClient/trunk/English.lproj/ReleaseNotes.rtf

    r4237 r4272  
    4040- Fix a crash when receiving an error while writing to a server\ 
    4141- Fix disabled buttons in private chat topic dialog\ 
     42- Fix a queueing problem where a second download transfer would be started when an upload transfer finished\ 
    4243\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural 
    4344 
  • WiredClient/trunk/WCTransfer.h

    r3598 r4272  
    142142- (NSProgressIndicator *)progressIndicator; 
    143143 
     144- (BOOL)isWorking; 
    144145- (NSString *)status; 
    145146 
  • WiredClient/trunk/WCTransfer.m

    r3598 r4272  
    440440#pragma mark - 
    441441 
     442- (BOOL)isWorking { 
     443        return (_state == WCTransferListing || _state == WCTransferRunning || 
     444                        _state == WCTransferStopping || _state == WCTransferStopped || 
     445                        _state == WCTransferRemoving); 
     446} 
     447 
     448 
     449 
    442450- (NSString *)status { 
    443451        NSTimeInterval          interval; 
  • WiredClient/trunk/WCTransfers.m

    r4180 r4272  
    6363- (WCTransfer *)_transferWithPath:(NSString *)path; 
    6464- (WCTransfer *)_transferWithState:(WCTransferState)state; 
    65 - (unsigned int)_unfinishedTransferCount; 
     65- (WCTransfer *)_transferWithState:(WCTransferState)state type:(WCTransferType)type; 
     66- (unsigned int)_numberOfWorkingTransfersWithType:(WCTransferType)type; 
    6667- (NSString *)_checksumForPath:(NSString *)path; 
    6768 
     69- (void)_requestNextTransfer; 
    6870- (void)_requestTransfer:(WCTransfer *)transfer; 
    6971- (void)_requestDownload:(WCTransfer *)transfer first:(BOOL)first; 
     
    266268 
    267269 
    268 - (unsigned int)_unfinishedTransferCount { 
     270- (WCTransfer *)_transferWithState:(WCTransferState)state type:(WCTransferType)type { 
     271        NSEnumerator            *enumerator; 
     272        WCTransfer                      *eachTransfer, *transfer = NULL; 
     273 
     274        enumerator = [_transfers objectEnumerator]; 
     275 
     276        while((eachTransfer = [enumerator nextObject])) { 
     277                if([eachTransfer state] == state && [eachTransfer type] == type) { 
     278                        transfer = eachTransfer; 
     279 
     280                        break; 
     281                } 
     282        } 
     283 
     284        return transfer; 
     285
     286 
     287 
     288 
     289- (unsigned int)_numberOfWorkingTransfersWithType:(WCTransferType)type { 
    269290        NSEnumerator            *enumerator; 
    270291        WCTransfer                      *transfer; 
     
    274295 
    275296        while((transfer = [enumerator nextObject])) { 
    276                 if([transfer state] != WCTransferFinished
     297                if([transfer type] == type && [transfer isWorking]
    277298                        count++; 
    278299        } 
     
    297318 
    298319#pragma mark - 
     320 
     321- (void)_requestNextTransfer { 
     322        WCTransfer              *transfer = NULL; 
     323        unsigned int    downloads, uploads; 
     324         
     325        if(![WCSettings boolForKey:WCQueueTransfers]) { 
     326                transfer        = [self _transferWithState:WCTransferLocallyQueued]; 
     327        } else { 
     328                downloads       = [self _numberOfWorkingTransfersWithType:WCTransferDownload]; 
     329                uploads         = [self _numberOfWorkingTransfersWithType:WCTransferUpload]; 
     330                 
     331                if(downloads == 0 && uploads == 0) 
     332                        transfer = [self _transferWithState:WCTransferLocallyQueued]; 
     333                else if(downloads == 0) 
     334                        transfer = [self _transferWithState:WCTransferLocallyQueued type:WCTransferDownload]; 
     335                else if(uploads == 0) 
     336                        transfer = [self _transferWithState:WCTransferLocallyQueued type:WCTransferUpload]; 
     337                 
     338        } 
     339 
     340        if(transfer) 
     341                [self _requestTransfer:transfer]; 
     342} 
     343 
     344 
    299345 
    300346- (void)_requestTransfer:(WCTransfer *)transfer { 
     
    401447        NSDictionary            *dictionary; 
    402448        NSTimeInterval          interval; 
    403         WCTransfer                      *nextTransfer; 
    404449        WCFile                          *file; 
    405450        WCPreview                       *preview; 
     
    486531        } 
    487532 
    488         if(next) { 
    489                 nextTransfer = [self _transferWithState:WCTransferLocallyQueued]; 
    490  
    491                 if(nextTransfer) 
    492                         [self _requestTransfer:nextTransfer]; 
    493         } 
     533        if(next) 
     534                [self _requestNextTransfer]; 
    494535         
    495536        [file release]; 
     
    556597        [_transfers addObject:transfer]; 
    557598         
    558         count = [self _unfinishedTransferCount]; 
    559          
    560         if(count == 1
     599        count = [self _numberOfWorkingTransfersWithType:WCTransferDownload]; 
     600 
     601        if(count == 0
    561602                [self showWindow:self]; 
    562603         
    563         if(count > 1 && [WCSettings boolForKey:WCQueueTransfers]) 
     604        if(count > 0 && [WCSettings boolForKey:WCQueueTransfers]) 
    564605                [transfer setState:WCTransferLocallyQueued]; 
    565606        else 
     
    658699        [_transfers addObject:transfer]; 
    659700         
    660         count = [self _unfinishedTransferCount]; 
    661          
    662         if(count == 1
     701        count = [self _numberOfWorkingTransfersWithType:WCTransferUpload]; 
     702         
     703        if(count == 0
    663704                [self showWindow:self]; 
    664705         
    665         if(count > 1 && [WCSettings boolForKey:WCQueueTransfers]) 
     706        if(count > 0 && [WCSettings boolForKey:WCQueueTransfers]) 
    666707                [transfer setState:WCTransferLocallyQueued]; 
    667708        else 
     
    12571298        NSString                *path, *free; 
    12581299        NSArray                 *fields; 
    1259         WCTransfer              *transfer, *nextTransfer
     1300        WCTransfer              *transfer
    12601301 
    12611302        fields          = [[notification userInfo] objectForKey:WCArgumentsKey]; 
     
    12821323                [_transfersTableView reloadData]; 
    12831324 
    1284                 nextTransfer = [self _transferWithState:WCTransferLocallyQueued]; 
    1285  
    1286                 if(nextTransfer) 
    1287                         [self _requestTransfer:nextTransfer]; 
     1325                [self _requestNextTransfer]; 
    12881326        } 
    12891327 
     
    13221360        NSString                *path, *free; 
    13231361        NSArray                 *fields; 
    1324         WCTransfer              *transfer, *nextTransfer
     1362        WCTransfer              *transfer
    13251363 
    13261364        fields          = [[notification userInfo] objectForKey:WCArgumentsKey]; 
     
    13471385                [_transfersTableView reloadData]; 
    13481386 
    1349                 nextTransfer = [self _transferWithState:WCTransferLocallyQueued]; 
    1350  
    1351                 if(nextTransfer) 
    1352                         [self _requestTransfer:nextTransfer]; 
     1387                [self _requestNextTransfer]; 
    13531388        } 
    13541389