Changeset 3205


Ignore:
Timestamp:
Sep 27, 2007, 8:42:20 PM (14 years ago)
Author:
livings124
Message:

instead of creating every string, including both minimal and regular together, for every torrent, generate the string when requested

Location:
trunk/macosx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Torrent.h

    r3191 r3205  
    5858
    5959    NSImage * fIcon;
    60     NSString * fProgressString, * fStatusString, * fShortStatusString, * fRemainingTimeString;
    6160   
    6261    tr_file_stat * fileStat;
     
    157156- (float) progressLeft;
    158157- (int) eta;
     158- (float) notAvailableDesired;
    159159
    160160- (BOOL) isActive;
  • trunk/macosx/Torrent.m

    r3202 r3205  
    158158    [fIcon release];
    159159   
    160     [fProgressString release];
    161     [fStatusString release];
    162     [fShortStatusString release];
    163     [fRemainingTimeString release];
    164    
    165160    [fFileList release];
    166161    [fFlatFileList release];
     
    272267        [[NSNotificationCenter defaultCenter] postNotificationName: @"TorrentStoppedForRatio" object: self];
    273268    }
    274        
    275         NSMutableString * progressString = [[NSMutableString alloc] init],
    276                                         * remainingTimeString = [[NSMutableString alloc] init],
    277                                         * statusString = [[NSMutableString alloc] init],
    278                                         * shortStatusString = [[NSMutableString alloc] init];
    279 
    280     if (![self allDownloaded])
    281     {
    282         if ([fDefaults boolForKey: @"DisplayStatusProgressSelected"])
    283         {
    284             uint64_t have = [self haveTotal];
    285             [progressString appendFormat: NSLocalizedString(@"%@ of %@ selected (%.2f%%)", "Torrent -> progress string"),
    286                             [NSString stringForFileSize: have], [NSString stringForFileSize: have + fStat->leftUntilDone],
    287                             100.0 * [self progressDone]];
    288         }
    289         else
    290             [progressString appendFormat: NSLocalizedString(@"%@ of %@ (%.2f%%)", "Torrent -> progress string"),
    291                             [NSString stringForFileSize: [self haveTotal]],
    292                             [NSString stringForFileSize: [self size]], 100.0 * [self progress]];
    293     }
    294     else if (![self isComplete])
    295     {
    296         if ([fDefaults boolForKey: @"DisplayStatusProgressSelected"])
    297             [progressString appendFormat: NSLocalizedString(@"%@ selected, uploaded %@ (Ratio: %@)",
    298                 "Torrent -> progress string"), [NSString stringForFileSize: [self haveTotal]],
    299                 [NSString stringForFileSize: [self uploadedTotal]], [NSString stringForRatio: [self ratio]]];
    300         else
    301             [progressString appendFormat: NSLocalizedString(@"%@ of %@ (%.2f%%), uploaded %@ (Ratio: %@)",
    302                 "Torrent -> progress string"), [NSString stringForFileSize: [self haveTotal]],
    303                 [NSString stringForFileSize: [self size]], 100.0 * [self progress],
    304                 [NSString stringForFileSize: [self uploadedTotal]], [NSString stringForRatio: [self ratio]]];
    305     }
    306     else
    307         [progressString appendFormat: NSLocalizedString(@"%@, uploaded %@ (Ratio: %@)", "Torrent -> progress string"),
    308                 [NSString stringForFileSize: [self size]], [NSString stringForFileSize: [self uploadedTotal]],
    309                 [NSString stringForRatio: [self ratio]]];
    310269
    311270    BOOL wasChecking = fChecking;
    312     fChecking = NO;
    313     switch (fStat->status)
    314     {
    315         NSString * tempString;
    316        
    317         case TR_STATUS_STOPPED:
    318             if (fWaitToStart)
    319             {
    320                 tempString = ![self allDownloaded]
    321                         ? [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis]
    322                         : [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
    323             }
    324             else if (fFinishedSeeding)
    325                 tempString = NSLocalizedString(@"Seeding complete", "Torrent -> status string");
    326             else
    327                 tempString = NSLocalizedString(@"Paused", "Torrent -> status string");
    328            
    329             [statusString setString: tempString];
    330             [shortStatusString setString: tempString];
    331            
    332             break;
    333 
    334         case TR_STATUS_CHECK_WAIT:
    335             tempString = [NSLocalizedString(@"Waiting to check existing data", "Torrent -> status string") stringByAppendingEllipsis];
    336            
    337             [statusString setString: tempString];
    338             [shortStatusString setString: tempString];
    339             [remainingTimeString setString: tempString];
    340            
    341             fChecking = YES;
    342            
    343             break;
    344 
    345         case TR_STATUS_CHECK:
    346             tempString = [NSString stringWithFormat: NSLocalizedString(@"Checking existing data (%.2f%%)",
    347                                     "Torrent -> status string"), 100.0 * fStat->recheckProgress];
    348            
    349             [statusString setString: tempString];
    350             [shortStatusString setString: tempString];
    351             [remainingTimeString setString: tempString];
    352            
    353             fChecking = YES;
    354            
    355             break;
    356 
    357         case TR_STATUS_DOWNLOAD:
    358             [statusString setString: @""];
    359             if ([self totalPeersConnected] != 1)
    360                 [statusString appendFormat: NSLocalizedString(@"Downloading from %d of %d peers",
    361                                                 "Torrent -> status string"), [self peersSendingToUs], [self totalPeersConnected]];
    362             else
    363                 [statusString appendFormat: NSLocalizedString(@"Downloading from %d of 1 peer",
    364                                                 "Torrent -> status string"), [self peersSendingToUs]];
    365            
    366             int eta = [self eta];
    367             if (eta < 0)
    368             {
    369                 [remainingTimeString setString: NSLocalizedString(@"Unknown", "Torrent -> remaining time")];
    370                 [progressString appendString: NSLocalizedString(@" - remaining time unknown", "Torrent -> progress string")];
    371             }
    372             else
    373             {
    374                 if (eta < 60)
    375                     [remainingTimeString appendFormat: NSLocalizedString(@"%d sec", "Torrent -> remaining time"), eta];
    376                 else if (eta < 3600) //60 * 60
    377                     [remainingTimeString appendFormat: NSLocalizedString(@"%d min %d sec", "Torrent -> remaining time"),
    378                                                             eta / 60, eta % 60];
    379                 else if (eta < 86400) //24 * 60 * 60
    380                     [remainingTimeString appendFormat: NSLocalizedString(@"%d hr %d min", "Torrent -> remaining time"),
    381                                                             eta / 3600, (eta / 60) % 60];
    382                 else
    383                 {
    384                                         int days = eta / 86400;
    385                     if (days > 1)
    386                         [remainingTimeString appendFormat: NSLocalizedString(@"%d days %d hr", "Torrent -> remaining time"),
    387                                                                 days, (eta / 3600) % 24];
    388                     else
    389                         [remainingTimeString appendFormat: NSLocalizedString(@"1 day %d hr", "Torrent -> remaining time"),
    390                                                                 (eta / 3600) % 24];
    391                 }
    392                
    393                 [progressString appendFormat: NSLocalizedString(@" - %@ remaining", "Torrent -> progress string"),
    394                                                                     remainingTimeString];
    395             }
    396            
    397             break;
    398 
    399         case TR_STATUS_SEED:
    400         case TR_STATUS_DONE:
    401             [statusString setString: @""];
    402             if ([self totalPeersConnected] != 1)
    403                 [statusString appendFormat: NSLocalizedString(@"Seeding to %d of %d peers", "Torrent -> status string"),
    404                                                 [self peersGettingFromUs], [self totalPeersConnected]];
    405             else
    406                 [statusString appendFormat: NSLocalizedString(@"Seeding to %d of 1 peer", "Torrent -> status string"),
    407                                                 [self peersGettingFromUs]];
    408            
    409             break;
    410 
    411         case TR_STATUS_STOPPING:
    412             tempString = [NSLocalizedString(@"Stopping", "Torrent -> status string") stringByAppendingEllipsis];
    413        
    414             [statusString setString: tempString];
    415             [shortStatusString setString: tempString];
    416            
    417             break;
    418     }
     271    fChecking = fStat->status == TR_STATUS_CHECK || fStat->status == TR_STATUS_CHECK_WAIT;
    419272   
    420273    //check for error
     
    427280                && [fDefaults integerForKey: @"StalledMinutes"] < [self stalledMinutes];
    428281   
    429     //create strings for error or stalled
    430     if (fError)
    431     {
    432         NSString * errorString = [self errorMessage];
    433         if (!errorString || [errorString isEqualToString: @""])
    434             [statusString setString: NSLocalizedString(@"Error", "Torrent -> status string")];
    435         else
    436             [statusString setString: [NSLocalizedString(@"Error: ", "Torrent -> status string")
    437                                     stringByAppendingString: errorString]];
    438     }
    439     else if (fStalled)
    440         [statusString insertString: NSLocalizedString(@"Stalled, ", "Torrent -> status string") atIndex: 0];
    441     else;
    442    
    443282    //update queue for checking (from downloading to seeding), stalled, or error
    444283    if ((wasChecking && !fChecking) || (!wasStalled && fStalled) || (!wasError && fError && [self isActive]))
    445284        [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
    446 
    447     if ([self isActive] && ![self isChecking])
    448     {
    449         NSString * stringToAppend = @"";
    450         if (![self allDownloaded])
    451         {
    452             stringToAppend = [NSString stringWithFormat: NSLocalizedString(@"DL: %@, ", "Torrent -> status string"),
    453                                 [NSString stringForSpeed: [self downloadRate]]];
    454             [shortStatusString setString: @""];
    455         }
    456         else
    457         {
    458             NSString * ratioString = [NSString stringForRatio: [self ratio]];
    459        
    460             [shortStatusString setString: [NSString stringWithFormat: NSLocalizedString(@"Ratio: %@, ",
    461                                             "Torrent -> status string"), ratioString]];
    462             [remainingTimeString setString: [NSLocalizedString(@"Ratio: ", "Torrent -> status string")
    463                                                 stringByAppendingString: ratioString]];
    464         }
    465        
    466         stringToAppend = [stringToAppend stringByAppendingString: [NSLocalizedString(@"UL: ", "Torrent -> status string")
    467                                             stringByAppendingString: [NSString stringForSpeed: [self uploadRate]]]];
    468 
    469         [statusString appendFormat: @" - %@", stringToAppend];
    470         [shortStatusString appendString: stringToAppend];
    471     }
    472        
    473     //retain the strings
    474     [fProgressString release];
    475     fProgressString = progressString;
    476    
    477     [fStatusString release];
    478     fStatusString = statusString;
    479    
    480     [fShortStatusString release];
    481     fShortStatusString = shortStatusString;
    482    
    483     [fRemainingTimeString release];
    484     fRemainingTimeString = remainingTimeString;
    485285}
    486286
     
    980780}
    981781
    982 /*- (float) notAvailableDesired
    983 {NSLog(@"not available %f", (float)(fStat->desiredSize - fStat->desiredAvailable) / [self size]);
     782- (float) notAvailableDesired
     783{//NSLog(@"not available %f", (float)(fStat->desiredSize - fStat->desiredAvailable) / [self size]);
    984784    return (float)(fStat->desiredSize - fStat->desiredAvailable) / [self size];
    985 }*/
     785}
    986786
    987787- (BOOL) isActive
     
    1080880- (NSString *) progressString
    1081881{
    1082     return fProgressString;
     882    NSString * string;
     883   
     884    if (![self allDownloaded])
     885    {
     886        if ([fDefaults boolForKey: @"DisplayStatusProgressSelected"])
     887        {
     888            uint64_t have = [self haveTotal];
     889            string = [NSString stringWithFormat: NSLocalizedString(@"%@ of %@ selected (%.2f%%)", "Torrent -> progress string"),
     890                            [NSString stringForFileSize: have], [NSString stringForFileSize: have + fStat->leftUntilDone],
     891                            100.0 * [self progressDone]];
     892        }
     893        else
     894            string = [NSString stringWithFormat: NSLocalizedString(@"%@ of %@ (%.2f%%)", "Torrent -> progress string"),
     895                            [NSString stringForFileSize: [self haveTotal]],
     896                            [NSString stringForFileSize: [self size]], 100.0 * [self progress]];
     897    }
     898    else if (![self isComplete])
     899    {
     900        if ([fDefaults boolForKey: @"DisplayStatusProgressSelected"])
     901            string = [NSString stringWithFormat: NSLocalizedString(@"%@ selected, uploaded %@ (Ratio: %@)",
     902                "Torrent -> progress string"), [NSString stringForFileSize: [self haveTotal]],
     903                [NSString stringForFileSize: [self uploadedTotal]], [NSString stringForRatio: [self ratio]]];
     904        else
     905            string = [NSString stringWithFormat: NSLocalizedString(@"%@ of %@ (%.2f%%), uploaded %@ (Ratio: %@)",
     906                "Torrent -> progress string"), [NSString stringForFileSize: [self haveTotal]],
     907                [NSString stringForFileSize: [self size]], 100.0 * [self progress],
     908                [NSString stringForFileSize: [self uploadedTotal]], [NSString stringForRatio: [self ratio]]];
     909    }
     910    else
     911        string = [NSString stringWithFormat: NSLocalizedString(@"%@, uploaded %@ (Ratio: %@)", "Torrent -> progress string"),
     912                [NSString stringForFileSize: [self size]], [NSString stringForFileSize: [self uploadedTotal]],
     913                [NSString stringForRatio: [self ratio]]];
     914   
     915    //add time when downloading
     916    if (fStat->status == TR_STATUS_DOWNLOAD)
     917    {
     918        #warning combine
     919        int eta = [self eta];
     920        if (eta < 0)
     921            string = [string stringByAppendingString: NSLocalizedString(@" - remaining time unknown", "Torrent -> progress string")];
     922        else
     923        {
     924            NSString * timeString;
     925            if (eta < 60)
     926                timeString = [NSString stringWithFormat: NSLocalizedString(@"%d sec", "Torrent -> remaining time"), eta];
     927            else if (eta < 3600) //60 * 60
     928                timeString = [NSString stringWithFormat: NSLocalizedString(@"%d min %d sec", "Torrent -> remaining time"),
     929                                                        eta / 60, eta % 60];
     930            else if (eta < 86400) //24 * 60 * 60
     931                timeString = [NSString stringWithFormat: NSLocalizedString(@"%d hr %d min", "Torrent -> remaining time"),
     932                                                        eta / 3600, (eta / 60) % 60];
     933            else
     934            {
     935                int days = eta / 86400;
     936                if (days > 1)
     937                    timeString = [NSString stringWithFormat: NSLocalizedString(@"%d days %d hr", "Torrent -> remaining time"),
     938                                                            days, (eta / 3600) % 24];
     939                else
     940                    timeString = [NSString stringWithFormat: NSLocalizedString(@"1 day %d hr", "Torrent -> remaining time"),
     941                                                            (eta / 3600) % 24];
     942            }
     943           
     944            string = [string stringByAppendingFormat: NSLocalizedString(@" - %@ remaining", "Torrent -> progress string"), timeString];
     945        }
     946    }
     947   
     948    return string;
    1083949}
    1084950
    1085951- (NSString *) statusString
    1086952{
    1087     return fStatusString;
     953    NSString * string = @"";
     954   
     955    switch (fStat->status)
     956    {
     957        case TR_STATUS_STOPPED:
     958            if (fWaitToStart)
     959            {
     960                string = ![self allDownloaded]
     961                        ? [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis]
     962                        : [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
     963            }
     964            else if (fFinishedSeeding)
     965                string = NSLocalizedString(@"Seeding complete", "Torrent -> status string");
     966            else
     967                string = NSLocalizedString(@"Paused", "Torrent -> status string");
     968           
     969            break;
     970
     971        case TR_STATUS_CHECK_WAIT:
     972            string = [NSLocalizedString(@"Waiting to check existing data", "Torrent -> status string") stringByAppendingEllipsis];
     973           
     974            break;
     975
     976        case TR_STATUS_CHECK:
     977            string = [NSString stringWithFormat: NSLocalizedString(@"Checking existing data (%.2f%%)",
     978                                    "Torrent -> status string"), 100.0 * fStat->recheckProgress];
     979           
     980            break;
     981
     982        case TR_STATUS_DOWNLOAD:
     983            if ([self totalPeersConnected] != 1)
     984                string = [NSString stringWithFormat: NSLocalizedString(@"Downloading from %d of %d peers",
     985                                                "Torrent -> status string"), [self peersSendingToUs], [self totalPeersConnected]];
     986            else
     987                string = [NSString stringWithFormat: NSLocalizedString(@"Downloading from %d of 1 peer",
     988                                                "Torrent -> status string"), [self peersSendingToUs]];
     989           
     990            break;
     991
     992        case TR_STATUS_SEED:
     993        case TR_STATUS_DONE:
     994            if ([self totalPeersConnected] != 1)
     995                string = [NSString stringWithFormat: NSLocalizedString(@"Seeding to %d of %d peers", "Torrent -> status string"),
     996                                                [self peersGettingFromUs], [self totalPeersConnected]];
     997            else
     998                string = [NSString stringWithFormat: NSLocalizedString(@"Seeding to %d of 1 peer", "Torrent -> status string"),
     999                                                [self peersGettingFromUs]];
     1000           
     1001            break;
     1002
     1003        case TR_STATUS_STOPPING:
     1004            string = [NSLocalizedString(@"Stopping", "Torrent -> status string") stringByAppendingEllipsis];
     1005           
     1006            break;
     1007    }
     1008   
     1009    //create strings for error or stalled
     1010    #warning why fError
     1011    if (fError)
     1012    {
     1013        NSString * errorString = [self errorMessage];
     1014        if (!errorString || [errorString isEqualToString: @""])
     1015            string = NSLocalizedString(@"Error", "Torrent -> status string");
     1016        else
     1017            string = [NSLocalizedString(@"Error: ", "Torrent -> status string") stringByAppendingString: errorString];
     1018    }
     1019    else if (fStalled)
     1020        string = [NSLocalizedString(@"Stalled, ", "Torrent -> status string") stringByAppendingString: string];
     1021    else;
     1022   
     1023    if ([self isActive] && ![self isChecking])
     1024    {
     1025        NSString * stringToAppend = @"";
     1026        if (![self allDownloaded])
     1027        {
     1028            stringToAppend = [NSString stringWithFormat: NSLocalizedString(@"DL: %@, ", "Torrent -> status string"),
     1029                                [NSString stringForSpeed: [self downloadRate]]];
     1030        }
     1031       
     1032        stringToAppend = [stringToAppend stringByAppendingString: [NSLocalizedString(@"UL: ", "Torrent -> status string")
     1033                                            stringByAppendingString: [NSString stringForSpeed: [self uploadRate]]]];
     1034
     1035        string = [string stringByAppendingString: [NSString stringWithFormat: @" - %@", stringToAppend]];
     1036    }
     1037   
     1038    return string;
    10881039}
    10891040
    10901041- (NSString *) shortStatusString
    10911042{
    1092     return fShortStatusString;
     1043    NSString * string = @"";
     1044   
     1045    switch (fStat->status)
     1046    {
     1047        case TR_STATUS_STOPPED:
     1048            if (fWaitToStart)
     1049            {
     1050                string = ![self allDownloaded]
     1051                        ? [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis]
     1052                        : [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
     1053            }
     1054            else if (fFinishedSeeding)
     1055                string = NSLocalizedString(@"Seeding complete", "Torrent -> status string");
     1056            else
     1057                string = NSLocalizedString(@"Paused", "Torrent -> status string");
     1058           
     1059            break;
     1060
     1061        case TR_STATUS_CHECK_WAIT:
     1062            string = [NSLocalizedString(@"Waiting to check existing data", "Torrent -> status string") stringByAppendingEllipsis];
     1063           
     1064            break;
     1065
     1066        case TR_STATUS_CHECK:
     1067            string = [NSString stringWithFormat: NSLocalizedString(@"Checking existing data (%.2f%%)",
     1068                                    "Torrent -> status string"), 100.0 * fStat->recheckProgress];
     1069           
     1070            fChecking = YES;
     1071           
     1072            break;
     1073
     1074        case TR_STATUS_STOPPING:
     1075            string = [NSLocalizedString(@"Stopping", "Torrent -> status string") stringByAppendingEllipsis];
     1076           
     1077            break;
     1078    }
     1079   
     1080    #warning make "default"
     1081    if ([self isActive] && ![self isChecking])
     1082    {
     1083        NSString * stringToAppend = @"";
     1084        if (![self allDownloaded])
     1085        {
     1086            stringToAppend = [NSString stringWithFormat: NSLocalizedString(@"DL: %@, ", "Torrent -> status string"),
     1087                                [NSString stringForSpeed: [self downloadRate]]];
     1088            string = @"";
     1089        }
     1090        else
     1091        {
     1092            NSString * ratioString = [NSString stringForRatio: [self ratio]];
     1093       
     1094            string = [NSString stringWithFormat: NSLocalizedString(@"Ratio: %@, ", "Torrent -> status string"), ratioString];
     1095        }
     1096       
     1097        stringToAppend = [stringToAppend stringByAppendingString: [NSLocalizedString(@"UL: ", "Torrent -> status string")
     1098                                            stringByAppendingString: [NSString stringForSpeed: [self uploadRate]]]];
     1099
     1100        string = [string stringByAppendingString: stringToAppend];
     1101    }
     1102   
     1103    return string;
    10931104}
    10941105
    10951106- (NSString *) remainingTimeString
    10961107{
    1097     return fRemainingTimeString;
     1108    int eta, days;
     1109   
     1110    NSString * string = @"";
     1111    switch (fStat->status)
     1112    {
     1113        case TR_STATUS_CHECK_WAIT:
     1114            string = [NSLocalizedString(@"Waiting to check existing data", "Torrent -> status string") stringByAppendingEllipsis];
     1115           
     1116            break;
     1117
     1118        case TR_STATUS_CHECK:
     1119            string = [NSString stringWithFormat: NSLocalizedString(@"Checking existing data (%.2f%%)",
     1120                                    "Torrent -> status string"), 100.0 * fStat->recheckProgress];
     1121           
     1122            break;
     1123
     1124        case TR_STATUS_DOWNLOAD:
     1125           
     1126            eta = [self eta];
     1127            if (eta < 0)
     1128               string = NSLocalizedString(@"Unknown", "Torrent -> remaining time");
     1129            else
     1130            {
     1131                if (eta < 60)
     1132                    string = [NSString stringWithFormat: NSLocalizedString(@"%d sec", "Torrent -> remaining time"), eta];
     1133                else if (eta < 3600) //60 * 60
     1134                    string = [NSString stringWithFormat: NSLocalizedString(@"%d min %d sec", "Torrent -> remaining time"),
     1135                                                            eta / 60, eta % 60];
     1136                else if (eta < 86400) //24 * 60 * 60
     1137                    string = [NSString stringWithFormat: NSLocalizedString(@"%d hr %d min", "Torrent -> remaining time"),
     1138                                                            eta / 3600, (eta / 60) % 60];
     1139                else
     1140                {
     1141                                        days = eta / 86400;
     1142                    if (days > 1)
     1143                        string = [NSString stringWithFormat: NSLocalizedString(@"%d days %d hr", "Torrent -> remaining time"),
     1144                                                                days, (eta / 3600) % 24];
     1145                    else
     1146                        string = [NSString stringWithFormat: NSLocalizedString(@"1 day %d hr", "Torrent -> remaining time"),
     1147                                                                (eta / 3600) % 24];
     1148                }
     1149            }
     1150           
     1151            break;
     1152    }
     1153   
     1154    #warning merge
     1155    if ([self isActive] && ![self isChecking] && [self allDownloaded])
     1156        string = [NSLocalizedString(@"Ratio: ", "Torrent -> status string") stringByAppendingString:
     1157                                                                            [NSString stringForRatio: [self ratio]]];
     1158
     1159    return string;
    10981160}
    10991161
Note: See TracChangeset for help on using the changeset viewer.