Merge branch 'jsoauth'
This commit is contained in:
commit
17afee2a35
21 changed files with 558 additions and 1378 deletions
24
AccessToken.h
Normal file
24
AccessToken.h
Normal file
|
@ -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
|
77
AccessToken.m
Normal file
77
AccessToken.m
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
//
|
||||||
|
// 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"];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
21
Constants.js
Normal file
21
Constants.js
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
//
|
||||||
|
// 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";
|
||||||
|
|
||||||
|
API_PATH = "http://api.twitter.com/1/";
|
||||||
|
WEBSITE_PATH = "http://twitter.com/";
|
11
Controller.h
11
Controller.h
|
@ -11,7 +11,7 @@
|
||||||
#import "ViewDelegate.h"
|
#import "ViewDelegate.h"
|
||||||
#import <Carbon/Carbon.h>
|
#import <Carbon/Carbon.h>
|
||||||
#import "Constants.h"
|
#import "Constants.h"
|
||||||
#import "OAuth.h"
|
#import "AccessToken.h"
|
||||||
|
|
||||||
|
|
||||||
@interface Controller : NSObject {
|
@interface Controller : NSObject {
|
||||||
|
@ -22,7 +22,8 @@
|
||||||
IBOutlet NSMenuItem *globalHotkeyMenuItem;
|
IBOutlet NSMenuItem *globalHotkeyMenuItem;
|
||||||
IBOutlet NSImageView *logoLayer;
|
IBOutlet NSImageView *logoLayer;
|
||||||
ViewDelegate *viewDelegate;
|
ViewDelegate *viewDelegate;
|
||||||
OAuth *oauth;
|
WebView *twittiaOauthView;
|
||||||
|
AccessToken *accessToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (retain, nonatomic) IBOutlet WebView *timelineView;
|
@property (retain, nonatomic) IBOutlet WebView *timelineView;
|
||||||
|
@ -32,8 +33,10 @@
|
||||||
@property (retain, nonatomic) IBOutlet NSMenuItem *globalHotkeyMenuItem;
|
@property (retain, nonatomic) IBOutlet NSMenuItem *globalHotkeyMenuItem;
|
||||||
@property (retain, nonatomic) IBOutlet NSImageView *logoLayer;
|
@property (retain, nonatomic) IBOutlet NSImageView *logoLayer;
|
||||||
@property (retain, nonatomic) IBOutlet ViewDelegate *viewDelegate;
|
@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)authentificationSucceded:(id)sender;
|
||||||
- (void)initWebViews;
|
- (void)initWebViews;
|
||||||
- (void)initHotKeys;
|
- (void)initHotKeys;
|
||||||
|
@ -41,6 +44,8 @@
|
||||||
- (NSString *)pluginURL;
|
- (NSString *)pluginURL;
|
||||||
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
|
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
|
||||||
- (void)unreadMentions:(NSInteger)count;
|
- (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);
|
OSStatus handler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);
|
||||||
|
|
||||||
|
|
60
Controller.m
60
Controller.m
|
@ -7,13 +7,15 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "Controller.h"
|
#import "Controller.h"
|
||||||
#import "MyDocument.h"
|
#import "NewTweetWindow.h"
|
||||||
#import "TweetModel.h"
|
#import "TweetModel.h"
|
||||||
|
|
||||||
|
|
||||||
@implementation Controller
|
@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 {
|
- (void)awakeFromNib {
|
||||||
|
|
||||||
|
@ -43,9 +45,32 @@
|
||||||
forEventClass:kInternetEventClass
|
forEventClass:kInternetEventClass
|
||||||
andEventID:kAEGetURL];
|
andEventID:kAEGetURL];
|
||||||
|
|
||||||
if ([oauth accessToken]) {
|
viewDelegate = [[ViewDelegate alloc] init];
|
||||||
[self initWebViews];
|
|
||||||
}
|
|
||||||
|
accessToken = [[AccessToken alloc] init];
|
||||||
|
|
||||||
|
//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 {
|
- (void)initHotKeys {
|
||||||
|
@ -108,8 +133,6 @@
|
||||||
NSURL *url = [NSURL fileURLWithPath:path];
|
NSURL *url = [NSURL fileURLWithPath:path];
|
||||||
NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/index.html", path] encoding:NSUTF8StringEncoding error:nil];
|
NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/index.html", path] encoding:NSUTF8StringEncoding error:nil];
|
||||||
|
|
||||||
viewDelegate = [[ViewDelegate alloc] init];
|
|
||||||
|
|
||||||
viewDelegate.timelineView = timelineView;
|
viewDelegate.timelineView = timelineView;
|
||||||
[[timelineView mainFrame] loadHTMLString:index_string baseURL:url];
|
[[timelineView mainFrame] loadHTMLString:index_string baseURL:url];
|
||||||
[timelineView setFrameLoadDelegate:viewDelegate];
|
[timelineView setFrameLoadDelegate:viewDelegate];
|
||||||
|
@ -145,7 +168,7 @@
|
||||||
|
|
||||||
- (void)openNewTweetWindowInReplyTo:(NSString *)userName statusId:(NSString *)statusId {
|
- (void)openNewTweetWindowInReplyTo:(NSString *)userName statusId:(NSString *)statusId {
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
[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];
|
[newTweet inReplyTo:userName statusId:statusId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,9 +178,9 @@
|
||||||
NSRange range = [aString rangeOfString:@"oauth_token"];
|
NSRange range = [aString rangeOfString:@"oauth_token"];
|
||||||
|
|
||||||
if (range.length > 0) {
|
if (range.length > 0) {
|
||||||
[oauth requestAccessToken];
|
[twittiaOauthView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"twittia_oauth.requestAccessToken('%@')", aString]];
|
||||||
} else {
|
} else {
|
||||||
MyDocument *newTweet = (MyDocument *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil];
|
NewTweetWindow *newTweet = (NewTweetWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil];
|
||||||
[newTweet withString:aString];
|
[newTweet withString:aString];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +193,6 @@
|
||||||
|
|
||||||
- (IBAction)sendTweet:(id)sender {
|
- (IBAction)sendTweet:(id)sender {
|
||||||
TweetModel *tweet = (TweetModel *)[sender object];
|
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];
|
NSString *func = [NSString stringWithFormat:@"twittia_instance.sendNewTweet(\"%@\", \"%@\")", [tweet.text stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""], tweet.inReplyTostatusId];
|
||||||
[timelineView stringByEvaluatingJavaScriptFromString:func];
|
[timelineView stringByEvaluatingJavaScriptFromString:func];
|
||||||
}
|
}
|
||||||
|
@ -195,6 +217,22 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)openURL:(NSString *)url {
|
||||||
|
[[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
|
// Mentions window has been visible
|
||||||
- (void)windowDidBecomeKey:(NSNotification *)notification {
|
- (void)windowDidBecomeKey:(NSNotification *)notification {
|
||||||
if ([notification object] == mentionsViewWindow) {
|
if ([notification object] == mentionsViewWindow) {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,35 +2,29 @@
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
|
||||||
<data>
|
<data>
|
||||||
<int key="IBDocument.SystemTarget">1050</int>
|
<int key="IBDocument.SystemTarget">1050</int>
|
||||||
<string key="IBDocument.SystemVersion">10D573</string>
|
<string key="IBDocument.SystemVersion">11C43</string>
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">762</string>
|
<string key="IBDocument.InterfaceBuilderVersion">907</string>
|
||||||
<string key="IBDocument.AppKitVersion">1038.29</string>
|
<string key="IBDocument.AppKitVersion">1138.17</string>
|
||||||
<string key="IBDocument.HIToolboxVersion">460.00</string>
|
<string key="IBDocument.HIToolboxVersion">567.00</string>
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
<string key="NS.object.0">762</string>
|
<string key="NS.object.0">907</string>
|
||||||
</object>
|
</object>
|
||||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
<integer value="6"/>
|
|
||||||
</object>
|
</object>
|
||||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
</object>
|
</object>
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||||
<object class="NSArray" key="dict.sortedKeys" id="0">
|
<integer value="1" key="NS.object.0"/>
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableArray" key="dict.values">
|
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
||||||
</object>
|
|
||||||
</object>
|
</object>
|
||||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="580458321">
|
<object class="NSMutableArray" key="IBDocument.RootObjects" id="580458321">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
<object class="NSCustomObject" id="512844837">
|
<object class="NSCustomObject" id="512844837">
|
||||||
<string key="NSClassName">MyDocument</string>
|
<string key="NSClassName">NewTweetWindow</string>
|
||||||
</object>
|
</object>
|
||||||
<object class="NSCustomObject" id="613418571">
|
<object class="NSCustomObject" id="613418571">
|
||||||
<string key="NSClassName">FirstResponder</string>
|
<string key="NSClassName">FirstResponder</string>
|
||||||
|
@ -43,10 +37,11 @@
|
||||||
<string key="NSWindowTitle">New Tweet</string>
|
<string key="NSWindowTitle">New Tweet</string>
|
||||||
<string key="NSWindowClass">NSWindow</string>
|
<string key="NSWindowClass">NSWindow</string>
|
||||||
<string key="NSViewClass">View</string>
|
<string key="NSViewClass">View</string>
|
||||||
<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
|
<nil key="NSUserInterfaceItemIdentifier"/>
|
||||||
|
<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||||
<string key="NSWindowContentMinSize">{94, 86}</string>
|
<string key="NSWindowContentMinSize">{94, 86}</string>
|
||||||
<object class="NSView" key="NSWindowView" id="568628114">
|
<object class="NSView" key="NSWindowView" id="568628114">
|
||||||
<reference key="NSNextResponder"/>
|
<nil key="NSNextResponder"/>
|
||||||
<int key="NSvFlags">256</int>
|
<int key="NSvFlags">256</int>
|
||||||
<object class="NSMutableArray" key="NSSubviews">
|
<object class="NSMutableArray" key="NSSubviews">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
@ -63,7 +58,7 @@
|
||||||
<object class="NSFont" key="NSSupport" id="991349575">
|
<object class="NSFont" key="NSSupport" id="991349575">
|
||||||
<string key="NSName">LucidaGrande</string>
|
<string key="NSName">LucidaGrande</string>
|
||||||
<double key="NSSize">13</double>
|
<double key="NSSize">13</double>
|
||||||
<int key="NSfFlags">1044</int>
|
<int key="NSfFlags">1040</int>
|
||||||
</object>
|
</object>
|
||||||
<reference key="NSControlView" ref="884814600"/>
|
<reference key="NSControlView" ref="884814600"/>
|
||||||
<bool key="NSDrawsBackground">YES</bool>
|
<bool key="NSDrawsBackground">YES</bool>
|
||||||
|
@ -118,14 +113,14 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<string key="NSFrameSize">{299, 113}</string>
|
<string key="NSFrameSize">{299, 113}</string>
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
</object>
|
</object>
|
||||||
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
||||||
<string key="NSMinSize">{94, 108}</string>
|
<string key="NSMinSize">{94, 108}</string>
|
||||||
<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
|
<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||||
<string key="NSFrameAutosaveName">newTweet</string>
|
<string key="NSFrameAutosaveName">newTweet</string>
|
||||||
<bool key="NSAutorecalculatesContentBorderThicknessMinY">NO</bool>
|
<bool key="NSAutorecalculatesContentBorderThicknessMinY">NO</bool>
|
||||||
<double key="NSContentBorderThicknessMinY">22</double>
|
<double key="NSContentBorderThicknessMinY">22</double>
|
||||||
|
<bool key="NSWindowIsRestorable">YES</bool>
|
||||||
</object>
|
</object>
|
||||||
<object class="NSCustomObject" id="796877042">
|
<object class="NSCustomObject" id="796877042">
|
||||||
<string key="NSClassName">NSApplication</string>
|
<string key="NSClassName">NSApplication</string>
|
||||||
|
@ -180,7 +175,9 @@
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
<object class="IBObjectRecord">
|
<object class="IBObjectRecord">
|
||||||
<int key="objectID">0</int>
|
<int key="objectID">0</int>
|
||||||
<reference key="object" ref="0"/>
|
<object class="NSArray" key="object" id="0">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
</object>
|
||||||
<reference key="children" ref="580458321"/>
|
<reference key="children" ref="580458321"/>
|
||||||
<nil key="parent"/>
|
<nil key="parent"/>
|
||||||
</object>
|
</object>
|
||||||
|
@ -311,12 +308,19 @@
|
||||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
<object class="IBPartialClassDescription">
|
<object class="IBPartialClassDescription">
|
||||||
<string key="className">MyDocument</string>
|
<string key="className">NewTweetWindow</string>
|
||||||
<string key="superclassName">NSDocument</string>
|
<string key="superclassName">NSDocument</string>
|
||||||
<object class="NSMutableDictionary" key="actions">
|
<object class="NSMutableDictionary" key="actions">
|
||||||
<string key="NS.key.0">sendTweet:</string>
|
<string key="NS.key.0">sendTweet:</string>
|
||||||
<string key="NS.object.0">NSControl</string>
|
<string key="NS.object.0">NSControl</string>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="NSMutableDictionary" key="actionInfosByName">
|
||||||
|
<string key="NS.key.0">sendTweet:</string>
|
||||||
|
<object class="IBActionInfo" key="NS.object.0">
|
||||||
|
<string key="name">sendTweet:</string>
|
||||||
|
<string key="candidateClassName">NSControl</string>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
<object class="NSMutableDictionary" key="outlets">
|
||||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
<object class="NSArray" key="dict.sortedKeys">
|
<object class="NSArray" key="dict.sortedKeys">
|
||||||
|
@ -330,9 +334,28 @@
|
||||||
<string>NSTextField</string>
|
<string>NSTextField</string>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
<object class="NSArray" key="dict.sortedKeys">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
<string>counter</string>
|
||||||
|
<string>textField</string>
|
||||||
|
</object>
|
||||||
|
<object class="NSMutableArray" key="dict.values">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
<object class="IBToOneOutletInfo">
|
||||||
|
<string key="name">counter</string>
|
||||||
|
<string key="candidateClassName">NSTextField</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBToOneOutletInfo">
|
||||||
|
<string key="name">textField</string>
|
||||||
|
<string key="candidateClassName">NSTextField</string>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||||
<string key="majorKey">IBProjectSource</string>
|
<string key="majorKey">IBUserSource</string>
|
||||||
<string key="minorKey">MyDocument.h</string>
|
<string key="minorKey"/>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
@ -429,6 +452,45 @@
|
||||||
<string>id</string>
|
<string>id</string>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="NSMutableDictionary" key="actionInfosByName">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
<object class="NSArray" key="dict.sortedKeys">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
<string>printDocument:</string>
|
||||||
|
<string>revertDocumentToSaved:</string>
|
||||||
|
<string>runPageLayout:</string>
|
||||||
|
<string>saveDocument:</string>
|
||||||
|
<string>saveDocumentAs:</string>
|
||||||
|
<string>saveDocumentTo:</string>
|
||||||
|
</object>
|
||||||
|
<object class="NSMutableArray" key="dict.values">
|
||||||
|
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||||
|
<object class="IBActionInfo">
|
||||||
|
<string key="name">printDocument:</string>
|
||||||
|
<string key="candidateClassName">id</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBActionInfo">
|
||||||
|
<string key="name">revertDocumentToSaved:</string>
|
||||||
|
<string key="candidateClassName">id</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBActionInfo">
|
||||||
|
<string key="name">runPageLayout:</string>
|
||||||
|
<string key="candidateClassName">id</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBActionInfo">
|
||||||
|
<string key="name">saveDocument:</string>
|
||||||
|
<string key="candidateClassName">id</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBActionInfo">
|
||||||
|
<string key="name">saveDocumentAs:</string>
|
||||||
|
<string key="candidateClassName">id</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBActionInfo">
|
||||||
|
<string key="name">saveDocumentTo:</string>
|
||||||
|
<string key="candidateClassName">id</string>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||||
<string key="majorKey">IBFrameworkSource</string>
|
<string key="majorKey">IBFrameworkSource</string>
|
||||||
<string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
|
<string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
|
|
@ -10,7 +10,7 @@
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
|
||||||
@interface MyDocument : NSDocument
|
@interface NewTweetWindow : NSDocument
|
||||||
{
|
{
|
||||||
IBOutlet NSTextField *textField;
|
IBOutlet NSTextField *textField;
|
||||||
IBOutlet NSTextField *counter;
|
IBOutlet NSTextField *counter;
|
|
@ -6,11 +6,11 @@
|
||||||
// Licence: BSD (see attached LICENCE.txt file).
|
// Licence: BSD (see attached LICENCE.txt file).
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "MyDocument.h"
|
#import "NewTweetWindow.h"
|
||||||
#import "Constants.h"
|
#import "Constants.h"
|
||||||
#import "TweetModel.h"
|
#import "TweetModel.h"
|
||||||
|
|
||||||
@implementation MyDocument
|
@implementation NewTweetWindow
|
||||||
|
|
||||||
@synthesize textField, counter;
|
@synthesize textField, counter;
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
//
|
|
||||||
// OAToken+WebView.h
|
|
||||||
// Twittia 2
|
|
||||||
//
|
|
||||||
// Created by Jeena on 02.05.10.
|
|
||||||
// Licence: BSD (see attached LICENCE.txt file).
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <OAuthConsumer/OAToken.h>
|
|
||||||
|
|
||||||
|
|
||||||
@interface OAToken(WebView)
|
|
||||||
|
|
||||||
@end
|
|
|
@ -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
|
|
31
OAuth.h
31
OAuth.h
|
@ -1,31 +0,0 @@
|
||||||
//
|
|
||||||
// OAuth.h
|
|
||||||
// Twittia 2
|
|
||||||
//
|
|
||||||
// Created by Jeena on 01.05.10.
|
|
||||||
// Licence: BSD (see attached LICENCE.txt file).
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <OAuthConsumer/OAToken.h>
|
|
||||||
#import <OAuthConsumer/OAConsumer.h>
|
|
||||||
#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
|
|
176
OAuth.m
176
OAuth.m
|
@ -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 <OAuthConsumer/OAConsumer.h>
|
|
||||||
#import <OAuthConsumer/OAMutableURLRequest.h>
|
|
||||||
#import <OAuthConsumer/OADataFetcher.h>
|
|
||||||
#import <OAuthConsumer/OAToken.h>
|
|
||||||
|
|
||||||
|
|
||||||
@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
|
|
|
@ -3,20 +3,17 @@
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 45;
|
objectVersion = 46;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* 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 */; };
|
1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */; };
|
||||||
1F122D49118E1DE100E83B77 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F122D48118E1DE100E83B77 /* Icon.icns */; };
|
1F122D49118E1DE100E83B77 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F122D48118E1DE100E83B77 /* Icon.icns */; };
|
||||||
1F1990C6117BCA960049BEA7 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1990C5117BCA960049BEA7 /* ApplicationServices.framework */; };
|
1F1990C6117BCA960049BEA7 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1990C5117BCA960049BEA7 /* ApplicationServices.framework */; };
|
||||||
1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1FE2FCA6117A8952000504B0 /* dsa_pub.pem */; };
|
1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1FE2FCA6117A8952000504B0 /* dsa_pub.pem */; };
|
||||||
1F3642EF118C8C35008198EF /* oauth.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F3642ED118C8C35008198EF /* oauth.js */; };
|
1F3642EF118C8C35008198EF /* oauth.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F3642ED118C8C35008198EF /* oauth.js */; };
|
||||||
1F3642F0118C8C35008198EF /* sha1.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F3642EE118C8C35008198EF /* sha1.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 */; };
|
1F4673FE1180F7EA006CC37C /* TwittiaCore.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F4673E61180F654006CC37C /* TwittiaCore.js */; };
|
||||||
1F4674081180F7EE006CC37C /* jQuery.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F4673E21180F519006CC37C /* jQuery.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 */; };
|
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 */; };
|
1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F70619E1178FBB300C85707 /* Carbon.framework */; };
|
||||||
1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F77DB46118C5F1C007C7F1E /* Constants.m */; };
|
1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F77DB46118C5F1C007C7F1E /* Constants.m */; };
|
||||||
1F98DC9E124BFFD7004289ED /* pin.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F98DC9D124BFFD7004289ED /* pin.png */; };
|
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 */; };
|
1FE2FC93117A818D000504B0 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE2FC92117A818D000504B0 /* Sparkle.framework */; };
|
||||||
1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */ = {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 */; };
|
1FFA36CD1177D861006C8562 /* even-bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 1FFA36C81177D861006C8562 /* even-bg.png */; };
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FFA37061177DAF4006C8562 /* WebKit.framework */; };
|
1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FFA37061177DAF4006C8562 /* WebKit.framework */; };
|
||||||
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; };
|
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; };
|
||||||
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; };
|
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 = (); }; };
|
8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
|
||||||
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; };
|
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
@ -49,7 +49,6 @@
|
||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
1F36440F118CC173008198EF /* OAuthConsumer.framework in CopyFiles */,
|
|
||||||
1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */,
|
1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -60,7 +59,7 @@
|
||||||
089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||||
13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
||||||
1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MyDocument.xib; sourceTree = "<group>"; };
|
1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/NewTweetWindow.xib; sourceTree = "<group>"; };
|
||||||
1DDD582B0DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
1DDD582B0DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
1F122D48118E1DE100E83B77 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = "<group>"; };
|
1F122D48118E1DE100E83B77 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = "<group>"; };
|
||||||
1F198FC7117BC4AB0049BEA7 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = "<group>"; };
|
1F198FC7117BC4AB0049BEA7 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = "<group>"; };
|
||||||
|
@ -69,11 +68,7 @@
|
||||||
1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ReleaseNotes.html; sourceTree = "<group>"; };
|
1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ReleaseNotes.html; sourceTree = "<group>"; };
|
||||||
1F3642ED118C8C35008198EF /* oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oauth.js; sourceTree = "<group>"; };
|
1F3642ED118C8C35008198EF /* oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oauth.js; sourceTree = "<group>"; };
|
||||||
1F3642EE118C8C35008198EF /* sha1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1.js; sourceTree = "<group>"; };
|
1F3642EE118C8C35008198EF /* sha1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1.js; sourceTree = "<group>"; };
|
||||||
1F364396118CBC77008198EF /* OAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuth.h; sourceTree = "<group>"; };
|
|
||||||
1F364397118CBC77008198EF /* OAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAuth.m; sourceTree = "<group>"; };
|
|
||||||
1F36440E118CC173008198EF /* OAuthConsumer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OAuthConsumer.framework; sourceTree = "<group>"; };
|
1F36440E118CC173008198EF /* OAuthConsumer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OAuthConsumer.framework; sourceTree = "<group>"; };
|
||||||
1F36465C118DA5A7008198EF /* OAToken+WebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OAToken+WebView.h"; sourceTree = "<group>"; };
|
|
||||||
1F36465D118DA5A7008198EF /* OAToken+WebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "OAToken+WebView.m"; sourceTree = "<group>"; };
|
|
||||||
1F4673E21180F519006CC37C /* jQuery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jQuery.js; sourceTree = "<group>"; };
|
1F4673E21180F519006CC37C /* jQuery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jQuery.js; sourceTree = "<group>"; };
|
||||||
1F4673E41180F590006CC37C /* jQuery-Plugins.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jQuery-Plugins.js"; sourceTree = "<group>"; };
|
1F4673E41180F590006CC37C /* jQuery-Plugins.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jQuery-Plugins.js"; sourceTree = "<group>"; };
|
||||||
1F4673E61180F654006CC37C /* TwittiaCore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwittiaCore.js; sourceTree = "<group>"; };
|
1F4673E61180F654006CC37C /* TwittiaCore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwittiaCore.js; sourceTree = "<group>"; };
|
||||||
|
@ -84,6 +79,11 @@
|
||||||
1F77DB45118C5F1C007C7F1E /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = "<group>"; };
|
1F77DB45118C5F1C007C7F1E /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = "<group>"; };
|
||||||
1F77DB46118C5F1C007C7F1E /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = "<group>"; };
|
1F77DB46118C5F1C007C7F1E /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = "<group>"; };
|
||||||
1F98DC9D124BFFD7004289ED /* pin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pin.png; sourceTree = "<group>"; };
|
1F98DC9D124BFFD7004289ED /* pin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pin.png; sourceTree = "<group>"; };
|
||||||
|
1FC254911427ADF90035D84B /* TwittiaOauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwittiaOauth.js; sourceTree = "<group>"; };
|
||||||
|
1FC254931427BC050035D84B /* index_oauth.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index_oauth.html; sourceTree = "<group>"; };
|
||||||
|
1FC2549A1427D9930035D84B /* AccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessToken.h; sourceTree = "<group>"; };
|
||||||
|
1FC2549B1427D9930035D84B /* AccessToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccessToken.m; sourceTree = "<group>"; };
|
||||||
|
1FC2549D1427DC2B0035D84B /* Constants.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Constants.js; sourceTree = "<group>"; };
|
||||||
1FE2FC92117A818D000504B0 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = "<group>"; };
|
1FE2FC92117A818D000504B0 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = "<group>"; };
|
||||||
1FE2FCA6117A8952000504B0 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
|
1FE2FCA6117A8952000504B0 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
|
||||||
1FFA36C81177D861006C8562 /* even-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "even-bg.png"; sourceTree = "<group>"; };
|
1FFA36C81177D861006C8562 /* even-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "even-bg.png"; sourceTree = "<group>"; };
|
||||||
|
@ -96,8 +96,8 @@
|
||||||
1FFA36D51177D879006C8562 /* ViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewDelegate.m; sourceTree = "<group>"; };
|
1FFA36D51177D879006C8562 /* ViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewDelegate.m; sourceTree = "<group>"; };
|
||||||
1FFA37061177DAF4006C8562 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
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 = "<group>"; };
|
2564AD2C0F5327BB00F57823 /* Twittia_2_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Twittia_2_Prefix.pch; sourceTree = "<group>"; };
|
||||||
2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyDocument.m; sourceTree = "<group>"; };
|
2A37F4ACFDCFA73011CA2CEA /* NewTweetWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewTweetWindow.m; sourceTree = "<group>"; };
|
||||||
2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyDocument.h; sourceTree = "<group>"; };
|
2A37F4AEFDCFA73011CA2CEA /* NewTweetWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewTweetWindow.h; sourceTree = "<group>"; };
|
||||||
2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; };
|
2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||||
2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||||
|
@ -111,7 +111,6 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
1FB074DD118DDAB60013A93C /* OAuthConsumer.framework in Frameworks */,
|
|
||||||
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */,
|
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */,
|
||||||
1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */,
|
1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */,
|
||||||
1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */,
|
1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */,
|
||||||
|
@ -160,10 +159,13 @@
|
||||||
1F3642ED118C8C35008198EF /* oauth.js */,
|
1F3642ED118C8C35008198EF /* oauth.js */,
|
||||||
1F3642EE118C8C35008198EF /* sha1.js */,
|
1F3642EE118C8C35008198EF /* sha1.js */,
|
||||||
1F4673E61180F654006CC37C /* TwittiaCore.js */,
|
1F4673E61180F654006CC37C /* TwittiaCore.js */,
|
||||||
|
1FC254911427ADF90035D84B /* TwittiaOauth.js */,
|
||||||
|
1FC2549D1427DC2B0035D84B /* Constants.js */,
|
||||||
1FFA36C81177D861006C8562 /* even-bg.png */,
|
1FFA36C81177D861006C8562 /* even-bg.png */,
|
||||||
1F98DC9D124BFFD7004289ED /* pin.png */,
|
1F98DC9D124BFFD7004289ED /* pin.png */,
|
||||||
1F705EA5117889FA00C85707 /* sprite-icons.png */,
|
1F705EA5117889FA00C85707 /* sprite-icons.png */,
|
||||||
1FFA36C91177D861006C8562 /* index.html */,
|
1FFA36C91177D861006C8562 /* index.html */,
|
||||||
|
1FC254931427BC050035D84B /* index_oauth.html */,
|
||||||
1FFA36CA1177D861006C8562 /* odd-bg.png */,
|
1FFA36CA1177D861006C8562 /* odd-bg.png */,
|
||||||
1FFA36CB1177D861006C8562 /* default.css */,
|
1FFA36CB1177D861006C8562 /* default.css */,
|
||||||
1F4673E21180F519006CC37C /* jQuery.js */,
|
1F4673E21180F519006CC37C /* jQuery.js */,
|
||||||
|
@ -191,16 +193,14 @@
|
||||||
1FFA36D31177D879006C8562 /* Controller.m */,
|
1FFA36D31177D879006C8562 /* Controller.m */,
|
||||||
1FFA36D41177D879006C8562 /* ViewDelegate.h */,
|
1FFA36D41177D879006C8562 /* ViewDelegate.h */,
|
||||||
1FFA36D51177D879006C8562 /* ViewDelegate.m */,
|
1FFA36D51177D879006C8562 /* ViewDelegate.m */,
|
||||||
2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */,
|
2A37F4AEFDCFA73011CA2CEA /* NewTweetWindow.h */,
|
||||||
2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */,
|
2A37F4ACFDCFA73011CA2CEA /* NewTweetWindow.m */,
|
||||||
1F364396118CBC77008198EF /* OAuth.h */,
|
|
||||||
1F364397118CBC77008198EF /* OAuth.m */,
|
|
||||||
1F77DB45118C5F1C007C7F1E /* Constants.h */,
|
1F77DB45118C5F1C007C7F1E /* Constants.h */,
|
||||||
1F77DB46118C5F1C007C7F1E /* Constants.m */,
|
1F77DB46118C5F1C007C7F1E /* Constants.m */,
|
||||||
1F36465C118DA5A7008198EF /* OAToken+WebView.h */,
|
|
||||||
1F36465D118DA5A7008198EF /* OAToken+WebView.m */,
|
|
||||||
1F618EC812DB5E6100E500D9 /* TweetModel.h */,
|
1F618EC812DB5E6100E500D9 /* TweetModel.h */,
|
||||||
1F618EC912DB5E6100E500D9 /* TweetModel.m */,
|
1F618EC912DB5E6100E500D9 /* TweetModel.m */,
|
||||||
|
1FC2549A1427D9930035D84B /* AccessToken.h */,
|
||||||
|
1FC2549B1427D9930035D84B /* AccessToken.m */,
|
||||||
);
|
);
|
||||||
name = Classes;
|
name = Classes;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -224,7 +224,7 @@
|
||||||
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
|
2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
|
||||||
8D15AC360486D014006FF6A4 /* Twittia_2-Info.plist */,
|
8D15AC360486D014006FF6A4 /* Twittia_2-Info.plist */,
|
||||||
089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
|
089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
|
||||||
1DDD58280DA1D0D100B32029 /* MyDocument.xib */,
|
1DDD58280DA1D0D100B32029 /* NewTweetWindow.xib */,
|
||||||
1DDD582A0DA1D0D100B32029 /* MainMenu.xib */,
|
1DDD582A0DA1D0D100B32029 /* MainMenu.xib */,
|
||||||
1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */,
|
1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */,
|
||||||
1F1990DF117BD2250049BEA7 /* Appcast.xml */,
|
1F1990DF117BD2250049BEA7 /* Appcast.xml */,
|
||||||
|
@ -268,8 +268,11 @@
|
||||||
/* Begin PBXProject section */
|
/* Begin PBXProject section */
|
||||||
2A37F4A9FDCFA73011CA2CEA /* Project object */ = {
|
2A37F4A9FDCFA73011CA2CEA /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastUpgradeCheck = 0410;
|
||||||
|
};
|
||||||
buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "Twittia 2" */;
|
buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "Twittia 2" */;
|
||||||
compatibilityVersion = "Xcode 3.1";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
developmentRegion = English;
|
developmentRegion = English;
|
||||||
hasScannedForEncodings = 1;
|
hasScannedForEncodings = 1;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
|
@ -292,13 +295,15 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
1FC2549F1427DC7F0035D84B /* Constants.js in Resources */,
|
||||||
|
1FC254951427BF150035D84B /* TwittiaOauth.js in Resources */,
|
||||||
1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */,
|
1F2746FC12D9057600339B4F /* dsa_pub.pem in Resources */,
|
||||||
1F3642EF118C8C35008198EF /* oauth.js in Resources */,
|
1F3642EF118C8C35008198EF /* oauth.js in Resources */,
|
||||||
1F3642F0118C8C35008198EF /* sha1.js in Resources */,
|
1F3642F0118C8C35008198EF /* sha1.js in Resources */,
|
||||||
1F4673FE1180F7EA006CC37C /* TwittiaCore.js in Resources */,
|
1F4673FE1180F7EA006CC37C /* TwittiaCore.js in Resources */,
|
||||||
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */,
|
8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */,
|
||||||
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */,
|
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */,
|
||||||
1DDD582C0DA1D0D100B32029 /* MyDocument.xib in Resources */,
|
1DDD582C0DA1D0D100B32029 /* NewTweetWindow.xib in Resources */,
|
||||||
1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */,
|
1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */,
|
||||||
1FFA36CD1177D861006C8562 /* even-bg.png in Resources */,
|
1FFA36CD1177D861006C8562 /* even-bg.png in Resources */,
|
||||||
1F4674091180F7F3006CC37C /* jQuery-Plugins.js in Resources */,
|
1F4674091180F7F3006CC37C /* jQuery-Plugins.js in Resources */,
|
||||||
|
@ -309,6 +314,7 @@
|
||||||
1F705EA6117889FA00C85707 /* sprite-icons.png in Resources */,
|
1F705EA6117889FA00C85707 /* sprite-icons.png in Resources */,
|
||||||
1F122D49118E1DE100E83B77 /* Icon.icns in Resources */,
|
1F122D49118E1DE100E83B77 /* Icon.icns in Resources */,
|
||||||
1F98DC9E124BFFD7004289ED /* pin.png in Resources */,
|
1F98DC9E124BFFD7004289ED /* pin.png in Resources */,
|
||||||
|
1FC254941427BC050035D84B /* index_oauth.html in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -319,13 +325,12 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8D15AC310486D014006FF6A4 /* MyDocument.m in Sources */,
|
1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */,
|
||||||
|
8D15AC310486D014006FF6A4 /* NewTweetWindow.m in Sources */,
|
||||||
8D15AC320486D014006FF6A4 /* main.m in Sources */,
|
8D15AC320486D014006FF6A4 /* main.m in Sources */,
|
||||||
1FFA36D71177D879006C8562 /* Controller.m in Sources */,
|
1FFA36D71177D879006C8562 /* Controller.m in Sources */,
|
||||||
1FFA36D81177D879006C8562 /* ViewDelegate.m in Sources */,
|
1FFA36D81177D879006C8562 /* ViewDelegate.m in Sources */,
|
||||||
1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */,
|
1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */,
|
||||||
1F364398118CBC77008198EF /* OAuth.m in Sources */,
|
|
||||||
1F36465E118DA5A7008198EF /* OAToken+WebView.m in Sources */,
|
|
||||||
1F618ECA12DB5E6100E500D9 /* TweetModel.m in Sources */,
|
1F618ECA12DB5E6100E500D9 /* TweetModel.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -341,12 +346,12 @@
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
1DDD58280DA1D0D100B32029 /* MyDocument.xib */ = {
|
1DDD58280DA1D0D100B32029 /* NewTweetWindow.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
1DDD58290DA1D0D100B32029 /* English */,
|
1DDD58290DA1D0D100B32029 /* English */,
|
||||||
);
|
);
|
||||||
name = MyDocument.xib;
|
name = NewTweetWindow.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
1DDD582A0DA1D0D100B32029 /* MainMenu.xib */ = {
|
1DDD582A0DA1D0D100B32029 /* MainMenu.xib */ = {
|
||||||
|
@ -380,7 +385,6 @@
|
||||||
"\"$(SRCROOT)/../oauth-obj-c/OAuthConsumer/build/Release\"",
|
"\"$(SRCROOT)/../oauth-obj-c/OAuthConsumer/build/Release\"",
|
||||||
);
|
);
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
|
||||||
GCC_MODEL_TUNING = G5;
|
GCC_MODEL_TUNING = G5;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
@ -424,7 +428,6 @@
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PREBINDING = NO;
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -437,7 +440,6 @@
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||||
PREBINDING = NO;
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
|
@ -6,10 +6,6 @@
|
||||||
// Licence: BSD (see attached LICENCE.txt file).
|
// 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) {
|
function Twittia(action) {
|
||||||
this.max_length = 100;
|
this.max_length = 100;
|
||||||
this.since_id;
|
this.since_id;
|
||||||
|
@ -262,10 +258,10 @@ Twittia.prototype.getNewData = function(supress_new_with_timeout) {
|
||||||
var message = { method:"GET" , action:url, parameters: parameters };
|
var message = { method:"GET" , action:url, parameters: parameters };
|
||||||
|
|
||||||
OAuth.completeRequest(message,
|
OAuth.completeRequest(message,
|
||||||
{ consumerKey : controller.oauth.consumerToken.key
|
{ consumerKey : OAUTH_CONSUMER_KEY
|
||||||
, consumerSecret: controller.oauth.consumerToken.secret
|
, consumerSecret: OAUTH_CONSUMER_SECRET
|
||||||
, token : controller.oauth.accessToken.key
|
, token : controller.accessToken.accessToken()
|
||||||
, tokenSecret : controller.oauth.accessToken.secret
|
, tokenSecret : controller.accessToken.secret()
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax(
|
$.ajax(
|
||||||
|
@ -301,10 +297,10 @@ Twittia.prototype.sendNewTweet = function(tweet, in_reply_to_status_id) {
|
||||||
var message = { method:"POST" , action:url, parameters:parameters };
|
var message = { method:"POST" , action:url, parameters:parameters };
|
||||||
|
|
||||||
OAuth.completeRequest(message,
|
OAuth.completeRequest(message,
|
||||||
{ consumerKey : controller.oauth.consumerToken.key
|
{ consumerKey : OAUTH_CONSUMER_KEY
|
||||||
, consumerSecret: controller.oauth.consumerToken.secret
|
, consumerSecret: OAUTH_CONSUMER_SECRET
|
||||||
, token : controller.oauth.accessToken.key
|
, token : controller.accessToken.accessToken()
|
||||||
, tokenSecret : controller.oauth.accessToken.secret
|
, tokenSecret : controller.accessToken.secret()
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -333,10 +329,10 @@ Twittia.prototype.retweet = function(status_id, item) {
|
||||||
var message = { method:"POST" , action:url };
|
var message = { method:"POST" , action:url };
|
||||||
|
|
||||||
OAuth.completeRequest(message,
|
OAuth.completeRequest(message,
|
||||||
{ consumerKey : controller.oauth.consumerToken.key
|
{ consumerKey : OAUTH_CONSUMER_KEY
|
||||||
, consumerSecret: controller.oauth.consumerToken.secret
|
, consumerSecret: OAUTH_CONSUMER_SECRET
|
||||||
, token : controller.oauth.accessToken.key
|
, token : controller.accessToken.accessToken()
|
||||||
, tokenSecret : controller.oauth.accessToken.secret
|
, tokenSecret : controller.accessToken.secret()
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -356,29 +352,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);
|
|
||||||
}
|
|
||||||
|
|
||||||
function replaceURLWithHTMLLinks(text, entities, message_node) {
|
function replaceURLWithHTMLLinks(text, entities, message_node) {
|
||||||
var urls = entities.urls;
|
var urls = entities.urls;
|
||||||
|
|
||||||
|
|
109
TwittiaOauth.js
Normal file
109
TwittiaOauth.js
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
//
|
||||||
|
// TwittiaOauth.js
|
||||||
|
// Twittia 2
|
||||||
|
//
|
||||||
|
// Created by Jeena on 19.09.11.
|
||||||
|
// Licence: BSD (see attached LICENCE.txt file).
|
||||||
|
//
|
||||||
|
|
||||||
|
function TwittiaOauth() {
|
||||||
|
this.requestAToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
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;
|
|
@ -22,7 +22,7 @@
|
||||||
<key>CFBundleTypeRole</key>
|
<key>CFBundleTypeRole</key>
|
||||||
<string>Editor</string>
|
<string>Editor</string>
|
||||||
<key>NSDocumentClass</key>
|
<key>NSDocumentClass</key>
|
||||||
<string>MyDocument</string>
|
<string>NewTweetWindow</string>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
|
|
|
@ -13,9 +13,11 @@
|
||||||
@interface ViewDelegate : NSObject {
|
@interface ViewDelegate : NSObject {
|
||||||
WebView *timelineView;
|
WebView *timelineView;
|
||||||
WebView *mentionsView;
|
WebView *mentionsView;
|
||||||
|
WebView *twittiaOauthView;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (nonatomic, assign) WebView *timelineView;
|
@property (nonatomic, assign) WebView *timelineView;
|
||||||
@property (nonatomic, assign) WebView *mentionsView;
|
@property (nonatomic, assign) WebView *mentionsView;
|
||||||
|
@property (nonatomic, assign) WebView *twittiaOauthView;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -11,13 +11,18 @@
|
||||||
|
|
||||||
@implementation ViewDelegate
|
@implementation ViewDelegate
|
||||||
|
|
||||||
@synthesize timelineView, mentionsView;
|
@synthesize timelineView, mentionsView, twittiaOauthView;
|
||||||
|
|
||||||
- (void)webView:(WebView *)sender addMessageToConsole:(NSDictionary *)message;{
|
- (void)webView:(WebView *)sender addMessageToConsole:(NSDictionary *)message;{
|
||||||
|
|
||||||
if (![message isKindOfClass:[NSDictionary class]]) return;
|
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:@"sourceURL"] lastPathComponent],
|
||||||
[message objectForKey:@"lineNumber"],
|
[message objectForKey:@"lineNumber"],
|
||||||
[message objectForKey:@"message"]
|
[message objectForKey:@"message"]
|
||||||
|
@ -25,7 +30,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
|
- (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 <WebPolicyDecisionListener>)listener {
|
- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener {
|
||||||
|
@ -34,18 +43,26 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
|
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
|
||||||
NSString *action = @"home_timeline";
|
|
||||||
NSString *delay = @"1";
|
|
||||||
|
|
||||||
if (sender == mentionsView) {
|
if (sender == twittiaOauthView) {
|
||||||
action = @"mentions";
|
|
||||||
delay = @"1000";
|
|
||||||
}
|
|
||||||
|
|
||||||
[sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:
|
[twittiaOauthView stringByEvaluatingJavaScriptFromString:@"setTimeout( function() { twittia_oauth = new TwittiaOauth(); }, 2);"];
|
||||||
@"setTimeout(function(){ twittia_instance = new Twittia('%@'); \
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(twittia_instance.body); \
|
} else {
|
||||||
setTimeout(function() { loadPlugin(controller.pluginURL()) }, 1); }, %@);", action, delay]];
|
|
||||||
|
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
|
@end
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<script type="text/javascript" src="jQuery-Plugins.js"></script>
|
<script type="text/javascript" src="jQuery-Plugins.js"></script>
|
||||||
<script type="text/javascript" src="sha1.js"></script>
|
<script type="text/javascript" src="sha1.js"></script>
|
||||||
<script type="text/javascript" src="oauth.js"></script>
|
<script type="text/javascript" src="oauth.js"></script>
|
||||||
|
<script type="text/javascript" src="Constants.js"></script>
|
||||||
<script type="text/javascript" src="TwittiaCore.js"></script>
|
<script type="text/javascript" src="TwittiaCore.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
15
index_oauth.html
Normal file
15
index_oauth.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Twittia</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<script type="text/javascript" src="jQuery.js"></script>
|
||||||
|
<script type="text/javascript" src="jQuery-Plugins.js"></script>
|
||||||
|
<script type="text/javascript" src="sha1.js"></script>
|
||||||
|
<script type="text/javascript" src="oauth.js"></script>
|
||||||
|
<script type="text/javascript" src="Constants.js"></script>
|
||||||
|
<script type="text/javascript" src="TwittiaOauth.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
Reference in a new issue