Adium

Changeset 20757

Show
Ignore:
Timestamp:
08/24/2007 01:48:06 PM (1 year ago)
Author:
boredzo
Message:
  • Changed stringFromTimeInterval: implementation to use a mutable array and create the string by joining its elements.
  • Changed logic of non-approximate string-building to use the array, only adding each element if its associated number is not 0.
  • Changed seconds truth-tests to handle the floating-point number correctly (by comparing it to an epsilon value, which is currently 0.01). This was necessitated by r20756.

All tests now pass. Fixes #7713.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Frameworks/AIUtilities Framework/Source/AIDateFormatterAdditions.m

    r20756 r20757  
    199199+ (NSString *)stringForTimeInterval:(NSTimeInterval)interval showingSeconds:(BOOL)showSeconds abbreviated:(BOOL)abbreviate approximated:(BOOL)approximate 
    200200{ 
    201         NSString                *timeString = nil; 
    202201        NSTimeInterval  workInterval = interval; 
    203202    int                         weeks = 0, days = 0, hours = 0, minutes = 0; 
     
    247246         
    248247        //assemble the parts 
     248        NSMutableArray *parts = [NSMutableArray arrayWithCapacity:5]; 
    249249        if (approximate) { 
     250                //We want only one of these. For example, 5 weeks, 5 days, 5 hours, 5 minutes, and 5 seconds should just be “5 weeks”. 
    250251                if (weeks) 
    251                         timeString = weeksString
     252                        [parts addObject:weeksString]
    252253                else if (days) 
    253                         timeString = daysString
     254                        [parts addObject:daysString]
    254255                else if (hours) 
    255                         timeString = hoursString
     256                        [parts addObject:hoursString]
    256257                else if (minutes) 
    257                         timeString = minutesString
    258                 else if (seconds && showSeconds
    259                         timeString = secondsString
     258                        [parts addObject:minutesString]
     259                else if (showSeconds && (seconds >= 0.01)
     260                        [parts addObject:secondsString]
    260261        } else { 
     262                //We want all of these that aren't zero. 
    261263                if (weeks) 
    262                         timeString = [NSString stringWithFormat: @"%@ %@ %@ %@", weeksString, daysString, hoursString, minutesString]; 
    263                 else if (days) 
    264                         timeString = [NSString stringWithFormat: @"%@ %@ %@", daysString, hoursString, minutesString]; 
    265                 else if (hours) 
    266                         timeString = [NSString stringWithFormat: @"%@ %@ ", hoursString, minutesString]; 
    267                 else if (minutes) 
    268                         timeString = minutesString; 
    269                  
    270                 if (showSeconds) { 
    271                         if (timeString) 
    272                                 timeString = [timeString stringByAppendingFormat: @" %@", secondsString]; 
    273                         else if (seconds) 
    274                                 timeString = secondsString; 
    275                 } 
     264                        [parts addObject:weeksString]; 
     265                if (days) 
     266                        [parts addObject:daysString]; 
     267                if (hours) 
     268                        [parts addObject:hoursString]; 
     269                if (minutes) 
     270                        [parts addObject:minutesString]; 
     271                if (showSeconds && (seconds >= 0.01)) 
     272                        [parts addObject:secondsString]; 
    276273        } 
    277274 
    278         return timeString ? timeString : @""
     275        return [parts componentsJoinedByString:@" "]
    279276} 
    280277