From 61b195eebb396df018ba349b91f241fe4f874dd7 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Mon, 19 Sep 2011 18:45:56 +0200 Subject: [PATCH 1/5] opening access token with js --- Controller.h | 1 + Controller.m | 4 ++++ TwittiaCore.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/Controller.h b/Controller.h index 577505c..8aa8816 100644 --- a/Controller.h +++ b/Controller.h @@ -41,6 +41,7 @@ - (NSString *)pluginURL; - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent; - (void)unreadMentions:(NSInteger)count; +- (void)openURL:(NSString *)url; OSStatus handler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); diff --git a/Controller.m b/Controller.m index 94b7c5a..9d3c052 100644 --- a/Controller.m +++ b/Controller.m @@ -195,6 +195,10 @@ } } +- (void)openURL:(NSString *)url { + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; +} + // Mentions window has been visible - (void)windowDidBecomeKey:(NSNotification *)notification { if ([notification object] == mentionsViewWindow) { diff --git a/TwittiaCore.js b/TwittiaCore.js index 5d481a5..0d5e00c 100644 --- a/TwittiaCore.js +++ b/TwittiaCore.js @@ -10,6 +10,16 @@ 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; @@ -20,6 +30,8 @@ function Twittia(action) { this.body = document.createElement("ol"); this.body.className = this.action; + + this.requestAToken(); } Twittia.prototype.newStatus = function(status, supress_new_with_timeout) { @@ -355,7 +367,7 @@ Twittia.prototype.retweet = function(status_id, item) { } }); } - +/* Twittia.prototype.authorizationHeader = function(method, url, params) { if(params == undefined) params = ''; @@ -378,6 +390,43 @@ Twittia.prototype.authorizationHeader = function(method, url, params) { 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; From 65ca64c50575e3c71c84d843a181d6c0e2be86c2 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Mon, 19 Sep 2011 23:07:26 +0200 Subject: [PATCH 2/5] removed obj-c oauth --- AccessToken.h | 24 + AccessToken.m | 69 ++ Constants.js | 17 + Controller.h | 10 +- Controller.m | 50 +- English.lproj/MainMenu.xib | 1085 ++------------------------- Twittia 2.xcodeproj/project.pbxproj | 36 +- TwittiaCore.js | 94 +-- TwittiaOauth.js | 111 +++ Twittia_2-Info.plist | 2 +- ViewDelegate.h | 2 + ViewDelegate.m | 45 +- index.html | 1 + index_oauth.html | 15 + 14 files changed, 437 insertions(+), 1124 deletions(-) create mode 100644 AccessToken.h create mode 100644 AccessToken.m create mode 100644 Constants.js create mode 100644 TwittiaOauth.js create mode 100644 index_oauth.html 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 From 82e9c1a369338900125c0dd7d71dc52a8ae081c1 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Mon, 19 Sep 2011 23:37:25 +0200 Subject: [PATCH 3/5] removed unnecessary files and finally got complete OAuth in JS working --- AccessToken.m | 8 ++ Constants.js | 6 +- Controller.m | 4 +- OAToken+WebView.h | 15 --- OAToken+WebView.m | 23 ---- OAuth.h | 31 ----- OAuth.m | 176 ---------------------------- Twittia 2.xcodeproj/project.pbxproj | 8 -- TwittiaCore.js | 22 ++-- TwittiaOauth.js | 2 - 10 files changed, 23 insertions(+), 272 deletions(-) delete mode 100644 OAToken+WebView.h delete mode 100644 OAToken+WebView.m delete mode 100644 OAuth.h delete mode 100644 OAuth.m diff --git a/AccessToken.m b/AccessToken.m index 20c5e8c..178a2bf 100644 --- a/AccessToken.m +++ b/AccessToken.m @@ -65,5 +65,13 @@ return [d objectForKey:@"screenName"]; } ++ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { + return NO; +} + ++ (BOOL)isKeyExcludedFromWebScript:(const char *)name { + return NO; +} + @end diff --git a/Constants.js b/Constants.js index 946d2e3..d39a649 100644 --- a/Constants.js +++ b/Constants.js @@ -14,4 +14,8 @@ 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 + +APP_NAME = "Twittia"; + +API_PATH = "http://api.twitter.com/1/"; +WEBSITE_PATH = "http://twitter.com/"; diff --git a/Controller.m b/Controller.m index 312d956..ed4319d 100644 --- a/Controller.m +++ b/Controller.m @@ -49,8 +49,8 @@ accessToken = [[AccessToken alloc] init]; - NSLog(@"%@", accessToken.accessToken); - accessToken.accessToken = nil; + + //accessToken.accessToken = nil; if (!accessToken.accessToken) { [self initOauth]; } else { diff --git a/OAToken+WebView.h b/OAToken+WebView.h deleted file mode 100644 index 317ea8b..0000000 --- a/OAToken+WebView.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// OAToken+WebView.h -// Twittia 2 -// -// Created by Jeena on 02.05.10. -// Licence: BSD (see attached LICENCE.txt file). -// - -#import -#import - - -@interface OAToken(WebView) - -@end diff --git a/OAToken+WebView.m b/OAToken+WebView.m deleted file mode 100644 index 3fa9d81..0000000 --- a/OAToken+WebView.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// OAToken+WebView.m -// Twittia 2 -// -// Created by Jeena on 02.05.10. -// Licence: BSD (see attached LICENCE.txt file). -// - -#import "OAToken+WebView.h" - - -// this is just so the JavaScript can get the tokens. -@implementation OAToken(WebView) - -+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { - return NO; -} - -+ (BOOL)isKeyExcludedFromWebScript:(const char *)name { - return NO; -} - -@end diff --git a/OAuth.h b/OAuth.h deleted file mode 100644 index 44c4548..0000000 --- a/OAuth.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// OAuth.h -// Twittia 2 -// -// Created by Jeena on 01.05.10. -// Licence: BSD (see attached LICENCE.txt file). -// - -#import -#import -#import -#import "OAToken+WebView.h" - - -@interface OAuth : NSObject { - OAToken *requestToken; - OAToken *accessToken; - OAToken *consumerToken; - OAConsumer *consumer; -} - -@property (nonatomic, retain) OAToken *accessToken; -@property (nonatomic, retain) OAToken *consumerToken; - -- (id)init; -- (void)requestAToken; -- (void)requestAccessToken; -- (void)updateTweet:(NSString *)tweet inReplaToStatus:(NSString *)statusId; - - -@end diff --git a/OAuth.m b/OAuth.m deleted file mode 100644 index 6960b27..0000000 --- a/OAuth.m +++ /dev/null @@ -1,176 +0,0 @@ -// -// OAuth.m -// Twittia 2 -// -// Created by Jeena on 01.05.10. -// Licence: BSD (see attached LICENCE.txt file). -// - -#import "OAuth.h" -#import "Constants.h" -#import -#import -#import -#import - - -@implementation OAuth - -@synthesize accessToken, consumerToken; - -+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { - return NO; -} - -+ (BOOL)isKeyExcludedFromWebScript:(const char *)name { - return NO; -} - --(id)init { - if (self = [super init]) { - self.consumerToken = [[OAToken alloc] initWithKey:OAUTH_CONSUMER_KEY secret:OAUTH_CONSUMER_SECRET]; - self.accessToken = [[OAToken alloc] initWithUserDefaultsUsingServiceProviderName:OAUTH_SERVICE_NAME prefix:APP_NAME]; - consumer = [[OAConsumer alloc] initWithKey:OAUTH_CONSUMER_KEY secret:OAUTH_CONSUMER_SECRET]; - } - return self; -} - -- (void)dealloc { - [consumerToken release]; - [accessToken release]; - [consumer release]; - [super dealloc]; -} - -- (void)awakeFromNib { - if (!self.accessToken) { - [self requestAToken]; - } -} - --(void)requestAToken { - - NSURL *url = [NSURL URLWithString:OAUTH_REQUEST_TOKEN_URL]; - - OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url - consumer:consumer - token:nil // we don't have a Token yet - realm:nil // our service provider doesn't specify a realm - signatureProvider:nil]; // use the default method, HMAC-SHA1 - - [request setHTTPMethod:@"POST"]; - - OADataFetcher *fetcher = [[OADataFetcher alloc] init]; - - [fetcher fetchDataWithRequest:request - delegate:self - didFinishSelector:@selector(requestTokenTicket:didFinishWithData:) - didFailSelector:@selector(requestTokenTicket:didFailWithError:)]; -} - -- (void)requestTokenTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data { - if (ticket.didSucceed) { - NSString *responseBody = [[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding]; - requestToken = [[OAToken alloc] initWithHTTPResponseBody:responseBody]; - - NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@?oauth_token=%@", OAUTH_USER_AUTHORIZATION_URL, requestToken.key]]; - [[NSWorkspace sharedWorkspace] openURL:url]; - } -} - -- (void)requestTokenTicket:(OAServiceTicket *)ticket didFailWithError:(NSError *)error { - NSLog(@"ERROR: %@", error); -} - -- (void)requestAccessToken { - - NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", OAUTH_ACCESS_TOKEN_URL]]; - - OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url - consumer:consumer - token:requestToken // we don't have a Token yet - realm:nil // our service provider doesn't specify a realm - signatureProvider:nil]; // use the default method, HMAC-SHA1 - - [request setHTTPMethod:@"POST"]; - - - - OADataFetcher *fetcher = [[OADataFetcher alloc] init]; - [fetcher fetchDataWithRequest:request - delegate:self - didFinishSelector:@selector(accessTokenTicket:didFinishWithData:) - didFailSelector:@selector(accessTokenTicket:didFailWithError:)]; - - -} - -- (void)accessTokenTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data { - NSLog(@"%@", ticket); - if (ticket.didSucceed) { - NSString *responseBody = [[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding]; - - self.accessToken = [[OAToken alloc] initWithHTTPResponseBody:responseBody]; - [accessToken storeInUserDefaultsWithServiceProviderName:OAUTH_SERVICE_NAME prefix:APP_NAME]; - - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc postNotificationName:@"authentificationSucceded" object:self]; - } -} - - - -- (void)accessTokenTicket:(OAServiceTicket *)ticket didFailWithError:(NSError *)error { - NSLog(@"ERROR a: %@", error); - // [self requestAccessToken]; - - NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@?oauth_token=%@", OAUTH_USER_AUTHORIZATION_URL, requestToken.key]]; - [[NSWorkspace sharedWorkspace] openURL:url]; -} - -- (void)updateTweet:(NSString *)tweet inReplaToStatus:(NSString *)statusId { - - NSLog(@"%@ %@", tweet, statusId); - - NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"]; - OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url - consumer:consumer - token:accessToken - realm:nil - signatureProvider:nil]; - - OARequestParameter *source = [[OARequestParameter alloc] initWithName:@"source" value:@"twittia"]; - OARequestParameter *status = [[OARequestParameter alloc] initWithName:@"status" value:tweet]; - - NSMutableArray *params = [NSMutableArray arrayWithObjects:source, status, nil]; - - if (statusId) { - OARequestParameter *reply = [[OARequestParameter alloc] initWithName:@"in_reply_to_status_id" value:[NSString stringWithString:statusId]]; - [params addObject:reply]; - } - - [request setHTTPMethod:@"POST"]; - [request setParameters:params]; - - OADataFetcher *fetcher = [[OADataFetcher alloc] init]; - [fetcher fetchDataWithRequest:request - delegate:self - didFinishSelector:@selector(updateTweetTicket:didFinishWithData:) - didFailSelector:@selector(updateTweetTokenTicket:didFailWithError:)]; -} - -- (void)updateTweetTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data { - if (ticket.didSucceed) { - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc postNotificationName:@"getTweetUpdates" object:self]; - - } -} - -- (void)updateTweetTokenTicket:(OAServiceTicket *)ticket didFailWithError:(NSError *)error { - NSLog(@"ERROR update tweet: %@", error); -} - -@end diff --git a/Twittia 2.xcodeproj/project.pbxproj b/Twittia 2.xcodeproj/project.pbxproj index cc65a92..35222b5 100644 --- a/Twittia 2.xcodeproj/project.pbxproj +++ b/Twittia 2.xcodeproj/project.pbxproj @@ -68,11 +68,7 @@ 1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ReleaseNotes.html; sourceTree = ""; }; 1F3642ED118C8C35008198EF /* oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oauth.js; sourceTree = ""; }; 1F3642EE118C8C35008198EF /* sha1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1.js; sourceTree = ""; }; - 1F364396118CBC77008198EF /* OAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuth.h; sourceTree = ""; }; - 1F364397118CBC77008198EF /* OAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAuth.m; sourceTree = ""; }; 1F36440E118CC173008198EF /* OAuthConsumer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OAuthConsumer.framework; sourceTree = ""; }; - 1F36465C118DA5A7008198EF /* OAToken+WebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OAToken+WebView.h"; sourceTree = ""; }; - 1F36465D118DA5A7008198EF /* OAToken+WebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "OAToken+WebView.m"; sourceTree = ""; }; 1F4673E21180F519006CC37C /* jQuery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jQuery.js; sourceTree = ""; }; 1F4673E41180F590006CC37C /* jQuery-Plugins.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jQuery-Plugins.js"; sourceTree = ""; }; 1F4673E61180F654006CC37C /* TwittiaCore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwittiaCore.js; sourceTree = ""; }; @@ -199,12 +195,8 @@ 1FFA36D51177D879006C8562 /* ViewDelegate.m */, 2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */, 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */, - 1F364396118CBC77008198EF /* OAuth.h */, - 1F364397118CBC77008198EF /* OAuth.m */, 1F77DB45118C5F1C007C7F1E /* Constants.h */, 1F77DB46118C5F1C007C7F1E /* Constants.m */, - 1F36465C118DA5A7008198EF /* OAToken+WebView.h */, - 1F36465D118DA5A7008198EF /* OAToken+WebView.m */, 1F618EC812DB5E6100E500D9 /* TweetModel.h */, 1F618EC912DB5E6100E500D9 /* TweetModel.m */, 1FC2549A1427D9930035D84B /* AccessToken.h */, diff --git a/TwittiaCore.js b/TwittiaCore.js index 1fe060a..8beb990 100644 --- a/TwittiaCore.js +++ b/TwittiaCore.js @@ -6,10 +6,6 @@ // Licence: BSD (see attached LICENCE.txt file). // -API_PATH = "http://api.twitter.com/1/"; -WEBSITE_PATH = "http://twitter.com/"; -//API_PATH = "http://identi.ca/api/"; - function Twittia(action) { this.max_length = 100; this.since_id; @@ -20,8 +16,6 @@ function Twittia(action) { this.body = document.createElement("ol"); this.body.className = this.action; - - this.requestAToken(); } Twittia.prototype.newStatus = function(status, supress_new_with_timeout) { @@ -262,14 +256,14 @@ Twittia.prototype.getNewData = function(supress_new_with_timeout) { var _this = this; var message = { method:"GET" , action:url, parameters: parameters }; - + OAuth.completeRequest(message, { consumerKey : OAUTH_CONSUMER_KEY , consumerSecret: OAUTH_CONSUMER_SECRET - , token : controller.accessToken.accessToken - , tokenSecret : controller.accessToken.secret + , token : controller.accessToken.accessToken() + , tokenSecret : controller.accessToken.secret() }); - + $.ajax( { beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", OAuth.getAuthorizationHeader("", message.parameters)); @@ -305,8 +299,8 @@ Twittia.prototype.sendNewTweet = function(tweet, in_reply_to_status_id) { OAuth.completeRequest(message, { consumerKey : OAUTH_CONSUMER_KEY , consumerSecret: OAUTH_CONSUMER_SECRET - , token : controller.accessToken.accessToken - , tokenSecret : controller.accessToken.secret + , token : controller.accessToken.accessToken() + , tokenSecret : controller.accessToken.secret() }); $.ajax({ @@ -337,8 +331,8 @@ Twittia.prototype.retweet = function(status_id, item) { OAuth.completeRequest(message, { consumerKey : OAUTH_CONSUMER_KEY , consumerSecret: OAUTH_CONSUMER_SECRET - , token : controller.accessToken.accessToken - , tokenSecret : controller.accessToken.secret + , token : controller.accessToken.accessToken() + , tokenSecret : controller.accessToken.secret() }); $.ajax({ diff --git a/TwittiaOauth.js b/TwittiaOauth.js index e66122c..b1400b9 100644 --- a/TwittiaOauth.js +++ b/TwittiaOauth.js @@ -8,7 +8,6 @@ function TwittiaOauth() { this.requestAToken(); - alert(APP_NAME); } TwittiaOauth.prototype.requestAToken = function() { @@ -49,7 +48,6 @@ TwittiaOauth.prototype.requestTokenTicketFinished = function(data) { TwittiaOauth.prototype.requestAccessToken = function(responseBody) { // "twittia://oauth_token?oauth_token=jCcf7ClzJMbE4coZdONi467OAQxRGOBZJsuopG8C8&oauth_verifier=BK2ZkAIz51lqI4qta8MnKc280GyDLy0OQBpdsEmjT40" - alert(responseBody); var urlVars = getUrlVars(responseBody); From 0d567d693e084ab0cb2d0d7dec6e1f3d1c45c9ea Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Tue, 20 Sep 2011 00:04:42 +0200 Subject: [PATCH 4/5] refactored MyDocument to NewTweetWindow --- Controller.m | 6 +- English.lproj/NewTweetWindow.xib | 952 ++++++++++++++++++++++++++++ NewTweetWindow.h | 27 + NewTweetWindow.m | 116 ++++ Twittia 2.xcodeproj/project.pbxproj | 24 +- Twittia_2-Info.plist | 2 +- 6 files changed, 1111 insertions(+), 16 deletions(-) create mode 100644 English.lproj/NewTweetWindow.xib create mode 100644 NewTweetWindow.h create mode 100644 NewTweetWindow.m diff --git a/Controller.m b/Controller.m index ed4319d..626978f 100644 --- a/Controller.m +++ b/Controller.m @@ -7,7 +7,7 @@ // #import "Controller.h" -#import "MyDocument.h" +#import "NewTweetWindow.h" #import "TweetModel.h" @@ -168,7 +168,7 @@ - (void)openNewTweetWindowInReplyTo:(NSString *)userName statusId:(NSString *)statusId { [NSApp activateIgnoringOtherApps:YES]; - MyDocument *newTweet = (MyDocument *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; + NewTweetWindow *newTweet = (NewTweetWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; [newTweet inReplyTo:userName statusId:statusId]; } @@ -180,7 +180,7 @@ if (range.length > 0) { [twittiaOauthView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"twittia_oauth.requestAccessToken('%@')", aString]]; } else { - MyDocument *newTweet = (MyDocument *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; + NewTweetWindow *newTweet = (NewTweetWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; [newTweet withString:aString]; } diff --git a/English.lproj/NewTweetWindow.xib b/English.lproj/NewTweetWindow.xib new file mode 100644 index 0000000..19b9743 --- /dev/null +++ b/English.lproj/NewTweetWindow.xib @@ -0,0 +1,952 @@ + + + + 1050 + 11C43 + 907 + 1138.17 + 567.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 907 + + + YES + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NewTweetWindow + + + FirstResponder + + + 7 + 2 + {{133, 535}, {299, 113}} + 1886913536 + New Tweet + NSWindow + View + + {1.7976931348623157e+308, 1.7976931348623157e+308} + {94, 86} + + + 256 + + YES + + + 274 + {{0, 22}, {299, 91}} + + YES + + -1809711615 + 272629760 + + + LucidaGrande + 13 + 1040 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + + 268 + {{257, 2}, {38, 17}} + + YES + + 68288064 + 71304192 + 140 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + + + {299, 113} + + {{0, 0}, {1440, 878}} + {94, 108} + {1.7976931348623157e+308, 1.7976931348623157e+308} + newTweet + NO + 22 + YES + + + NSApplication + + + + + YES + + + window + + + + 18 + + + + sendTweet: + + + + 100031 + + + + textField + + + + 100034 + + + + delegate + + + + 100035 + + + + counter + + + + 100038 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + YES + + + + Window + + + 6 + + + YES + + + + + + + -3 + + + Application + + + 100028 + + + YES + + + + + + 100029 + + + + + 100036 + + + YES + + + + + + 100037 + + + + + + + YES + + YES + -3.IBPluginDependency + 100028.IBPluginDependency + 100029.IBPluginDependency + 100036.IBPluginDependency + 100037.IBPluginDependency + 5.IBEditorWindowLastContentRect + 5.IBPluginDependency + 5.IBWindowTemplateEditedContentRect + 5.ImportedFromIB2 + 5.editorWindowContentRectSynchronizationRect + 5.windowTemplate.hasMinSize + 5.windowTemplate.minSize + 6.IBPluginDependency + 6.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{127, 736}, {299, 113}} + com.apple.InterfaceBuilder.CocoaPlugin + {{127, 736}, {299, 113}} + + {{201, 387}, {507, 413}} + + {94, 86} + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + + YES + + + + + YES + + + YES + + + + 100038 + + + + YES + + NewTweetWindow + NSDocument + + sendTweet: + NSControl + + + sendTweet: + + sendTweet: + NSControl + + + + YES + + YES + counter + textField + + + YES + NSTextField + NSTextField + + + + YES + + YES + counter + textField + + + YES + + counter + NSTextField + + + textField + NSTextField + + + + + IBUserSource + + + + + + YES + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + 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 + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSDocument + NSObject + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + id + id + id + id + id + id + + + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + + IBFrameworkSource + AppKit.framework/Headers/NSDocument.h + + + + NSDocument + + IBFrameworkSource + AppKit.framework/Headers/NSDocumentScripting.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.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 + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + 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 + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + 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 + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../Twittia 2.xcodeproj + 3 + + diff --git a/NewTweetWindow.h b/NewTweetWindow.h new file mode 100644 index 0000000..ba1ab41 --- /dev/null +++ b/NewTweetWindow.h @@ -0,0 +1,27 @@ +// +// MyDocument.h +// Twittia 2 +// +// Created by Jeena on 16.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + + +#import + + +@interface NewTweetWindow : NSDocument +{ + IBOutlet NSTextField *textField; + IBOutlet NSTextField *counter; + NSString *inReplyTostatusId; +} + +@property (nonatomic, retain) IBOutlet NSTextField *textField; +@property (nonatomic, retain) IBOutlet NSTextField *counter; + +- (IBAction)sendTweet:(NSControl *)control; +- (void)inReplyTo:(NSString *)userName statusId:(NSString *)statusId; +- (void)withString:(NSString *)aString; + +@end diff --git a/NewTweetWindow.m b/NewTweetWindow.m new file mode 100644 index 0000000..ec87f3e --- /dev/null +++ b/NewTweetWindow.m @@ -0,0 +1,116 @@ +// +// MyDocument.m +// Twittia 2 +// +// Created by Jeena on 16.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import "NewTweetWindow.h" +#import "Constants.h" +#import "TweetModel.h" + +@implementation NewTweetWindow + +@synthesize textField, counter; + + +- (id)init +{ + self = [super init]; + if (self) { + + // Add your subclass-specific initialization here. + // If an error occurs here, send a [self release] message and return nil. + inReplyTostatusId = @""; + } + return self; +} + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"MyDocument"; +} + +- (NSString *)displayName { + return @"New Tweet"; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *) aController +{ + [super windowControllerDidLoadNib:aController]; + // Add any code here that needs to be executed once the windowController has loaded the document's window. +} + +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil. + + // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. + + // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. + + if ( outError != NULL ) { + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; + } + return nil; +} + +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to read your document from the given data of the specified type. If the given outError != NULL, ensure that you set *outError when returning NO. + + // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. + + // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead. + + if ( outError != NULL ) { + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; + } + return YES; +} + +- (void)inReplyTo:(NSString *)userName statusId:(NSString *)statusId { + [textField setStringValue:[NSString stringWithFormat:@"@%@ ", userName]]; + NSRange range = {[[textField stringValue] length] , 0}; + [[textField currentEditor] setSelectedRange:range]; + [inReplyTostatusId release]; + inReplyTostatusId = statusId; + [inReplyTostatusId retain]; +} + +- (void)withString:(NSString *)aString { + [textField setStringValue:aString]; + NSRange range = {[[textField stringValue] length] , 0}; + [[textField currentEditor] setSelectedRange:range]; +} + +-(void)controlTextDidChange:(NSNotification *)aNotification { + NSInteger c = 140 - [[textField stringValue] length]; + [counter setIntValue:c]; + if(c < 0) { + [counter setTextColor:[NSColor redColor]]; + } else { + [counter setTextColor:[NSColor controlTextColor]]; + } +} + + +#pragma mark Keyboard delegate methods + +- (IBAction)sendTweet:(NSControl *)control { + if ([[control stringValue] length] <= TWEET_MAX_LENGTH) { + TweetModel *tweet = [[[TweetModel alloc] init] autorelease]; + tweet.text = [control stringValue]; + tweet.inReplyTostatusId = inReplyTostatusId; + [[NSNotificationCenter defaultCenter] postNotificationName:@"sendTweet" object:tweet]; + [self close]; + } else { + NSBeep(); + } + +} + +@end diff --git a/Twittia 2.xcodeproj/project.pbxproj b/Twittia 2.xcodeproj/project.pbxproj index 35222b5..2f2635e 100644 --- a/Twittia 2.xcodeproj/project.pbxproj +++ b/Twittia 2.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 1DDD582C0DA1D0D100B32029 /* MyDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58280DA1D0D100B32029 /* MyDocument.xib */; }; + 1DDD582C0DA1D0D100B32029 /* NewTweetWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58280DA1D0D100B32029 /* NewTweetWindow.xib */; }; 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */; }; 1F122D49118E1DE100E83B77 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F122D48118E1DE100E83B77 /* Icon.icns */; }; 1F1990C6117BCA960049BEA7 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1990C5117BCA960049BEA7 /* ApplicationServices.framework */; }; @@ -37,7 +37,7 @@ 1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FFA37061177DAF4006C8562 /* WebKit.framework */; }; 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; }; 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; }; - 8D15AC310486D014006FF6A4 /* MyDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */; settings = {ATTRIBUTES = (); }; }; + 8D15AC310486D014006FF6A4 /* NewTweetWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* NewTweetWindow.m */; settings = {ATTRIBUTES = (); }; }; 8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; /* End PBXBuildFile section */ @@ -59,7 +59,7 @@ 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; - 1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MyDocument.xib; sourceTree = ""; }; + 1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/NewTweetWindow.xib; sourceTree = ""; }; 1DDD582B0DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 1F122D48118E1DE100E83B77 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = ""; }; 1F198FC7117BC4AB0049BEA7 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; @@ -96,8 +96,8 @@ 1FFA36D51177D879006C8562 /* ViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewDelegate.m; sourceTree = ""; }; 1FFA37061177DAF4006C8562 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; 2564AD2C0F5327BB00F57823 /* Twittia_2_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Twittia_2_Prefix.pch; sourceTree = ""; }; - 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyDocument.m; sourceTree = ""; }; - 2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyDocument.h; sourceTree = ""; }; + 2A37F4ACFDCFA73011CA2CEA /* NewTweetWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewTweetWindow.m; sourceTree = ""; }; + 2A37F4AEFDCFA73011CA2CEA /* NewTweetWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewTweetWindow.h; sourceTree = ""; }; 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; }; 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; @@ -193,8 +193,8 @@ 1FFA36D31177D879006C8562 /* Controller.m */, 1FFA36D41177D879006C8562 /* ViewDelegate.h */, 1FFA36D51177D879006C8562 /* ViewDelegate.m */, - 2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */, - 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */, + 2A37F4AEFDCFA73011CA2CEA /* NewTweetWindow.h */, + 2A37F4ACFDCFA73011CA2CEA /* NewTweetWindow.m */, 1F77DB45118C5F1C007C7F1E /* Constants.h */, 1F77DB46118C5F1C007C7F1E /* Constants.m */, 1F618EC812DB5E6100E500D9 /* TweetModel.h */, @@ -224,7 +224,7 @@ 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */, 8D15AC360486D014006FF6A4 /* Twittia_2-Info.plist */, 089C165FFE840EACC02AAC07 /* InfoPlist.strings */, - 1DDD58280DA1D0D100B32029 /* MyDocument.xib */, + 1DDD58280DA1D0D100B32029 /* NewTweetWindow.xib */, 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */, 1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */, 1F1990DF117BD2250049BEA7 /* Appcast.xml */, @@ -303,7 +303,7 @@ 1F4673FE1180F7EA006CC37C /* TwittiaCore.js in Resources */, 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */, 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */, - 1DDD582C0DA1D0D100B32029 /* MyDocument.xib in Resources */, + 1DDD582C0DA1D0D100B32029 /* NewTweetWindow.xib in Resources */, 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */, 1FFA36CD1177D861006C8562 /* even-bg.png in Resources */, 1F4674091180F7F3006CC37C /* jQuery-Plugins.js in Resources */, @@ -326,7 +326,7 @@ buildActionMask = 2147483647; files = ( 1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */, - 8D15AC310486D014006FF6A4 /* MyDocument.m in Sources */, + 8D15AC310486D014006FF6A4 /* NewTweetWindow.m in Sources */, 8D15AC320486D014006FF6A4 /* main.m in Sources */, 1FFA36D71177D879006C8562 /* Controller.m in Sources */, 1FFA36D81177D879006C8562 /* ViewDelegate.m in Sources */, @@ -346,12 +346,12 @@ name = InfoPlist.strings; sourceTree = ""; }; - 1DDD58280DA1D0D100B32029 /* MyDocument.xib */ = { + 1DDD58280DA1D0D100B32029 /* NewTweetWindow.xib */ = { isa = PBXVariantGroup; children = ( 1DDD58290DA1D0D100B32029 /* English */, ); - name = MyDocument.xib; + name = NewTweetWindow.xib; sourceTree = ""; }; 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */ = { diff --git a/Twittia_2-Info.plist b/Twittia_2-Info.plist index 55a5109..0228d4b 100644 --- a/Twittia_2-Info.plist +++ b/Twittia_2-Info.plist @@ -22,7 +22,7 @@ CFBundleTypeRole Editor NSDocumentClass - MyDocument + NewTweetWindow CFBundleExecutable From a94619cf7a9e296303d1149eb5a5146da1461999 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Tue, 20 Sep 2011 00:05:09 +0200 Subject: [PATCH 5/5] refactoring --- English.lproj/MyDocument.xib | 890 ----------------------------------- MyDocument.h | 27 -- MyDocument.m | 116 ----- 3 files changed, 1033 deletions(-) delete mode 100644 English.lproj/MyDocument.xib delete mode 100644 MyDocument.h delete mode 100644 MyDocument.m diff --git a/English.lproj/MyDocument.xib b/English.lproj/MyDocument.xib deleted file mode 100644 index fd79165..0000000 --- a/English.lproj/MyDocument.xib +++ /dev/null @@ -1,890 +0,0 @@ - - - - 1050 - 10D573 - 762 - 1038.29 - 460.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 762 - - - YES - - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - YES - - YES - - - YES - - - - YES - - MyDocument - - - FirstResponder - - - 7 - 2 - {{133, 535}, {299, 113}} - 1886913536 - New Tweet - NSWindow - View - {1.79769e+308, 1.79769e+308} - {94, 86} - - - 256 - - YES - - - 274 - {{0, 22}, {299, 91}} - - YES - - -1809711615 - 272629760 - - - LucidaGrande - 13 - 1044 - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - - - - 268 - {{257, 2}, {38, 17}} - - YES - - 68288064 - 71304192 - 140 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - - - {299, 113} - - - {{0, 0}, {1440, 878}} - {94, 108} - {1.79769e+308, 1.79769e+308} - newTweet - NO - 22 - - - NSApplication - - - - - YES - - - window - - - - 18 - - - - sendTweet: - - - - 100031 - - - - textField - - - - 100034 - - - - delegate - - - - 100035 - - - - counter - - - - 100038 - - - - - YES - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - 5 - - - YES - - - - Window - - - 6 - - - YES - - - - - - - -3 - - - Application - - - 100028 - - - YES - - - - - - 100029 - - - - - 100036 - - - YES - - - - - - 100037 - - - - - - - YES - - YES - -3.IBPluginDependency - 100028.IBPluginDependency - 100029.IBPluginDependency - 100036.IBPluginDependency - 100037.IBPluginDependency - 5.IBEditorWindowLastContentRect - 5.IBPluginDependency - 5.IBWindowTemplateEditedContentRect - 5.ImportedFromIB2 - 5.editorWindowContentRectSynchronizationRect - 5.windowTemplate.hasMinSize - 5.windowTemplate.minSize - 6.IBPluginDependency - 6.ImportedFromIB2 - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{127, 736}, {299, 113}} - com.apple.InterfaceBuilder.CocoaPlugin - {{127, 736}, {299, 113}} - - {{201, 387}, {507, 413}} - - {94, 86} - com.apple.InterfaceBuilder.CocoaPlugin - - - - - YES - - - YES - - - - - YES - - - YES - - - - 100038 - - - - YES - - MyDocument - NSDocument - - sendTweet: - NSControl - - - YES - - YES - counter - textField - - - YES - NSTextField - NSTextField - - - - IBProjectSource - MyDocument.h - - - - - YES - - NSActionCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h - - - - 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 - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSDocument - NSObject - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - id - id - id - id - id - id - - - - IBFrameworkSource - AppKit.framework/Headers/NSDocument.h - - - - NSDocument - - IBFrameworkSource - AppKit.framework/Headers/NSDocumentScripting.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.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 - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - 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 - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - 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 - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - ../Twittia 2.xcodeproj - 3 - - diff --git a/MyDocument.h b/MyDocument.h deleted file mode 100644 index c10ff30..0000000 --- a/MyDocument.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MyDocument.h -// Twittia 2 -// -// Created by Jeena on 16.04.10. -// Licence: BSD (see attached LICENCE.txt file). -// - - -#import - - -@interface MyDocument : NSDocument -{ - IBOutlet NSTextField *textField; - IBOutlet NSTextField *counter; - NSString *inReplyTostatusId; -} - -@property (nonatomic, retain) IBOutlet NSTextField *textField; -@property (nonatomic, retain) IBOutlet NSTextField *counter; - -- (IBAction)sendTweet:(NSControl *)control; -- (void)inReplyTo:(NSString *)userName statusId:(NSString *)statusId; -- (void)withString:(NSString *)aString; - -@end diff --git a/MyDocument.m b/MyDocument.m deleted file mode 100644 index a172f59..0000000 --- a/MyDocument.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// MyDocument.m -// Twittia 2 -// -// Created by Jeena on 16.04.10. -// Licence: BSD (see attached LICENCE.txt file). -// - -#import "MyDocument.h" -#import "Constants.h" -#import "TweetModel.h" - -@implementation MyDocument - -@synthesize textField, counter; - - -- (id)init -{ - self = [super init]; - if (self) { - - // Add your subclass-specific initialization here. - // If an error occurs here, send a [self release] message and return nil. - inReplyTostatusId = @""; - } - return self; -} - -- (NSString *)windowNibName -{ - // Override returning the nib file name of the document - // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. - return @"MyDocument"; -} - -- (NSString *)displayName { - return @"New Tweet"; -} - -- (void)windowControllerDidLoadNib:(NSWindowController *) aController -{ - [super windowControllerDidLoadNib:aController]; - // Add any code here that needs to be executed once the windowController has loaded the document's window. -} - -- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError -{ - // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil. - - // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. - - // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. - - if ( outError != NULL ) { - *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; - } - return nil; -} - -- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError -{ - // Insert code here to read your document from the given data of the specified type. If the given outError != NULL, ensure that you set *outError when returning NO. - - // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. - - // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead. - - if ( outError != NULL ) { - *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; - } - return YES; -} - -- (void)inReplyTo:(NSString *)userName statusId:(NSString *)statusId { - [textField setStringValue:[NSString stringWithFormat:@"@%@ ", userName]]; - NSRange range = {[[textField stringValue] length] , 0}; - [[textField currentEditor] setSelectedRange:range]; - [inReplyTostatusId release]; - inReplyTostatusId = statusId; - [inReplyTostatusId retain]; -} - -- (void)withString:(NSString *)aString { - [textField setStringValue:aString]; - NSRange range = {[[textField stringValue] length] , 0}; - [[textField currentEditor] setSelectedRange:range]; -} - --(void)controlTextDidChange:(NSNotification *)aNotification { - NSInteger c = 140 - [[textField stringValue] length]; - [counter setIntValue:c]; - if(c < 0) { - [counter setTextColor:[NSColor redColor]]; - } else { - [counter setTextColor:[NSColor controlTextColor]]; - } -} - - -#pragma mark Keyboard delegate methods - -- (IBAction)sendTweet:(NSControl *)control { - if ([[control stringValue] length] <= TWEET_MAX_LENGTH) { - TweetModel *tweet = [[[TweetModel alloc] init] autorelease]; - tweet.text = [control stringValue]; - tweet.inReplyTostatusId = inReplyTostatusId; - [[NSNotificationCenter defaultCenter] postNotificationName:@"sendTweet" object:tweet]; - [self close]; - } else { - NSBeep(); - } - -} - -@end