diff --git a/AccessToken.h b/AccessToken.h new file mode 100644 index 0000000..5fbeac6 --- /dev/null +++ b/AccessToken.h @@ -0,0 +1,24 @@ +// +// AccessToken.h +// Twittia 2 +// +// Created by Jeena Paradies on 19/09/2011. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + + + +@interface AccessToken : NSObject { + NSUserDefaults *d; +} + +- (void)setAccessToken:(NSString *)_accessToken; +- (NSString *)accessToken; +- (void)setSecret:(NSString *)_secret; +- (NSString *)secret; +- (void)setUserId:(NSString *)_userId; +- (NSString *)userId; +- (void)setScreenName:(NSString *)_screenName; +- (NSString *)screenName; + +@end \ No newline at end of file diff --git a/AccessToken.m b/AccessToken.m new file mode 100644 index 0000000..20c5e8c --- /dev/null +++ b/AccessToken.m @@ -0,0 +1,69 @@ +// +// AccessToken.m +// Twittia 2 +// +// Created by Jeena Paradies on 19/09/2011. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import "AccessToken.h" + +@implementation AccessToken + +- (id)init +{ + self = [super init]; + if (self) { + // Initialization code here. + d = [NSUserDefaults standardUserDefaults]; + } + + return self; +} + +- (void)setAccessToken:(NSString *)_accessToken +{ + [d setObject:_accessToken forKey:@"accessToken"]; + [d synchronize]; +} + +- (NSString *)accessToken +{ + return [d objectForKey:@"accessToken"]; +} + +- (void)setSecret:(NSString *)_secret +{ + [d setObject:_secret forKey:@"secret"]; + [d synchronize]; +} + +- (NSString *)secret +{ + return [d objectForKey:@"secret"]; +} + +- (void)setUserId:(NSString *)_userId +{ + [d setObject:_userId forKey:@"userId"]; + [d synchronize]; +} + +- (NSString *)userId +{ + return [d objectForKey:@"userId"]; +} + +- (void)setScreenName:(NSString *)_screenName +{ + [d setObject:_screenName forKey:@"screenName"]; + [d synchronize]; +} + +- (NSString *)screenName +{ + return [d objectForKey:@"screenName"]; +} + + +@end diff --git a/Constants.js b/Constants.js new file mode 100644 index 0000000..946d2e3 --- /dev/null +++ b/Constants.js @@ -0,0 +1,17 @@ +// +// TwittiaOauth.js +// Twittia 2 +// +// Created by Jeena on 19.09.11. +// Licence: BSD (see attached LICENCE.txt file). +// + + +OAUTH_CONSUMER_KEY = "JPmU8KJhiBKfpohCiWLg" +OAUTH_CONSUMER_SECRET = "jtfSrnDrRcUnL1nqTMcAW0055m63EMClmkxhiBjQ" +OAUTH_SIGNATURE_METHOD = "HMAC-SHA1" +OAUTH_REQUEST_TOKEN_URL = "http://twitter.com/oauth/request_token" +OAUTH_USER_AUTHORIZATION_URL = "http://twitter.com/oauth/authorize" +OAUTH_ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token" +OAUTH_SERVICE_NAME = "twitter.com" +APP_NAME = "Twittia"; \ No newline at end of file diff --git a/Controller.h b/Controller.h index 8aa8816..4235a63 100644 --- a/Controller.h +++ b/Controller.h @@ -11,7 +11,7 @@ #import "ViewDelegate.h" #import #import "Constants.h" -#import "OAuth.h" +#import "AccessToken.h" @interface Controller : NSObject { @@ -22,7 +22,8 @@ IBOutlet NSMenuItem *globalHotkeyMenuItem; IBOutlet NSImageView *logoLayer; ViewDelegate *viewDelegate; - OAuth *oauth; + WebView *twittiaOauthView; + AccessToken *accessToken; } @property (retain, nonatomic) IBOutlet WebView *timelineView; @@ -32,8 +33,10 @@ @property (retain, nonatomic) IBOutlet NSMenuItem *globalHotkeyMenuItem; @property (retain, nonatomic) IBOutlet NSImageView *logoLayer; @property (retain, nonatomic) IBOutlet ViewDelegate *viewDelegate; -@property (retain, nonatomic) IBOutlet OAuth *oauth; +@property (retain, nonatomic) WebView *twittiaOauthView; +@property (retain, nonatomic) AccessToken *accessToken; +- (void)initOauth; - (void)authentificationSucceded:(id)sender; - (void)initWebViews; - (void)initHotKeys; @@ -42,6 +45,7 @@ - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent; - (void)unreadMentions:(NSInteger)count; - (void)openURL:(NSString *)url; +- (void)storeAccessToken:(NSString *)accessToken secret:(NSString *)secret userId:(NSString *)userId andScreenName:(NSString *)screenName; OSStatus handler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); diff --git a/Controller.m b/Controller.m index 9d3c052..312d956 100644 --- a/Controller.m +++ b/Controller.m @@ -13,7 +13,9 @@ @implementation Controller -@synthesize timelineView, timelineViewWindow, mentionsView, mentionsViewWindow, globalHotkeyMenuItem, viewDelegate, oauth, logoLayer; +@synthesize timelineView, timelineViewWindow, mentionsView, mentionsViewWindow, globalHotkeyMenuItem, viewDelegate; +@synthesize logoLayer; +@synthesize twittiaOauthView, accessToken; - (void)awakeFromNib { @@ -43,9 +45,32 @@ forEventClass:kInternetEventClass andEventID:kAEGetURL]; - if ([oauth accessToken]) { - [self initWebViews]; - } + viewDelegate = [[ViewDelegate alloc] init]; + + + accessToken = [[AccessToken alloc] init]; + NSLog(@"%@", accessToken.accessToken); + accessToken.accessToken = nil; + if (!accessToken.accessToken) { + [self initOauth]; + } else { + [self initWebViews]; + } +} + +- (void)initOauth { + NSString *path = [[NSBundle mainBundle] resourcePath]; + NSURL *url = [NSURL fileURLWithPath:path]; + NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/index_oauth.html", path] encoding:NSUTF8StringEncoding error:nil]; + + + twittiaOauthView = [[WebView alloc] init]; + viewDelegate.twittiaOauthView = twittiaOauthView; + [[twittiaOauthView mainFrame] loadHTMLString:index_string baseURL:url]; + [twittiaOauthView setFrameLoadDelegate:viewDelegate]; + [twittiaOauthView setPolicyDelegate:viewDelegate]; + [twittiaOauthView setUIDelegate:viewDelegate]; + [[twittiaOauthView windowScriptObject] setValue:self forKey:@"controller"]; } - (void)initHotKeys { @@ -107,8 +132,6 @@ NSString *path = [[NSBundle mainBundle] resourcePath]; NSURL *url = [NSURL fileURLWithPath:path]; NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/index.html", path] encoding:NSUTF8StringEncoding error:nil]; - - viewDelegate = [[ViewDelegate alloc] init]; viewDelegate.timelineView = timelineView; [[timelineView mainFrame] loadHTMLString:index_string baseURL:url]; @@ -155,7 +178,7 @@ NSRange range = [aString rangeOfString:@"oauth_token"]; if (range.length > 0) { - [oauth requestAccessToken]; + [twittiaOauthView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"twittia_oauth.requestAccessToken('%@')", aString]]; } else { MyDocument *newTweet = (MyDocument *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; [newTweet withString:aString]; @@ -170,7 +193,6 @@ - (IBAction)sendTweet:(id)sender { TweetModel *tweet = (TweetModel *)[sender object]; - //[oauth updateTweet:tweet.text inReplaToStatus:tweet.inReplyTostatusId]; NSString *func = [NSString stringWithFormat:@"twittia_instance.sendNewTweet(\"%@\", \"%@\")", [tweet.text stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""], tweet.inReplyTostatusId]; [timelineView stringByEvaluatingJavaScriptFromString:func]; } @@ -199,6 +221,18 @@ [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; } +- (void)storeAccessToken:(NSString *)_accessToken secret:(NSString *)secret userId:(NSString *)userId andScreenName:(NSString *)screenName +{ + self.accessToken.accessToken = _accessToken; + self.accessToken.secret = secret; + self.accessToken.userId = userId; + self.accessToken.screenName = screenName; + + [timelineViewWindow makeKeyAndOrderFront:self]; + + [[NSNotificationCenter defaultCenter] postNotificationName:@"authentificationSucceded" object:nil]; +} + // Mentions window has been visible - (void)windowDidBecomeKey:(NSNotification *)notification { if ([notification object] == mentionsViewWindow) { diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 8fad43b..3fe2d8f 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -2,10 +2,10 @@ 1050 - 10J567 - 823 - 1038.35 - 462.00 + 11C43 + 1617 + 1138.17 + 567.00 YES @@ -15,15 +15,20 @@ YES - 823 - 823 + 1617 + 518 - + YES - - - + NSView + NSMenu + NSWindowTemplate + NSMenuItem + WebView + NSImageCell + NSImageView + NSCustomObject YES @@ -31,8 +36,11 @@ com.apple.WebKitIBPlugin - PluginDependencyRecalculationVersion - + YES + + YES + + YES @@ -775,7 +783,7 @@ Twittia NSWindow - {1.79769e+308, 1.79769e+308} + 256 @@ -807,6 +815,7 @@ {397, 581} + @@ -814,12 +823,8 @@ 13 YES - - YES - - - YES - + + NO @@ -842,6 +847,7 @@ {{17, 17}, {363, 547}} + YES 67239424 @@ -865,10 +871,12 @@ {397, 581} + {{0, 0}, {1920, 1178}} - {1.79769e+308, 1.79769e+308} + {10000000000000, 10000000000000} twittia + YES SUUpdater @@ -881,9 +889,9 @@ Mentions NSWindow - {1.79769e+308, 1.79769e+308} + - + 256 YES @@ -921,9 +929,7 @@ YES - - YES - + NO @@ -931,14 +937,11 @@ {376, 581} - {{0, 0}, {1920, 1178}} - {1.79769e+308, 1.79769e+308} + {10000000000000, 10000000000000} mentions - - - OAuth + YES @@ -1376,14 +1379,6 @@ 589 - - - oauth - - - - 591 - @@ -2041,136 +2036,68 @@ - - 590 - - - YES YES + -1.IBPluginDependency + -2.IBPluginDependency -3.IBPluginDependency 130.IBPluginDependency - 130.ImportedFromIB2 - 130.editorWindowContentRectSynchronizationRect 131.IBPluginDependency - 131.ImportedFromIB2 134.IBPluginDependency - 134.ImportedFromIB2 136.IBPluginDependency - 136.ImportedFromIB2 144.IBPluginDependency - 144.ImportedFromIB2 145.IBPluginDependency - 145.ImportedFromIB2 149.IBPluginDependency - 149.ImportedFromIB2 150.IBPluginDependency - 150.ImportedFromIB2 19.IBPluginDependency - 19.ImportedFromIB2 195.IBPluginDependency - 195.ImportedFromIB2 196.IBPluginDependency - 196.ImportedFromIB2 197.IBPluginDependency - 197.ImportedFromIB2 198.IBPluginDependency - 198.ImportedFromIB2 199.IBPluginDependency - 199.ImportedFromIB2 - 200.IBEditorWindowLastContentRect 200.IBPluginDependency - 200.ImportedFromIB2 - 200.editorWindowContentRectSynchronizationRect 201.IBPluginDependency - 201.ImportedFromIB2 202.IBPluginDependency - 202.ImportedFromIB2 203.IBPluginDependency - 203.ImportedFromIB2 204.IBPluginDependency - 204.ImportedFromIB2 - 205.IBEditorWindowLastContentRect 205.IBPluginDependency - 205.ImportedFromIB2 - 205.editorWindowContentRectSynchronizationRect 206.IBPluginDependency - 206.ImportedFromIB2 207.IBPluginDependency - 207.ImportedFromIB2 208.IBPluginDependency - 208.ImportedFromIB2 209.IBPluginDependency - 209.ImportedFromIB2 210.IBPluginDependency - 210.ImportedFromIB2 211.IBPluginDependency - 211.ImportedFromIB2 - 212.IBEditorWindowLastContentRect 212.IBPluginDependency - 212.ImportedFromIB2 - 212.editorWindowContentRectSynchronizationRect 213.IBPluginDependency - 213.ImportedFromIB2 214.IBPluginDependency - 214.ImportedFromIB2 215.IBPluginDependency - 215.ImportedFromIB2 216.IBPluginDependency - 216.ImportedFromIB2 217.IBPluginDependency - 217.ImportedFromIB2 218.IBPluginDependency - 218.ImportedFromIB2 219.IBPluginDependency - 219.ImportedFromIB2 - 220.IBEditorWindowLastContentRect 220.IBPluginDependency - 220.ImportedFromIB2 - 220.editorWindowContentRectSynchronizationRect 221.IBPluginDependency - 221.ImportedFromIB2 23.IBPluginDependency - 23.ImportedFromIB2 236.IBPluginDependency - 236.ImportedFromIB2 239.IBPluginDependency - 239.ImportedFromIB2 - 24.IBEditorWindowLastContentRect 24.IBPluginDependency - 24.ImportedFromIB2 - 24.editorWindowContentRectSynchronizationRect - 29.IBEditorWindowLastContentRect 29.IBPluginDependency - 29.ImportedFromIB2 - 29.WindowOrigin - 29.editorWindowContentRectSynchronizationRect 295.IBPluginDependency - 296.IBEditorWindowLastContentRect 296.IBPluginDependency - 296.editorWindowContentRectSynchronizationRect 297.IBPluginDependency 298.IBPluginDependency 346.IBPluginDependency - 346.ImportedFromIB2 348.IBPluginDependency - 348.ImportedFromIB2 - 349.IBEditorWindowLastContentRect 349.IBPluginDependency - 349.ImportedFromIB2 - 349.editorWindowContentRectSynchronizationRect 350.IBPluginDependency - 350.ImportedFromIB2 351.IBPluginDependency - 351.ImportedFromIB2 354.IBPluginDependency - 354.ImportedFromIB2 + 419.IBPluginDependency 449.IBPluginDependency - 450.IBEditorWindowLastContentRect 450.IBPluginDependency 451.IBPluginDependency 452.IBPluginDependency @@ -2183,175 +2110,92 @@ 465.IBPluginDependency 470.IBPluginDependency 491.IBPluginDependency - 492.IBEditorWindowLastContentRect 492.IBPluginDependency 493.IBPluginDependency 5.IBPluginDependency - 5.ImportedFromIB2 - 535.IBEditorWindowLastContentRect + 533.IBPluginDependency 535.IBPluginDependency 535.IBWindowTemplateEditedContentRect 535.NSWindowTemplate.visibleAtLaunch 536.IBPluginDependency 537.IBPluginDependency + 541.IBPluginDependency 542.IBPluginDependency 544.IBPluginDependency 551.IBPluginDependency - 559.IBEditorWindowLastContentRect 559.IBPluginDependency 559.IBWindowTemplateEditedContentRect 559.NSWindowTemplate.visibleAtLaunch 56.IBPluginDependency - 56.ImportedFromIB2 560.IBPluginDependency 561.IBPluginDependency - 57.IBEditorWindowLastContentRect 57.IBPluginDependency - 57.ImportedFromIB2 - 57.editorWindowContentRectSynchronizationRect 58.IBPluginDependency - 58.ImportedFromIB2 - 587.IBEditorWindowLastContentRect 587.IBPluginDependency 588.IBPluginDependency 72.IBPluginDependency - 72.ImportedFromIB2 73.IBPluginDependency - 73.ImportedFromIB2 79.IBPluginDependency - 79.ImportedFromIB2 - 81.IBEditorWindowLastContentRect 81.IBPluginDependency - 81.ImportedFromIB2 - 81.editorWindowContentRectSynchronizationRect 82.IBPluginDependency - 82.ImportedFromIB2 83.IBPluginDependency - 83.ImportedFromIB2 92.IBPluginDependency - 92.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - {{436, 809}, {64, 6}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{656, 201}, {275, 113}} com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {275, 83}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{813, 671}, {254, 283}} com.apple.InterfaceBuilder.CocoaPlugin - - {{197, 734}, {243, 243}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{656, 211}, {164, 43}} com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {167, 43}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{642, 251}, {238, 103}} com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {241, 103}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{907, 881}, {194, 73}} com.apple.InterfaceBuilder.CocoaPlugin - - {{525, 802}, {197, 73}} - {{371, 736}, {349, 20}} com.apple.InterfaceBuilder.CocoaPlugin - - {74, 862} - {{11, 977}, {478, 20}} com.apple.InterfaceBuilder.CocoaPlugin - {{360, 488}, {231, 43}} com.apple.InterfaceBuilder.CocoaPlugin - {{475, 832}, {234, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{642, 181}, {220, 133}} com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {215, 63}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{786, 257}, {170, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2364,12 +2208,13 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{547, 508}, {153, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - {{202, 175}, {397, 581}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{202, 175}, {397, 581}} @@ -2378,55 +2223,36 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{344, 175}, {376, 581}} + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{344, 175}, {376, 581}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.WebKitIBPlugin - {{1089, 312}, {229, 173}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{23, 794}, {245, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{21, 1074}, {48, 48}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{452, 623}, {181, 113}} com.apple.InterfaceBuilder.CocoaPlugin - - {{155, 774}, {199, 203}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin YES - - YES - + YES - - YES - + 591 @@ -2437,17 +2263,6 @@ Controller NSObject - - authentificationSucceded: - id - - - authentificationSucceded: - - authentificationSucceded: - id - - YES @@ -2456,7 +2271,6 @@ logoLayer mentionsView mentionsViewWindow - oauth timelineView timelineViewWindow viewDelegate @@ -2467,7 +2281,6 @@ NSImageView WebView NSWindow - OAuth WebView NSWindow ViewDelegate @@ -2481,7 +2294,6 @@ logoLayer mentionsView mentionsViewWindow - oauth timelineView timelineViewWindow viewDelegate @@ -2504,10 +2316,6 @@ mentionsViewWindow NSWindow - - oauth - OAuth - timelineView WebView @@ -2524,15 +2332,37 @@ IBProjectSource - Controller.h + ./Classes/Controller.h - OAuth + SUUpdater NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + delegate + id + + + delegate + + delegate + id + + IBProjectSource - OAuth.h + ./Classes/SUUpdater.h @@ -2540,775 +2370,25 @@ NSObject IBProjectSource - ViewDelegate.h + ./Classes/ViewDelegate.h - - - YES - - NSObject - - IBDocumentRelativeSource - ../Sparkle.framework/Versions/A/Headers/SUAppcast.h - - - - NSObject - - IBDocumentRelativeSource - ../Sparkle.framework/Versions/A/Headers/SUUpdater.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - - - - YES - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSUserInterfaceItemSearching.h - - - - NSBrowser - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSBrowser.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSDocumentController - NSObject - - YES - - YES - clearRecentDocuments: - newDocument: - openDocument: - saveAllDocuments: - - - YES - id - id - id - id - - - - YES - - YES - clearRecentDocuments: - newDocument: - openDocument: - saveAllDocuments: - - - YES - - clearRecentDocuments: - id - - - newDocument: - id - - - openDocument: - id - - - saveAllDocuments: - id - - - - - IBFrameworkSource - AppKit.framework/Headers/NSDocumentController.h - - - - NSFontManager - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSImageCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSImageCell.h - - - - NSImageView - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSImageView.h - - - - NSMatrix - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSMatrix.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMovieView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSMovieView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDictionaryController.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObjectScripting.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPortCoder.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptObjectSpecifiers.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptWhoseTests.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLDownload.h - - - - NSObject - - IBFrameworkSource - Print.framework/Headers/PDEPluginInterface.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUAppcast.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUpdater.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebDownload.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebEditingDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebFrameLoadDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebJavaPlugIn.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPlugin.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPluginContainer.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPolicyDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebResourceLoadDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebScriptObject.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebUIDelegate.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSTableView - NSControl - - - - NSText - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSText.h - - - - NSTextView - NSText - - IBFrameworkSource - AppKit.framework/Headers/NSTextView.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - WebView - NSView - YES - - YES - goBack: - goForward: - makeTextLarger: - makeTextSmaller: - makeTextStandardSize: - reload: - stopLoading: - takeStringURLFrom: - toggleContinuousSpellChecking: - toggleSmartInsertDelete: - - - YES - id - id - id - id - id - id - id - id - id - id - + reloadFromOrigin: + id - YES - - YES - goBack: - goForward: - makeTextLarger: - makeTextSmaller: - makeTextStandardSize: - reload: - stopLoading: - takeStringURLFrom: - toggleContinuousSpellChecking: - toggleSmartInsertDelete: - - - YES - - goBack: - id - - - goForward: - id - - - makeTextLarger: - id - - - makeTextSmaller: - id - - - makeTextStandardSize: - id - - - reload: - id - - - stopLoading: - id - - - takeStringURLFrom: - id - - - toggleContinuousSpellChecking: - id - - - toggleSmartInsertDelete: - id - + reloadFromOrigin: + + reloadFromOrigin: + id - IBFrameworkSource - WebKit.framework/Headers/WebView.h + IBProjectSource + ./Classes/WebView.h @@ -3324,7 +2404,6 @@ YES - ../Twittia 2.xcodeproj 3 YES @@ -3336,7 +2415,7 @@ YES - {128, 128} + {512, 512} {9, 8} {7, 2} diff --git a/Twittia 2.xcodeproj/project.pbxproj b/Twittia 2.xcodeproj/project.pbxproj index f0e2937..cc65a92 100644 --- a/Twittia 2.xcodeproj/project.pbxproj +++ b/Twittia 2.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 45; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -14,9 +14,6 @@ 1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1FE2FCA6117A8952000504B0 /* dsa_pub.pem */; }; 1F3642EF118C8C35008198EF /* oauth.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F3642ED118C8C35008198EF /* oauth.js */; }; 1F3642F0118C8C35008198EF /* sha1.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F3642EE118C8C35008198EF /* sha1.js */; }; - 1F364398118CBC77008198EF /* OAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F364397118CBC77008198EF /* OAuth.m */; }; - 1F36440F118CC173008198EF /* OAuthConsumer.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1F36440E118CC173008198EF /* OAuthConsumer.framework */; }; - 1F36465E118DA5A7008198EF /* OAToken+WebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F36465D118DA5A7008198EF /* OAToken+WebView.m */; }; 1F4673FE1180F7EA006CC37C /* TwittiaCore.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F4673E61180F654006CC37C /* TwittiaCore.js */; }; 1F4674081180F7EE006CC37C /* jQuery.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F4673E21180F519006CC37C /* jQuery.js */; }; 1F4674091180F7F3006CC37C /* jQuery-Plugins.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F4673E41180F590006CC37C /* jQuery-Plugins.js */; }; @@ -25,7 +22,10 @@ 1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F70619E1178FBB300C85707 /* Carbon.framework */; }; 1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F77DB46118C5F1C007C7F1E /* Constants.m */; }; 1F98DC9E124BFFD7004289ED /* pin.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F98DC9D124BFFD7004289ED /* pin.png */; }; - 1FB074DD118DDAB60013A93C /* OAuthConsumer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F36440E118CC173008198EF /* OAuthConsumer.framework */; }; + 1FC254941427BC050035D84B /* index_oauth.html in Resources */ = {isa = PBXBuildFile; fileRef = 1FC254931427BC050035D84B /* index_oauth.html */; }; + 1FC254951427BF150035D84B /* TwittiaOauth.js in Resources */ = {isa = PBXBuildFile; fileRef = 1FC254911427ADF90035D84B /* TwittiaOauth.js */; }; + 1FC2549F1427DC7F0035D84B /* Constants.js in Resources */ = {isa = PBXBuildFile; fileRef = 1FC2549D1427DC2B0035D84B /* Constants.js */; }; + 1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC2549B1427D9930035D84B /* AccessToken.m */; }; 1FE2FC93117A818D000504B0 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE2FC92117A818D000504B0 /* Sparkle.framework */; }; 1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1FE2FC92117A818D000504B0 /* Sparkle.framework */; }; 1FFA36CD1177D861006C8562 /* even-bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 1FFA36C81177D861006C8562 /* even-bg.png */; }; @@ -49,7 +49,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 1F36440F118CC173008198EF /* OAuthConsumer.framework in CopyFiles */, 1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -84,6 +83,11 @@ 1F77DB45118C5F1C007C7F1E /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; 1F77DB46118C5F1C007C7F1E /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = ""; }; 1F98DC9D124BFFD7004289ED /* pin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pin.png; sourceTree = ""; }; + 1FC254911427ADF90035D84B /* TwittiaOauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwittiaOauth.js; sourceTree = ""; }; + 1FC254931427BC050035D84B /* index_oauth.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index_oauth.html; sourceTree = ""; }; + 1FC2549A1427D9930035D84B /* AccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessToken.h; sourceTree = ""; }; + 1FC2549B1427D9930035D84B /* AccessToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccessToken.m; sourceTree = ""; }; + 1FC2549D1427DC2B0035D84B /* Constants.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Constants.js; sourceTree = ""; }; 1FE2FC92117A818D000504B0 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; 1FE2FCA6117A8952000504B0 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; 1FFA36C81177D861006C8562 /* even-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "even-bg.png"; sourceTree = ""; }; @@ -111,7 +115,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1FB074DD118DDAB60013A93C /* OAuthConsumer.framework in Frameworks */, 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */, 1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */, 1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */, @@ -160,10 +163,13 @@ 1F3642ED118C8C35008198EF /* oauth.js */, 1F3642EE118C8C35008198EF /* sha1.js */, 1F4673E61180F654006CC37C /* TwittiaCore.js */, + 1FC254911427ADF90035D84B /* TwittiaOauth.js */, + 1FC2549D1427DC2B0035D84B /* Constants.js */, 1FFA36C81177D861006C8562 /* even-bg.png */, 1F98DC9D124BFFD7004289ED /* pin.png */, 1F705EA5117889FA00C85707 /* sprite-icons.png */, 1FFA36C91177D861006C8562 /* index.html */, + 1FC254931427BC050035D84B /* index_oauth.html */, 1FFA36CA1177D861006C8562 /* odd-bg.png */, 1FFA36CB1177D861006C8562 /* default.css */, 1F4673E21180F519006CC37C /* jQuery.js */, @@ -201,6 +207,8 @@ 1F36465D118DA5A7008198EF /* OAToken+WebView.m */, 1F618EC812DB5E6100E500D9 /* TweetModel.h */, 1F618EC912DB5E6100E500D9 /* TweetModel.m */, + 1FC2549A1427D9930035D84B /* AccessToken.h */, + 1FC2549B1427D9930035D84B /* AccessToken.m */, ); name = Classes; sourceTree = ""; @@ -268,8 +276,11 @@ /* Begin PBXProject section */ 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "Twittia 2" */; - compatibilityVersion = "Xcode 3.1"; + compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( @@ -292,6 +303,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1FC2549F1427DC7F0035D84B /* Constants.js in Resources */, + 1FC254951427BF150035D84B /* TwittiaOauth.js in Resources */, 1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */, 1F3642EF118C8C35008198EF /* oauth.js in Resources */, 1F3642F0118C8C35008198EF /* sha1.js in Resources */, @@ -309,6 +322,7 @@ 1F705EA6117889FA00C85707 /* sprite-icons.png in Resources */, 1F122D49118E1DE100E83B77 /* Icon.icns in Resources */, 1F98DC9E124BFFD7004289ED /* pin.png in Resources */, + 1FC254941427BC050035D84B /* index_oauth.html in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -319,13 +333,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */, 8D15AC310486D014006FF6A4 /* MyDocument.m in Sources */, 8D15AC320486D014006FF6A4 /* main.m in Sources */, 1FFA36D71177D879006C8562 /* Controller.m in Sources */, 1FFA36D81177D879006C8562 /* ViewDelegate.m in Sources */, 1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */, - 1F364398118CBC77008198EF /* OAuth.m in Sources */, - 1F36465E118DA5A7008198EF /* OAToken+WebView.m in Sources */, 1F618ECA12DB5E6100E500D9 /* TweetModel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -380,7 +393,6 @@ "\"$(SRCROOT)/../oauth-obj-c/OAuthConsumer/build/Release\"", ); GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -424,7 +436,6 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; - PREBINDING = NO; SDKROOT = macosx; }; name = Debug; @@ -437,7 +448,6 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - PREBINDING = NO; SDKROOT = macosx; }; name = Release; diff --git a/TwittiaCore.js b/TwittiaCore.js index 0d5e00c..1fe060a 100644 --- a/TwittiaCore.js +++ b/TwittiaCore.js @@ -10,16 +10,6 @@ API_PATH = "http://api.twitter.com/1/"; WEBSITE_PATH = "http://twitter.com/"; //API_PATH = "http://identi.ca/api/"; -OAUTH_CONSUMER_KEY = "JPmU8KJhiBKfpohCiWLg" -OAUTH_CONSUMER_SECRET = "jtfSrnDrRcUnL1nqTMcAW0055m63EMClmkxhiBjQ" -OAUTH_SIGNATURE_METHOD = "HMAC-SHA1" -OAUTH_REQUEST_TOKEN_URL = "http://twitter.com/oauth/request_token" -OAUTH_USER_AUTHORIZATION_URL = "http://twitter.com/oauth/authorize" -OAUTH_ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token" -OAUTH_SERVICE_NAME = "twitter.com" - -APP_NAME = "Twittia" - function Twittia(action) { this.max_length = 100; this.since_id; @@ -274,10 +264,10 @@ Twittia.prototype.getNewData = function(supress_new_with_timeout) { var message = { method:"GET" , action:url, parameters: parameters }; OAuth.completeRequest(message, - { consumerKey : controller.oauth.consumerToken.key - , consumerSecret: controller.oauth.consumerToken.secret - , token : controller.oauth.accessToken.key - , tokenSecret : controller.oauth.accessToken.secret + { consumerKey : OAUTH_CONSUMER_KEY + , consumerSecret: OAUTH_CONSUMER_SECRET + , token : controller.accessToken.accessToken + , tokenSecret : controller.accessToken.secret }); $.ajax( @@ -313,10 +303,10 @@ Twittia.prototype.sendNewTweet = function(tweet, in_reply_to_status_id) { var message = { method:"POST" , action:url, parameters:parameters }; OAuth.completeRequest(message, - { consumerKey : controller.oauth.consumerToken.key - , consumerSecret: controller.oauth.consumerToken.secret - , token : controller.oauth.accessToken.key - , tokenSecret : controller.oauth.accessToken.secret + { consumerKey : OAUTH_CONSUMER_KEY + , consumerSecret: OAUTH_CONSUMER_SECRET + , token : controller.accessToken.accessToken + , tokenSecret : controller.accessToken.secret }); $.ajax({ @@ -345,10 +335,10 @@ Twittia.prototype.retweet = function(status_id, item) { var message = { method:"POST" , action:url }; OAuth.completeRequest(message, - { consumerKey : controller.oauth.consumerToken.key - , consumerSecret: controller.oauth.consumerToken.secret - , token : controller.oauth.accessToken.key - , tokenSecret : controller.oauth.accessToken.secret + { consumerKey : OAUTH_CONSUMER_KEY + , consumerSecret: OAUTH_CONSUMER_SECRET + , token : controller.accessToken.accessToken + , tokenSecret : controller.accessToken.secret }); $.ajax({ @@ -367,66 +357,6 @@ Twittia.prototype.retweet = function(status_id, item) { } }); } -/* -Twittia.prototype.authorizationHeader = function(method, url, params) { - if(params == undefined) - params = ''; - if(method == undefined) - method = 'GET'; - var timestamp = OAuth.timestamp(); - var nonce = OAuth.nonce(11); - var accessor = { consumerSecret: controller.oauth.consumerToken.secret, tokenSecret: controller.oauth.accessToken.secret }; - - var message = {method: method, action: url, parameters: OAuth.decodeForm(params)}; - message.parameters.push(['oauth_consumer_key',controller.oauth.consumerToken.key]); - message.parameters.push(['oauth_nonce',nonce]); - message.parameters.push(['oauth_signature_method','HMAC-SHA1']); - message.parameters.push(['oauth_timestamp',timestamp]); - message.parameters.push(['oauth_token', controller.oauth.accessToken.key]); - message.parameters.push(['oauth_version','1.0']); - message.parameters.sort() - - OAuth.SignatureMethod.sign(message, accessor); - - return OAuth.getAuthorizationHeader("", message.parameters); -} -*/ - -Twittia.prototype.requestAToken = function() { - var url = OAUTH_REQUEST_TOKEN_URL; - var _this = this; - - var message = { method:"POST" , action:url }; - - OAuth.completeRequest(message, - { consumerKey : controller.oauth.consumerToken.key - , consumerSecret: controller.oauth.consumerToken.secret - //, token : controller.oauth.accessToken.key - //, tokenSecret : controller.oauth.accessToken.secret - }); - - $.ajax({ - beforeSend: function(xhr) { - xhr.setRequestHeader("Authorization", OAuth.getAuthorizationHeader("", message.parameters)); - }, - url: url, - type: 'POST', - dataType: 'text', - success: function(data) { - _this.requestTokenTicketFinished(data); - }, - error:function (xhr, ajaxOptions, thrownError) { - alert(xhr.statusText); - alert(ajaxOptions); - alert(thrownError); - } - }); -} - -Twittia.prototype.requestTokenTicketFinished = function(data) { - controller.openURL_(OAUTH_USER_AUTHORIZATION_URL + "?" + data); -} - function replaceURLWithHTMLLinks(text, entities, message_node) { var urls = entities.urls; diff --git a/TwittiaOauth.js b/TwittiaOauth.js new file mode 100644 index 0000000..e66122c --- /dev/null +++ b/TwittiaOauth.js @@ -0,0 +1,111 @@ +// +// TwittiaOauth.js +// Twittia 2 +// +// Created by Jeena on 19.09.11. +// Licence: BSD (see attached LICENCE.txt file). +// + +function TwittiaOauth() { + this.requestAToken(); + alert(APP_NAME); +} + +TwittiaOauth.prototype.requestAToken = function() { + var url = OAUTH_REQUEST_TOKEN_URL; + var _this = this; + + var message = { method:"POST" , action:url }; + + OAuth.completeRequest(message, + { consumerKey : OAUTH_CONSUMER_KEY + , consumerSecret: OAUTH_CONSUMER_SECRET + //, token : controller.oauth.accessToken.key + //, tokenSecret : controller.oauth.accessToken.secret + }); + + $.ajax({ + beforeSend: function(xhr) { + xhr.setRequestHeader("Authorization", OAuth.getAuthorizationHeader("", message.parameters)); + }, + url: url, + type: 'POST', + dataType: 'text', + success: function(data) { + _this.requestTokenTicketFinished(data); + }, + error:function (xhr, ajaxOptions, thrownError) { + alert(xhr.statusText); + alert(ajaxOptions); + alert(thrownError); + } + }); + +} + +TwittiaOauth.prototype.requestTokenTicketFinished = function(data) { + controller.openURL_(OAUTH_USER_AUTHORIZATION_URL + "?" + data); +} + +TwittiaOauth.prototype.requestAccessToken = function(responseBody) { + // "twittia://oauth_token?oauth_token=jCcf7ClzJMbE4coZdONi467OAQxRGOBZJsuopG8C8&oauth_verifier=BK2ZkAIz51lqI4qta8MnKc280GyDLy0OQBpdsEmjT40" + alert(responseBody); + + var urlVars = getUrlVars(responseBody); + + var url = OAUTH_ACCESS_TOKEN_URL; + var _this = this; + var accessTokenKey = getUrlVars(responseBody) + + var message = { method:"POST" , action:url }; + + OAuth.completeRequest(message, + { consumerKey : OAUTH_CONSUMER_KEY + , consumerSecret: OAUTH_CONSUMER_SECRET + , token : urlVars["oauth_token"] + , tokenSecret : urlVars["oauth_verifier"] + }); + + $.ajax({ + beforeSend: function(xhr) { + xhr.setRequestHeader("Authorization", OAuth.getAuthorizationHeader("", message.parameters)); + }, + url: url, + type: 'POST', + dataType: 'text', + success: function(data) { + _this.requestAccessTokenTicketFinished(data); + }, + error:function (xhr, ajaxOptions, thrownError) { + alert(xhr.statusText); + alert(ajaxOptions); + alert(thrownError); + } + }); +} + +TwittiaOauth.prototype.requestAccessTokenTicketFinished = function(responseBody) { + var urlVars = getUrlVars(responseBody); + controller.storeAccessToken_secret_userId_andScreenName_( + urlVars["oauth_token"], + urlVars["oauth_token_secret"], + urlVars["user_id"], + urlVars["screen_name"] + ); +} + +function getUrlVars(url) +{ + var vars = [], hash; + if(url.indexOf("#") > -1) url = url.slice(0, url.indexOf("#")); + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++) + { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; +} + +var twittia_oauth; \ No newline at end of file diff --git a/Twittia_2-Info.plist b/Twittia_2-Info.plist index 47c17b6..55a5109 100644 --- a/Twittia_2-Info.plist +++ b/Twittia_2-Info.plist @@ -34,7 +34,7 @@ CFBundleIconFile Icon.icns CFBundleIdentifier - net.jeena.apps.twittia.test + net.jeena.apps.twittia CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/ViewDelegate.h b/ViewDelegate.h index 0692c6c..539cc89 100644 --- a/ViewDelegate.h +++ b/ViewDelegate.h @@ -13,9 +13,11 @@ @interface ViewDelegate : NSObject { WebView *timelineView; WebView *mentionsView; + WebView *twittiaOauthView; } @property (nonatomic, assign) WebView *timelineView; @property (nonatomic, assign) WebView *mentionsView; +@property (nonatomic, assign) WebView *twittiaOauthView; @end diff --git a/ViewDelegate.m b/ViewDelegate.m index 67aa6ab..e9c2996 100644 --- a/ViewDelegate.m +++ b/ViewDelegate.m @@ -11,13 +11,18 @@ @implementation ViewDelegate -@synthesize timelineView, mentionsView; +@synthesize timelineView, mentionsView, twittiaOauthView; - (void)webView:(WebView *)sender addMessageToConsole:(NSDictionary *)message;{ if (![message isKindOfClass:[NSDictionary class]]) return; - NSLog(@"js: %@:%@: %@", + NSString *viewName = @"TimelineView"; + if (sender == mentionsView) viewName = @"MentionsView"; + if (sender == twittiaOauthView) viewName = @"TwittiaOauthView"; + + NSLog(@"js<%@>: %@:%@: %@", + viewName, [[message objectForKey:@"sourceURL"] lastPathComponent], [message objectForKey:@"lineNumber"], [message objectForKey:@"message"] @@ -25,7 +30,11 @@ } - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame { - NSLog(@"jsa: %@", message); + NSString *viewName = @"TimelineView"; + if (sender == mentionsView) viewName = @"MentionsView"; + if (sender == twittiaOauthView) viewName = @"TwittiaOauthView"; + + NSLog(@"jsa<%@>: %@", viewName, message); } - (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener { @@ -34,18 +43,26 @@ } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { - NSString *action = @"home_timeline"; - NSString *delay = @"1"; - if (sender == mentionsView) { - action = @"mentions"; - delay = @"1000"; - } - - [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: - @"setTimeout(function(){ twittia_instance = new Twittia('%@'); \ - document.getElementsByTagName('body')[0].appendChild(twittia_instance.body); \ - setTimeout(function() { loadPlugin(controller.pluginURL()) }, 1); }, %@);", action, delay]]; + if (sender == twittiaOauthView) { + + [twittiaOauthView stringByEvaluatingJavaScriptFromString:@"setTimeout( function() { twittia_oauth = new TwittiaOauth(); }, 2);"]; + + } else { + + NSString *action = @"home_timeline"; + NSString *delay = @"1"; + + if (sender == mentionsView) { + action = @"mentions"; + delay = @"1000"; + } + + [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: + @"setTimeout(function(){ twittia_instance = new Twittia('%@'); \ + document.getElementsByTagName('body')[0].appendChild(twittia_instance.body); \ + setTimeout(function() { loadPlugin(controller.pluginURL()) }, 1); }, %@);", action, delay]]; + } } @end diff --git a/index.html b/index.html index 3ae01b4..050db32 100644 --- a/index.html +++ b/index.html @@ -8,6 +8,7 @@ + diff --git a/index_oauth.html b/index_oauth.html new file mode 100644 index 0000000..b1f2ccd --- /dev/null +++ b/index_oauth.html @@ -0,0 +1,15 @@ + + + + Twittia + + + + + + + + + + + \ No newline at end of file