adium 2187:37f08e4d8a29: Convert Twitter code over to using `uns...

commits at adium.im commits at adium.im
Thu May 14 23:57:38 UTC 2009


details:	http://hg.adium.im/adium/rev/37f08e4d8a29
revision:	2187:37f08e4d8a29
author:		Zachary West <zacw at adium.im>
date:		Thu May 14 19:57:10 2009 -0400

Convert Twitter code over to using `unsigned long long` instead of signed integers. Fixes #12025.

Twitter status IDs are getting close to rolling over the signed integer value. Super-future-proof this by going to unsigned 64-bit numbers.

diffstat:

 Frameworks/AIUtilities Framework/Source/AIStringAdditions.h |   2 +
 Frameworks/AIUtilities Framework/Source/AIStringAdditions.m |   5 +
 Plugins/Twitter Plugin/AITwitterAccount.m                   |  24 ++++----
 Plugins/Twitter Plugin/AITwitterReplyWindowController.m     |   3 +-
 Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.h    |  22 +++---
 Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.m    |  44 +++++++-------
 6 files changed, 54 insertions(+), 46 deletions(-)

diffs (370 lines):

diff -r 5ac76de478a0 -r 37f08e4d8a29 Frameworks/AIUtilities Framework/Source/AIStringAdditions.h
--- a/Frameworks/AIUtilities Framework/Source/AIStringAdditions.h	Thu May 14 16:35:53 2009 -0700
+++ b/Frameworks/AIUtilities Framework/Source/AIStringAdditions.h	Thu May 14 19:57:10 2009 -0400
@@ -127,4 +127,6 @@
 
 - (BOOL) isCaseInsensitivelyEqualToString:(NSString *)other;
 
+- (unsigned long long)unsignedLongLongValue;
+
 @end
diff -r 5ac76de478a0 -r 37f08e4d8a29 Frameworks/AIUtilities Framework/Source/AIStringAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIStringAdditions.m	Thu May 14 16:35:53 2009 -0700
+++ b/Frameworks/AIUtilities Framework/Source/AIStringAdditions.m	Thu May 14 19:57:10 2009 -0400
@@ -816,4 +816,9 @@
 	return [self caseInsensitiveCompare:other] == NSOrderedSame;
 }
 
+- (unsigned long long)unsignedLongLongValue
+{
+	return [[NSDecimalNumber decimalNumberWithString:self] unsignedLongLongValue];
+}
+
 @end
diff -r 5ac76de478a0 -r 37f08e4d8a29 Plugins/Twitter Plugin/AITwitterAccount.m
--- a/Plugins/Twitter Plugin/AITwitterAccount.m	Thu May 14 16:35:53 2009 -0700
+++ b/Plugins/Twitter Plugin/AITwitterAccount.m	Thu May 14 19:57:10 2009 -0400
@@ -210,7 +210,7 @@
 
 	}
 	
-	NSTimeInterval updateInterval = [[self preferenceForKey:TWITTER_PREFERENCE_UPDATE_INTERVAL group:TWITTER_PREFERENCE_GROUP_UPDATES] intValue] * 60;
+	NSTimeInterval updateInterval = [[self preferenceForKey:TWITTER_PREFERENCE_UPDATE_INTERVAL group:TWITTER_PREFERENCE_GROUP_UPDATES] integerValue] * 60;
 	
 	if(updateInterval > 0) {
 		[updateTimer invalidate];
@@ -429,7 +429,7 @@
 	NSString *requestID;
 	
 	if(inContentMessage.chat.isGroupChat) {
-		NSInteger replyID = [[inContentMessage.chat valueForProperty:@"TweetInReplyToStatusID"] integerValue];
+		NSInteger replyID = [[inContentMessage.chat valueForProperty:@"TweetInReplyToStatusID"] unsignedLongLongValue];
 		
 		requestID = [twitterEngine sendUpdate:inContentMessage.encodedMessage
 									inReplyTo:replyID];
@@ -1055,7 +1055,7 @@
 	
 	// Pull direct messages	
 	lastID = [[self preferenceForKey:TWITTER_PREFERENCE_DM_LAST_ID
-								group:TWITTER_PREFERENCE_GROUP_UPDATES] intValue];
+								group:TWITTER_PREFERENCE_GROUP_UPDATES] unsignedLongLongValue];
 	
 	requestID = [twitterEngine getDirectMessagesSinceID:lastID startingAtPage:1];
 	
@@ -1069,7 +1069,7 @@
 
 	// Pull followed timeline
 	lastID = [[self preferenceForKey:TWITTER_PREFERENCE_TIMELINE_LAST_ID
-								group:TWITTER_PREFERENCE_GROUP_UPDATES] intValue];
+								group:TWITTER_PREFERENCE_GROUP_UPDATES] unsignedLongLongValue];
 
 	requestID = [twitterEngine getFollowedTimelineFor:nil
 											  sinceID:lastID
@@ -1086,7 +1086,7 @@
 	
 	// Pull the replies feed	
 	lastID = [[self preferenceForKey:TWITTER_PREFERENCE_REPLIES_LAST_ID
-							   group:TWITTER_PREFERENCE_GROUP_UPDATES] intValue];
+							   group:TWITTER_PREFERENCE_GROUP_UPDATES] unsignedLongLongValue];
 	
 	requestID = [twitterEngine getRepliesSinceID:lastID startingAtPage:1];
 	
@@ -1192,7 +1192,7 @@
  */
 - (void)toggleFavoriteTweet:(NSString *)tweetID
 {
-	NSString *requestID = [twitterEngine markUpdate:[tweetID intValue] asFavorite:YES];
+	NSString *requestID = [twitterEngine markUpdate:[tweetID unsignedLongLongValue] asFavorite:YES];
 	
 	if (requestID) {
 		[self setRequestType:AITwitterFavoriteYes
@@ -1214,7 +1214,7 @@
  */
 - (void)destroyTweet:(NSString *)tweetID
 {
-	NSString *requestID = [twitterEngine deleteUpdate:[tweetID intValue]];
+	NSString *requestID = [twitterEngine deleteUpdate:[tweetID unsignedLongLongValue]];
 	
 	if(requestID) {
 		[self setRequestType:AITwitterDestroyStatus
@@ -1237,7 +1237,7 @@
 - (void)destroyDirectMessage:(NSString *)messageID
 					 forUser:(NSString *)userID
 {
-	NSString *requestID = [twitterEngine deleteDirectMessage:[messageID intValue]];
+	NSString *requestID = [twitterEngine deleteDirectMessage:[messageID unsignedLongLongValue]];
 	AIListContact *contact = [self contactWithUID:userID];
 	
 	if(requestID) {
@@ -1770,7 +1770,7 @@
 				BOOL addAsFavorite = ([self requestTypeForRequestID:identifier] == AITwitterFavoriteNo);
 				NSString *tweetID = [[self dictionaryForRequestID:identifier] objectForKey:@"tweetID"];
 				
-				NSString *requestID = [twitterEngine markUpdate:[tweetID intValue]
+				NSString *requestID = [twitterEngine markUpdate:[tweetID unsignedLongLongValue]
 													 asFavorite:addAsFavorite];
 				
 				if (requestID) {
@@ -1887,7 +1887,7 @@
 			
 			if ([self requestTypeForRequestID:identifier] == AITwitterUpdateFollowedTimeline) {
 				requestID = [twitterEngine getFollowedTimelineFor:nil
-														  sinceID:[lastID intValue]
+														  sinceID:[lastID unsignedLongLongValue]
 												   startingAtPage:nextPage
 															count:TWITTER_UPDATE_TIMELINE_COUNT];
 				
@@ -1906,7 +1906,7 @@
 				}
 				
 			} else if ([self requestTypeForRequestID:identifier] == AITwitterUpdateReplies) {
-				requestID = [twitterEngine getRepliesSinceID:[lastID intValue] startingAtPage:nextPage];
+				requestID = [twitterEngine getRepliesSinceID:[lastID unsignedLongLongValue] startingAtPage:nextPage];
 				
 				AILogWithSignature(@"%@ Pulling additional replies page %d", self, nextPage);
 				
@@ -2081,7 +2081,7 @@
 		if(nextPageNecessary) {
 			NSInteger	nextPage = [[[self dictionaryForRequestID:identifier] objectForKey:@"Page"] intValue] + 1;
 			
-			NSString	*requestID = [twitterEngine getDirectMessagesSinceID:[lastID intValue] 
+			NSString	*requestID = [twitterEngine getDirectMessagesSinceID:[lastID unsignedLongLongValue] 
 														      startingAtPage:nextPage];
 			
 			AILogWithSignature(@"%@ Pulling additional DM page %d", self, nextPage);
diff -r 5ac76de478a0 -r 37f08e4d8a29 Plugins/Twitter Plugin/AITwitterReplyWindowController.m
--- a/Plugins/Twitter Plugin/AITwitterReplyWindowController.m	Thu May 14 16:35:53 2009 -0700
+++ b/Plugins/Twitter Plugin/AITwitterReplyWindowController.m	Thu May 14 19:57:10 2009 -0400
@@ -19,6 +19,7 @@
 #import "AIURLHandlerPlugin.h"
 #import <Adium/AIAccount.h>
 #import <Adium/AIService.h>
+#import <AIUtilities/AIStringAdditions.h>
 
 @implementation AITwitterReplyWindowController
 
@@ -79,7 +80,7 @@
 - (IBAction)reply:(id)sender
 {
 	if (([textField_usernameOrTweetURL.stringValue rangeOfCharacterFromSet:[account.service.allowedCharacters invertedSet]].location != NSNotFound) ||
-		(![[NSString stringWithFormat:@"%d", [textField_statusID.stringValue intValue]] isEqualToString:textField_statusID.stringValue])) {
+		(![[NSString stringWithFormat:@"%qu", [textField_statusID.stringValue unsignedLongLongValue]] isEqualToString:textField_statusID.stringValue])) {
 		NSBeep();
 	} else if (textField_usernameOrTweetURL.stringValue && textField_statusID.stringValue) {
 
diff -r 5ac76de478a0 -r 37f08e4d8a29 Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.h
--- a/Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.h	Thu May 14 16:35:53 2009 -0700
+++ b/Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.h	Thu May 14 19:57:10 2009 -0400
@@ -92,22 +92,22 @@
 // Retrieving updates
 - (NSString *)getFollowedTimelineFor:(NSString *)username since:(NSDate *)date startingAtPage:(int)pageNum;
 - (NSString *)getFollowedTimelineFor:(NSString *)username since:(NSDate *)date startingAtPage:(int)pageNum count:(int)count;		// max 200
-- (NSString *)getFollowedTimelineFor:(NSString *)username sinceID:(int)updateID startingAtPage:(int)pageNum count:(int)count;		// max 200
+- (NSString *)getFollowedTimelineFor:(NSString *)username sinceID:(unsigned long long)updateID startingAtPage:(int)pageNum count:(int)count;		// max 200
 - (NSString *)getUserTimelineFor:(NSString *)username since:(NSDate *)date count:(int)numUpdates;									// max 200
 - (NSString *)getUserTimelineFor:(NSString *)username since:(NSDate *)date startingAtPage:(int)pageNum count:(int)numUpdates;		// max 200
-- (NSString *)getUserTimelineFor:(NSString *)username sinceID:(int)updateID startingAtPage:(int)pageNum count:(int)numUpdates;		// max 200
+- (NSString *)getUserTimelineFor:(NSString *)username sinceID:(unsigned long long)updateID startingAtPage:(int)pageNum count:(int)numUpdates;		// max 200
 - (NSString *)getUserUpdatesArchiveStartingAtPage:(int)pageNum;																		// 80 per page
-- (NSString *)getPublicTimelineSinceID:(int)updateID;
-- (NSString *)getRepliesSinceID:(int)updateID startingAtPage:(int)pageNum;
+- (NSString *)getPublicTimelineSinceID:(unsigned long long)updateID;
+- (NSString *)getRepliesSinceID:(unsigned long long)updateID startingAtPage:(int)pageNum;
 - (NSString *)getRepliesStartingAtPage:(int)pageNum;                                          // sent TO this user
 - (NSString *)getFavoriteUpdatesFor:(NSString *)username startingAtPage:(int)pageNum;
-- (NSString *)getUpdate:(int)updateID;
+- (NSString *)getUpdate:(unsigned long long)updateID;
 
 // Retrieving direct messages
 - (NSString *)getDirectMessagesSince:(NSDate *)date startingAtPage:(int)pageNum;              // sent TO this user
-- (NSString *)getDirectMessagesSinceID:(int)updateID startingAtPage:(int)pageNum;             // sent TO this user
+- (NSString *)getDirectMessagesSinceID:(unsigned long long)updateID startingAtPage:(int)pageNum;             // sent TO this user
 - (NSString *)getSentDirectMessagesSince:(NSDate *)date startingAtPage:(int)pageNum;          // sent BY this user
-- (NSString *)getSentDirectMessagesSinceID:(int)updateID startingAtPage:(int)pageNum;         // sent BY this user
+- (NSString *)getSentDirectMessagesSinceID:(unsigned long long)updateID startingAtPage:(int)pageNum;         // sent BY this user
 
 // Retrieving user information
 - (NSString *)getUserInformationFor:(NSString *)username;
@@ -125,13 +125,13 @@
 
 // Sending and editing updates
 - (NSString *)sendUpdate:(NSString *)status;
-- (NSString *)sendUpdate:(NSString *)status inReplyTo:(int)updateID;
-- (NSString *)deleteUpdate:(int)updateID;                 // this user must be the AUTHOR
-- (NSString *)markUpdate:(int)updateID asFavorite:(BOOL)flag;
+- (NSString *)sendUpdate:(NSString *)status inReplyTo:(unsigned long long)updateID;
+- (NSString *)deleteUpdate:(unsigned long long)updateID;                 // this user must be the AUTHOR
+- (NSString *)markUpdate:(unsigned long long)updateID asFavorite:(BOOL)flag;
 
 // Sending and editing direct messages
 - (NSString *)sendDirectMessage:(NSString *)message to:(NSString *)username;
-- (NSString *)deleteDirectMessage:(int)updateID;          // this user must be the RECIPIENT
+- (NSString *)deleteDirectMessage:(unsigned long long)updateID;          // this user must be the RECIPIENT
 
 // Adium OAuth additions
 @property (readwrite, nonatomic) BOOL useOAuth;
diff -r 5ac76de478a0 -r 37f08e4d8a29 Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.m
--- a/Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.m	Thu May 14 16:35:53 2009 -0700
+++ b/Plugins/Twitter Plugin/MGTwitterEngine/MGTwitterEngine.m	Thu May 14 19:57:10 2009 -0400
@@ -958,13 +958,13 @@
 }
 
 
-- (NSString *)getFollowedTimelineFor:(NSString *)username sinceID:(int)updateID startingAtPage:(int)pageNum count:(int)count
+- (NSString *)getFollowedTimelineFor:(NSString *)username sinceID:(unsigned long long)updateID startingAtPage:(int)pageNum count:(int)count
 {
 	NSString *path = @"statuses/friends_timeline.xml";
     
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"since_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"since_id"];
     }
     if (pageNum > 0) {
         [params setObject:[NSString stringWithFormat:@"%d", pageNum] forKey:@"page"];
@@ -1015,13 +1015,13 @@
 }
 
 
-- (NSString *)getUserTimelineFor:(NSString *)username sinceID:(int)updateID startingAtPage:(int)pageNum count:(int)numUpdates
+- (NSString *)getUserTimelineFor:(NSString *)username sinceID:(unsigned long long)updateID startingAtPage:(int)pageNum count:(int)numUpdates
 {
 	NSString *path = @"statuses/user_timeline.xml";
     
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"since_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"since_id"];
     }
 	if (pageNum > 0) {
         [params setObject:[NSString stringWithFormat:@"%d", pageNum] forKey:@"page"];
@@ -1054,13 +1054,13 @@
 }
 
 
-- (NSString *)getPublicTimelineSinceID:(int)updateID
+- (NSString *)getPublicTimelineSinceID:(unsigned long long)updateID
 {
     NSString *path = @"statuses/public_timeline.xml";
     
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"since_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"since_id"];
     }
     
     return [self _sendRequestWithMethod:nil path:path queryParameters:params body:nil 
@@ -1101,9 +1101,9 @@
 }
 
 
-- (NSString *)getUpdate:(int)updateID
+- (NSString *)getUpdate:(unsigned long long)updateID
 {
-    NSString *path = [NSString stringWithFormat:@"statuses/show/%d.xml", updateID];
+    NSString *path = [NSString stringWithFormat:@"statuses/show/%qu.xml", updateID];
     
     return [self _sendRequestWithMethod:nil path:path queryParameters:nil body:nil 
                             requestType:MGTwitterStatusesRequest 
@@ -1132,13 +1132,13 @@
 }
 
 
-- (NSString *)getDirectMessagesSinceID:(int)updateID startingAtPage:(int)pageNum
+- (NSString *)getDirectMessagesSinceID:(unsigned long long)updateID startingAtPage:(int)pageNum
 {
     NSString *path = @"direct_messages.xml";
     
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"since_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"since_id"];
     }
     if (pageNum > 0) {
         [params setObject:[NSString stringWithFormat:@"%d", pageNum] forKey:@"page"];
@@ -1168,13 +1168,13 @@
 }
 
 
-- (NSString *)getSentDirectMessagesSinceID:(int)updateID startingAtPage:(int)pageNum
+- (NSString *)getSentDirectMessagesSinceID:(unsigned long long)updateID startingAtPage:(int)pageNum
 {
     NSString *path = @"direct_messages/sent.xml";
     
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"since_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"since_id"];
     }
     if (pageNum > 0) {
         [params setObject:[NSString stringWithFormat:@"%d", pageNum] forKey:@"page"];
@@ -1270,7 +1270,7 @@
 }
 
 
-- (NSString *)sendUpdate:(NSString *)status inReplyTo:(int)updateID
+- (NSString *)sendUpdate:(NSString *)status inReplyTo:(unsigned long long)updateID
 {
     if (!status) {
         return nil;
@@ -1286,7 +1286,7 @@
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     [params setObject:trimmedText forKey:@"status"];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"in_reply_to_status_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"in_reply_to_status_id"];
     }
     NSString *body = [self _queryStringWithBase:nil parameters:params prefixed:NO];
     
@@ -1297,9 +1297,9 @@
 }
 
 
-- (NSString *)deleteUpdate:(int)updateID
+- (NSString *)deleteUpdate:(unsigned long long)updateID
 {
-    NSString *path = [NSString stringWithFormat:@"statuses/destroy/%d.xml", updateID];
+    NSString *path = [NSString stringWithFormat:@"statuses/destroy/%qu.xml", updateID];
     
     return [self _sendRequestWithMethod:HTTP_POST_METHOD path:path queryParameters:nil body:nil 
                             requestType:MGTwitterAccountRequest 
@@ -1307,9 +1307,9 @@
 }
 
 
-- (NSString *)markUpdate:(int)updateID asFavorite:(BOOL)flag
+- (NSString *)markUpdate:(unsigned long long)updateID asFavorite:(BOOL)flag
 {
-    NSString *path = [NSString stringWithFormat:@"favorites/%@/%d.xml", 
+    NSString *path = [NSString stringWithFormat:@"favorites/%@/%qu.xml", 
                       (flag) ? @"create" : @"destroy" ,
                       updateID];
     
@@ -1347,9 +1347,9 @@
 }
 
 
-- (NSString *)deleteDirectMessage:(int)updateID
+- (NSString *)deleteDirectMessage:(unsigned long long)updateID
 {
-    NSString *path = [NSString stringWithFormat:@"direct_messages/destroy/%d.xml", updateID];
+    NSString *path = [NSString stringWithFormat:@"direct_messages/destroy/%qu.xml", updateID];
     
     return [self _sendRequestWithMethod:HTTP_POST_METHOD path:path queryParameters:nil body:nil 
                             requestType:MGTwitterAccountRequest 
@@ -1373,13 +1373,13 @@
 }
 
 
-- (NSString *)getRepliesSinceID:(int)updateID startingAtPage:(int)pageNum
+- (NSString *)getRepliesSinceID:(unsigned long long)updateID startingAtPage:(int)pageNum
 {
 	NSString *path = @"statuses/replies.xml";
     
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
     if (updateID > 0) {
-        [params setObject:[NSString stringWithFormat:@"%d", updateID] forKey:@"since_id"];
+        [params setObject:[NSString stringWithFormat:@"%qu", updateID] forKey:@"since_id"];
     }
     if (pageNum > 0) {
         [params setObject:[NSString stringWithFormat:@"%d", pageNum] forKey:@"page"];




More information about the commits mailing list