Changeset 3512

Show
Ignore:
Timestamp:
12/31/06 15:08:41 (2 years ago)
Author:
timothy
Message:

Fixes the local time reported in Get Info when the client's reply includes the timezone offset. #888

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Chat Core.exp

    r3498 r3512  
    5353_MVChatUserPictureAttribute 
    5454_MVChatUserPingAttribute 
    55 _MVChatUserLocalTimeDifferenceAttribute 
     55_MVChatUserLocalTimeAttribute 
    5656_MVChatUserClientInfoAttribute 
    5757_MVChatUserVCardAttribute 
  • trunk/Chat Core/MVChatUser.h

    r3498 r3512  
    2121extern NSString *MVChatUserPictureAttribute; 
    2222extern NSString *MVChatUserPingAttribute; 
    23 extern NSString *MVChatUserLocalTimeDifferenceAttribute; 
     23extern NSString *MVChatUserLocalTimeAttribute; 
    2424extern NSString *MVChatUserClientInfoAttribute; 
    2525extern NSString *MVChatUserVCardAttribute; 
  • trunk/Chat Core/MVChatUser.m

    r3498 r3512  
    88NSString *MVChatUserPictureAttribute = @"MVChatUserPictureAttribute"; 
    99NSString *MVChatUserPingAttribute = @"MVChatUserPingAttribute"; 
    10 NSString *MVChatUserLocalTimeDifferenceAttribute = @"MVChatUserLocalTimeDifferenceAttribute"; 
     10NSString *MVChatUserLocalTimeAttribute = @"MVChatUserLocalTimeAttribute"; 
    1111NSString *MVChatUserClientInfoAttribute = @"MVChatUserClientInfoAttribute"; 
    1212NSString *MVChatUserVCardAttribute = @"MVChatUserVCardAttribute"; 
  • trunk/Chat Core/MVIRCChatUser.m

    r3420 r3512  
    3636 
    3737- (NSSet *) supportedAttributes { 
    38         return [NSSet setWithObjects:MVChatUserPingAttribute, MVChatUserKnownRoomsAttribute, MVChatUserLocalTimeDifferenceAttribute, MVChatUserClientInfoAttribute, nil]; 
     38        return [NSSet setWithObjects:MVChatUserPingAttribute, MVChatUserKnownRoomsAttribute, MVChatUserLocalTimeAttribute, MVChatUserClientInfoAttribute, nil]; 
    3939} 
    4040 
     
    9696                [self setAttribute:[NSDate date] forKey:@"MVChatUserPingSendDateAttribute"]; 
    9797                [self sendSubcodeRequest:@"PING" withArguments:nil]; 
    98         } else if( [key isEqualToString:MVChatUserLocalTimeDifferenceAttribute] ) { 
     98        } else if( [key isEqualToString:MVChatUserLocalTimeAttribute] ) { 
    9999                [self sendSubcodeRequest:@"TIME" withArguments:nil]; 
    100100        } else if( [key isEqualToString:MVChatUserClientInfoAttribute] ) { 
     
    120120        } else if( [command caseInsensitiveCompare:@"TIME"] == NSOrderedSame ) { 
    121121                NSString *date = [[NSString allocWithZone:nil] initWithData:arguments encoding:[[self connection] encoding]]; 
    122                 NSDate *localThere = [NSDate dateWithNaturalLanguageString:date]; 
    123                 if( localThere ) { 
    124                         NSTimeInterval diff = [localThere timeIntervalSinceDate:[NSDate date]]; 
    125                         [self setAttribute:[NSNumber numberWithDouble:diff] forKey:MVChatUserLocalTimeDifferenceAttribute]; 
    126                 } else [self setAttribute:nil forKey:MVChatUserLocalTimeDifferenceAttribute]; 
     122                NSCalendarDate *localThere = [NSCalendarDate dateWithNaturalLanguageString:date]; 
     123                [self setAttribute:localThere forKey:MVChatUserLocalTimeAttribute]; 
    127124                [date release]; 
    128125        } 
  • trunk/Chat Core/MVSILCChatUser.m

    r3420 r3512  
    100100 
    101101- (NSSet *) supportedAttributes { 
    102         return [NSSet setWithObjects:MVChatUserKnownRoomsAttribute, MVChatUserPictureAttribute, MVChatUserLocalTimeDifferenceAttribute, MVChatUserClientInfoAttribute, MVChatUserVCardAttribute, MVChatUserServiceAttribute, MVChatUserMoodAttribute, MVChatUserStatusMessageAttribute, MVChatUserPreferredLanguageAttribute, MVChatUserPreferredContactMethodsAttribute, MVChatUserTimezoneAttribute, MVChatUserGeoLocationAttribute, MVChatUserDeviceInfoAttribute, MVChatUserExtensionAttribute, MVChatUserPublicKeyAttribute, MVChatUserServerPublicKeyAttribute, MVChatUserDigitalSignatureAttribute, MVChatUserServerDigitalSignatureAttribute, nil]; 
     102        return [NSSet setWithObjects:MVChatUserKnownRoomsAttribute, MVChatUserPictureAttribute, MVChatUserLocalTimeAttribute, MVChatUserClientInfoAttribute, MVChatUserVCardAttribute, MVChatUserServiceAttribute, MVChatUserMoodAttribute, MVChatUserStatusMessageAttribute, MVChatUserPreferredLanguageAttribute, MVChatUserPreferredContactMethodsAttribute, MVChatUserTimezoneAttribute, MVChatUserGeoLocationAttribute, MVChatUserDeviceInfoAttribute, MVChatUserExtensionAttribute, MVChatUserPublicKeyAttribute, MVChatUserServerPublicKeyAttribute, MVChatUserDigitalSignatureAttribute, MVChatUserServerDigitalSignatureAttribute, nil]; 
    103103} 
    104104 
  • trunk/Inspectors/JVChatUserInspector.h

    r3404 r3512  
    3737        IBOutlet NSButton *requestInfo; 
    3838        MVChatUser *_user; 
     39        NSDate *_localTimeUpdated; 
    3940        NSTimer *_localTimeUpdateTimer; 
    4041        NSTimer *_updateTimer; 
  • trunk/Inspectors/JVChatUserInspector.m

    r3419 r3512  
    3838        [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    3939 
     40        [_localTimeUpdated release]; 
    4041        [_localTimeUpdateTimer release]; 
    4142        [_updateTimer release]; 
    4243        [_user release]; 
    4344 
     45        _localTimeUpdated = nil; 
    4446        _localTimeUpdateTimer = nil; 
    4547        _updateTimer = nil; 
     
    9294 
    9395- (void) didUnload { 
     96        [_localTimeUpdated release]; 
     97        _localTimeUpdated = nil; 
     98 
    9499        [_localTimeUpdateTimer invalidate]; 
    95100        [_localTimeUpdateTimer release]; 
     
    179184                [ping setObjectValue:pingString]; 
    180185                [ping setToolTip:pingString]; 
    181         } else if( [key isEqualToString:MVChatUserLocalTimeDifferenceAttribute] ) { 
     186        } else if( [key isEqualToString:MVChatUserLocalTimeAttribute] ) { 
     187                [_localTimeUpdated release]; 
     188                _localTimeUpdated = [[NSDate date] retain]; 
     189 
    182190                [self updateLocalTime]; 
    183191                if( ! _localTimeUpdateTimer ) 
     
    203211 
    204212- (void) updateLocalTime { 
     213        NSCalendarDate *current = [_user attributeForKey:MVChatUserLocalTimeAttribute]; 
     214        NSTimeInterval diff = ABS( [_localTimeUpdated timeIntervalSinceNow] ); 
     215 
     216        NSCalendarDate *adjusted = [[NSCalendarDate alloc] initWithTimeInterval:diff sinceDate:current]; 
    205217        NSString *format = [[NSUserDefaults standardUserDefaults] objectForKey:NSShortTimeDateFormatString]; 
    206         NSDate *current = [[NSDate dateWithTimeIntervalSinceNow:[[_user attributeForKey:MVChatUserLocalTimeDifferenceAttribute] doubleValue]] dateWithCalendarFormat:format timeZone:nil]; 
    207         [localTime setObjectValue:current]; 
    208         [localTime setToolTip:[current description]]; 
     218        NSCalendarDate *formatedDate = [adjusted dateWithCalendarFormat:format timeZone:[current timeZone]]; 
     219        [adjusted release]; 
     220 
     221        [localTime setObjectValue:formatedDate]; 
     222        [localTime setToolTip:[formatedDate description]]; 
    209223} 
    210224 
     
    214228 
    215229- (IBAction) requestLocalTime:(id) sender { 
    216         [_user refreshAttributeForKey:MVChatUserLocalTimeDifferenceAttribute]; 
     230        [_user refreshAttributeForKey:MVChatUserLocalTimeAttribute]; 
    217231} 
    218232