\ No newline at end of file
diff --git a/OAuthConsumer.framework/Versions/A/OAuthConsumer b/OAuthConsumer.framework/Versions/A/OAuthConsumer
deleted file mode 100755
index 3275e1a..0000000
Binary files a/OAuthConsumer.framework/Versions/A/OAuthConsumer and /dev/null differ
diff --git a/OAuthConsumer.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/OAuthConsumer.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
deleted file mode 100644
index 514729a..0000000
Binary files a/OAuthConsumer.framework/Versions/A/Resources/English.lproj/InfoPlist.strings and /dev/null differ
diff --git a/OAuthConsumer.framework/Versions/A/Resources/Info.plist b/OAuthConsumer.framework/Versions/A/Resources/Info.plist
deleted file mode 100644
index 23f6877..0000000
--- a/OAuthConsumer.framework/Versions/A/Resources/Info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- English
- CFBundleExecutable
- OAuthConsumer
- CFBundleIdentifier
- net.oauth.OAuthConsumer
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- OAuthConsumer
- CFBundlePackageType
- FMWK
- CFBundleSignature
- ????
- CFBundleVersion
- 0.1.1
-
-
diff --git a/OAuthConsumer.framework/Versions/Current b/OAuthConsumer.framework/Versions/Current
deleted file mode 120000
index 8c7e5a6..0000000
--- a/OAuthConsumer.framework/Versions/Current
+++ /dev/null
@@ -1 +0,0 @@
-A
\ No newline at end of file
diff --git a/ReleaseNotes.html b/ReleaseNotes.html
index 8004562..2477f8a 100644
--- a/ReleaseNotes.html
+++ b/ReleaseNotes.html
@@ -11,6 +11,16 @@
+
+
+Twittia 2.4.0
+
+Rewritten the OAuth parts in pure JavaScript.
+Small bugfixes.
+Added thumbnails for Twitter, Twitpic, Yfrog and YouTube links.
+Raplacing to.co, bit.ly and j.mp links with full URLs.
+
+
Twittia 2.3.1
Fixed problem with replay to id where you weren't able to replay to anyone.
diff --git a/Twittia 2.xcodeproj/project.pbxproj b/Twittia 2.xcodeproj/project.pbxproj
index f0e2937..4108261 100644
--- a/Twittia 2.xcodeproj/project.pbxproj
+++ b/Twittia 2.xcodeproj/project.pbxproj
@@ -3,20 +3,17 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 45;
+ objectVersion = 46;
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 */; };
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,11 @@
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 */; };
+ 1FA09847144602530079E258 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA09846144602530079E258 /* libicucore.dylib */; };
+ 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 */; };
@@ -37,7 +38,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 */
@@ -49,7 +50,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 1F36440F118CC173008198EF /* OAuthConsumer.framework in CopyFiles */,
1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -60,7 +60,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 = ""; };
@@ -69,11 +69,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 = ""; };
@@ -84,6 +80,12 @@
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 = ""; };
+ 1FA09846144602530079E258 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; };
+ 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 = ""; };
@@ -96,8 +98,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 = ""; };
@@ -111,7 +113,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 1FB074DD118DDAB60013A93C /* OAuthConsumer.framework in Frameworks */,
+ 1FA09847144602530079E258 /* libicucore.dylib in Frameworks */,
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */,
1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */,
1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */,
@@ -160,10 +162,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 */,
@@ -175,6 +180,7 @@
2A37F4AAFDCFA73011CA2CEA /* Twittia 2 */ = {
isa = PBXGroup;
children = (
+ 1FA09846144602530079E258 /* libicucore.dylib */,
2A37F4ABFDCFA73011CA2CEA /* Classes */,
2A37F4AFFDCFA73011CA2CEA /* Other Sources */,
2A37F4B8FDCFA73011CA2CEA /* Resources */,
@@ -191,16 +197,14 @@
1FFA36D31177D879006C8562 /* Controller.m */,
1FFA36D41177D879006C8562 /* ViewDelegate.h */,
1FFA36D51177D879006C8562 /* ViewDelegate.m */,
- 2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */,
- 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */,
- 1F364396118CBC77008198EF /* OAuth.h */,
- 1F364397118CBC77008198EF /* OAuth.m */,
+ 2A37F4AEFDCFA73011CA2CEA /* NewTweetWindow.h */,
+ 2A37F4ACFDCFA73011CA2CEA /* NewTweetWindow.m */,
1F77DB45118C5F1C007C7F1E /* Constants.h */,
1F77DB46118C5F1C007C7F1E /* Constants.m */,
- 1F36465C118DA5A7008198EF /* OAToken+WebView.h */,
- 1F36465D118DA5A7008198EF /* OAToken+WebView.m */,
1F618EC812DB5E6100E500D9 /* TweetModel.h */,
1F618EC912DB5E6100E500D9 /* TweetModel.m */,
+ 1FC2549A1427D9930035D84B /* AccessToken.h */,
+ 1FC2549B1427D9930035D84B /* AccessToken.m */,
);
name = Classes;
sourceTree = "";
@@ -224,7 +228,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 */,
@@ -268,8 +272,11 @@
/* Begin PBXProject section */
2A37F4A9FDCFA73011CA2CEA /* Project object */ = {
isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0450;
+ };
buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "Twittia 2" */;
- compatibilityVersion = "Xcode 3.1";
+ compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
@@ -292,13 +299,15 @@
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 */,
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 */,
@@ -309,6 +318,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 +329,12 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 8D15AC310486D014006FF6A4 /* MyDocument.m in Sources */,
+ 1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */,
+ 8D15AC310486D014006FF6A4 /* NewTweetWindow.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;
@@ -341,12 +350,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 */ = {
@@ -372,15 +381,13 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)\"",
- "\"$(SRCROOT)/../../Desktop/mpoauthconnection-read-only/build/Release\"",
- "\"$(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;
@@ -396,13 +403,12 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)\"",
- "\"$(SRCROOT)/../../Desktop/mpoauthconnection-read-only/build/Release\"",
- "\"$(SRCROOT)/../oauth-obj-c/OAuthConsumer/build/Release\"",
);
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
@@ -424,7 +430,6 @@
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.5;
ONLY_ACTIVE_ARCH = YES;
- PREBINDING = NO;
SDKROOT = macosx;
};
name = Debug;
@@ -437,7 +442,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.5;
- PREBINDING = NO;
+ ONLY_ACTIVE_ARCH = NO;
SDKROOT = macosx;
};
name = Release;
diff --git a/TwittiaCore.js b/TwittiaCore.js
index 39ab3a0..7e8bd40 100644
--- a/TwittiaCore.js
+++ b/TwittiaCore.js
@@ -6,19 +6,24 @@
// Licence: BSD (see attached LICENCE.txt file).
//
-API_PATH = "http://api.twitter.com/1/";
-//API_PATH = "http://identi.ca/api/";
-
function Twittia(action) {
- this.max_length = 100;
- this.since_id;
- this.timeout = 2 * 60 * 1000;
- this.action = action;
- this.getNewData();
- this.unread_mentions = 0;
-
- this.body = document.createElement("ol");
- this.body.className = this.action;
+ this.max_length = 100;
+ this.since_id;
+ this.timeout = 2 * 60 * 1000;
+ this.action = action;
+ this.getNewData();
+ this.unread_mentions = 0;
+
+ this.body = document.createElement("ol");
+ this.body.className = this.action;
+
+/*
+ if (action == "home_timeline") {
+ this.usernames = [];
+ this.getUsernames("friends");
+ this.getUsernames("followers");
+ }
+*/
}
Twittia.prototype.newStatus = function(status, supress_new_with_timeout) {
@@ -57,22 +62,13 @@ Twittia.prototype.getItem = function(status) {
}
var template = this.getTemplate();
- /*
- template.item.id = "id-" + status.id_str;
- template.item.onmousedown = function(e) { if(e.button == 2) {
- var target = e.target;
- while(target.nodeName != "LI" && target != null) {
- target = target.parentNode;
- }
-
- alert(target.id);
- }}*/
+
template.reply_to.onclick = function() { replyTo(status.user.screen_name, status.id_str); return false; }
template.retweet.onclick = function() { template.retweet.className = "hidden"; _this.retweet(status.id_str, template.item); return false; }
template.image.src = status.user.profile_image_url;
template.username.innerText = status.user.screen_name;
- template.username.href = API_PATH + status.user.screen_name
+ template.username.href = WEBSITE_PATH + status.user.screen_name
if(original_status != null) {
var retweeted = document.createElement("span")
@@ -82,17 +78,17 @@ Twittia.prototype.getItem = function(status) {
retweeted.appendChild(retweeted_icon);
var retweeted_by = document.createElement("a");
retweeted_by.innerText = original_status.user.screen_name + " ";
- retweeted_by.href = API_PATH + original_status.user.screen_name;
+ retweeted_by.href = WEBSITE_PATH + original_status.user.screen_name;
retweeted.appendChild(document.createTextNode("@"));
retweeted.appendChild(retweeted_by);
template.in_reply.parentNode.parentNode.insertBefore(retweeted, template.in_reply.parent);
}
- if(status.in_reply_to_status_id != null) template.in_reply.innerText = status.in_reply_to_screen_name;
+ if(status.in_reply_to_status_id_str != null) template.in_reply.innerText = status.in_reply_to_screen_name;
else template.in_reply.parentNode.className = "hidden";
- template.in_reply.href = API_PATH + status.in_reply_to_screen_name + "/status/" + status.in_reply_to_status_id;
+ template.in_reply.href = WEBSITE_PATH + status.in_reply_to_screen_name + "/status/" + status.in_reply_to_status_id_str;
- template.message.innerHTML = replaceTwitterLinks(replaceURLWithHTMLLinks(status.text));
+ template.message.innerHTML = replaceTwitterLinks(replaceURLWithHTMLLinks(status.text, status.entities, template.message));
var time = document.createElement("abbr");
time.innerText = status.created_at;
@@ -100,7 +96,7 @@ Twittia.prototype.getItem = function(status) {
time.className = "timeago";
$(time).timeago();
template.ago.appendChild(time);
- template.ago.href = API_PATH + status.user.screen_name + "/status/" + status.id_str;
+ template.ago.href = WEBSITE_PATH + status.user.screen_name + "/status/" + status.id_str;
// {"type":"Point","coordinates":[57.10803113,12.25854746]}
if (status.geo && status.geo.type == "Point") {
@@ -109,6 +105,48 @@ Twittia.prototype.getItem = function(status) {
}
template.source.innerHTML = status.source;
+
+ if(status.entities.media) {
+
+ for(var i=0; i 0) {
+ _this.getUsernames(type, data.next_cursor);
+ }
+ },
+ error:function (xhr, ajaxOptions, thrownError) {
+ alert(xhr.status);
+ alert(thrownError);
+ }
+ });
}
-function replaceURLWithHTMLLinks(text) {
- var exp = /(\b(https?|ftp|file):\/\/\S+)/ig;
- return text.replace(exp,"$1");
+Twittia.prototype.getUsernamesFromIds = function(ids) {
+
+ var url = API_PATH + "users/lookup.json";
+ var _this = this;
+ var parameters = { user_id:ids.join(",") };
+ 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()
+ });
+
+ $.ajax({
+ beforeSend: function(xhr) {
+ xhr.setRequestHeader("Authorization", OAuth.getAuthorizationHeader("", message.parameters));
+ },
+ url: url + "?user_id=" + ids.join(","),
+ type: 'GET',
+ dataType: 'json',
+ success: function(data) {
+ for (var i=0; i < data.length; i++) {
+ _this.usernames.push(data[i].screen_name);
+ }
+ },
+ error:function (xhr, ajaxOptions, thrownError) {
+ alert(xhr.status);
+ alert(thrownError);
+ }
+ });
+}
+
+Twittia.prototype.findUsernamesFor = function(query) {
+ var ret = [];
+ for (var i=0; i < this.usernames.length; i++) {
+ if(this.usernames[i].startsWith(query)) {
+ ret.push(this.usernames[i]);
+ }
+ }
+ return ret;
+}
+
+/* Helper functions */
+
+function replaceURLWithHTMLLinks(text, entities, message_node) {
+ var urls = entities.urls;
+
+ for(var i = 0; i" + replace + "");
+
+ var media = null;
+
+ // add thumbnail
+ if(replace.startsWith("http://youtube.com/") || replace.startsWith("http://www.youtube.com/")) {
+ var v = getUrlVars(replace)["v"];
+ if (v) {
+ media = {
+ type: "twittia_youtube",
+ url: original,
+ media_url: "http://img.youtube.com/vi/" + v + "/1.jpg"
+ }
+ }
+
+ } else if (replace.startsWith("http://twitpic.com/")) {
+ media = {
+ type: "twittia_photo",
+ url: original,
+ media_url: "http://twitpic.com/show/mini/" + replace.substring("http://twitpic.com/".length)
+ }
+
+ } else if (replace.startsWith("http://yfrog")) {
+ media = {
+ type: "twittia_photo",
+ url: original,
+ media_url: replace + ":small"
+ }
+
+ } else if (replace.startsWith("http://instagr.am/p/") || replace.startsWith("http://instagram.com/p/")) {
+ media = {
+ type: "twittia_photo",
+ url: original,
+ media_url: replace + "media?size=t"
+ }
+ }
+
+ if(media) {
+ if(entities.media) {
+ entities.media.push(media);
+ } else {
+ entities.media = [media];
+ }
+ }
+
+ }
+
+ return text;
}
function replaceTwitterLinks(text) {
@@ -365,5 +524,50 @@ function loadPlugin(url) {
document.getElementsByTagName("head")[0].appendChild(plugin);
}
+String.prototype.startsWith = function(prefix) {
+ return this.indexOf(prefix) === 0;
+}
+
+String.prototype.endsWith = function(suffix) {
+ return this.match(suffix+"$") == suffix;
+};
+
+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;
+}
+
+function replaceShortened(url, message_node) {
+ var api = "http://api.bitly.com";
+ if(url.startsWith("http://j.mp/")) {
+ api = "http://api.j.mp";
+ }
+
+ var api_url = api + "/v3/expand?format=json&apiKey=R_4fc2a1aa461d076556016390fa6400f6&login=twittia&shortUrl=" + url;
+
+ $.ajax({
+ url: api_url,
+ success: function(data) {
+ var new_url = data.data.expand[0].long_url;
+ if (new_url) {
+ var regex = new RegExp(url, "g");
+ message_node.innerHTML = message_node.innerHTML.replace(regex, new_url);
+ }
+ },
+ error:function (xhr, ajaxOptions, thrownError) {
+ alert(xhr.status);
+ alert(thrownError);
+ }
+ });
+}
var twittia_instance;
diff --git a/TwittiaOauth.js b/TwittiaOauth.js
new file mode 100644
index 0000000..b1400b9
--- /dev/null
+++ b/TwittiaOauth.js
@@ -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;
\ No newline at end of file
diff --git a/Twittia_2-Info.plist b/Twittia_2-Info.plist
index 55a5109..71adde9 100644
--- a/Twittia_2-Info.plist
+++ b/Twittia_2-Info.plist
@@ -22,7 +22,7 @@
CFBundleTypeRole
Editor
NSDocumentClass
- MyDocument
+ NewTweetWindow
CFBundleExecutable
@@ -42,7 +42,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.3.1
+ 2.4.0
CFBundleSignature
????
CFBundleURLTypes
@@ -58,7 +58,7 @@
CFBundleVersion
- 2.3.2
+ 2.4.0
LSApplicationCategoryType
public.app-category.lifestyle
LSMinimumSystemVersion
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/default.css b/default.css
index 10cf89e..c404f7e 100644
--- a/default.css
+++ b/default.css
@@ -112,6 +112,20 @@ p {
height: 75px;
}
+.images:empty {
+ display: none;
+}
+
+.images {
+ padding-top: 5px;
+}
+
+.images img {
+ border-radius: 5px;
+ max-height: 75px;
+ margin-right: 5px;
+}
+
.delete {
font-weight: normal;
color: #555;
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