diff --git a/LICENCE.txt b/LICENCE.txt index 3bad9c5..6ae6995 100644 --- a/LICENCE.txt +++ b/LICENCE.txt @@ -2,7 +2,7 @@ BSD license =========== -Copyright (c) 2010, Jeena Paradies +Copyright (c) 2013, Jeena Paradies All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/Linux/Bungloo.py b/Linux/Bungloo.py index 9c7f990..de6deee 100755 --- a/Linux/Bungloo.py +++ b/Linux/Bungloo.py @@ -15,7 +15,7 @@ class Bungloo: self.preferences = Windows.Preferences(self) self.preferences.show() - self.oauth_implementation = Windows.Oauth(self) + self.oauth_implementation = Windows.Oauth(self) if self.controller.stringForKey("user_access_token") != "": self.authentification_succeded() @@ -61,7 +61,7 @@ class Controller(QtCore.QObject): self.app = app os.path.expanduser("~/.bungloo/") - + self.config_path = os.path.expanduser('~/.bungloo/bungloo.cfg') if os.access(self.config_path, os.R_OK): with open(self.config_path, 'r') as f: @@ -196,7 +196,7 @@ class Controller(QtCore.QObject): msgBox = QtGui.QMessageBox() msgBox.setText(errorMessage) msgBox.exec_() - + @QtCore.pyqtSlot(str, str) def alertTitleWithMessage(self, title, message): msgBox = QtGui.QMessageBox() @@ -230,6 +230,6 @@ class Console(QtCore.QObject): def debug(self, string): print ": " + string - + if __name__ == "__main__": Bungloo() diff --git a/Linux/Helper.py b/Linux/Helper.py index 56f132d..4fb321c 100644 --- a/Linux/Helper.py +++ b/Linux/Helper.py @@ -10,119 +10,119 @@ import os import array class WebPage(QtWebKit.QWebPage): - def __init__(self, parent=0, app=None): - super(QtWebKit.QWebPage, self).__init__(parent) - self.setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateExternalLinks) - self.app = app + def __init__(self, parent=0, app=None): + super(QtWebKit.QWebPage, self).__init__(parent) + self.setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateExternalLinks) + self.app = app - def javaScriptConsoleMessage(self, message, lineNumber, sourceId): - print str(message) + " on line: " + str(lineNumber) + " Source: " + str(sourceId) + def javaScriptConsoleMessage(self, message, lineNumber, sourceId): + print str(message) + " on line: " + str(lineNumber) + " Source: " + str(sourceId) - def checkRequest(self, request): - print request + def checkRequest(self, request): + print request class WebViewCreator(QtWebKit.QWebView): - def __init__(self, app, local=True, parent=None): - if parent != None: - QtGui.QWidget.__init__(self) - else: - QtGui.QWidget.__init__(self) + def __init__(self, app, local=True, parent=None): + if parent != None: + QtGui.QWidget.__init__(self) + else: + QtGui.QWidget.__init__(self) - self.app = app - self.is_local = local - self.connect(self, SIGNAL("linkClicked (const QUrl&)"), self.app.controller.openQURL) - self.setPage(WebPage(self, self.app)) - - def load_local(self, callback=None): - self.page().settings().setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True) - self.page().settings().setAttribute(QtWebKit.QWebSettings.LocalStorageEnabled, True) - self.loadFinished.connect(lambda ok: self.load_finished(ok, callback)) + self.app = app + self.is_local = local + self.connect(self, SIGNAL("linkClicked (const QUrl&)"), self.app.controller.openQURL) + self.setPage(WebPage(self, self.app)) - frame = self.page().mainFrame() - frame.addToJavaScriptWindowObject("controller", self.app.controller) - frame.addToJavaScriptWindowObject("__console", self.app.console) + def load_local(self, callback=None): + self.page().settings().setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True) + self.page().settings().setAttribute(QtWebKit.QWebSettings.LocalStorageEnabled, True) + self.loadFinished.connect(lambda ok: self.load_finished(ok, callback)) - url = self.app.resources_uri() + "/index.html" - self.load(QtCore.QUrl(url)) + frame = self.page().mainFrame() + frame.addToJavaScriptWindowObject("controller", self.app.controller) + frame.addToJavaScriptWindowObject("__console", self.app.console) - def load_url(self, url, callback=None): - self.loadFinished.connect(lambda ok: self.load_finished(ok, callback)) - self.load(QtCore.QUrl(url)) + url = self.app.resources_uri() + "/index.html" + self.load(QtCore.QUrl(url)) - def load_finished(self, ok, callback=None): - frame = self.page().mainFrame() - if self.is_local: - frame.evaluateJavaScript("var OS_TYPE = 'linux';") + def load_url(self, url, callback=None): + self.loadFinished.connect(lambda ok: self.load_finished(ok, callback)) + self.load(QtCore.QUrl(url)) - js_plugin_path = os.path.expanduser('~/.bungloo/Plugin.js') - if os.access(js_plugin_path, os.R_OK): - func = "setTimeout(function() { loadJsPlugin('file://localhost" + js_plugin_path + "') }, 1000);" - frame.evaluateJavaScript(func) + def load_finished(self, ok, callback=None): + frame = self.page().mainFrame() + if self.is_local: + frame.evaluateJavaScript("var OS_TYPE = 'linux';") - css_plugin_path = os.path.expanduser('~/.bungloo/Plugin.css') - if os.access(css_plugin_path, os.R_OK): - func = "setTimeout(function() { loadCssPlugin('file://localhost" + css_plugin_path + "') }, 1000);" - frame.evaluateJavaScript(func) + js_plugin_path = os.path.expanduser('~/.bungloo/Plugin.js') + if os.access(js_plugin_path, os.R_OK): + func = "setTimeout(function() { loadJsPlugin('file://localhost" + js_plugin_path + "') }, 1000);" + frame.evaluateJavaScript(func) - if callback: - callback(ok) + css_plugin_path = os.path.expanduser('~/.bungloo/Plugin.css') + if os.access(css_plugin_path, os.R_OK): + func = "setTimeout(function() { loadCssPlugin('file://localhost" + css_plugin_path + "') }, 1000);" + frame.evaluateJavaScript(func) + + if callback: + callback(ok) class NetworkAccessManager(QNetworkAccessManager): - def __init__(self, old_manager, bungloo_callback): - QNetworkAccessManager.__init__(self) + def __init__(self, old_manager, bungloo_callback): + QNetworkAccessManager.__init__(self) - self.bungloo_callback = bungloo_callback + self.bungloo_callback = bungloo_callback + + self.old_manager = old_manager + self.setCache(old_manager.cache()) + self.setCookieJar(old_manager.cookieJar()) + self.setProxy(old_manager.proxy()) + self.setProxyFactory(old_manager.proxyFactory()) + + def createRequest(self, operation, request, data): + if request.url().scheme() != "bungloo": + return QNetworkAccessManager.createRequest(self, operation, request, data) + else: + self.bungloo_callback(request.url()) + return QNetworkAccessManager.createRequest(self, QNetworkAccessManager.GetOperation, QNetworkRequest(QtCore.QUrl())) - self.old_manager = old_manager - self.setCache(old_manager.cache()) - self.setCookieJar(old_manager.cookieJar()) - self.setProxy(old_manager.proxy()) - self.setProxyFactory(old_manager.proxyFactory()) - - def createRequest(self, operation, request, data): - if request.url().scheme() != "bungloo": - return QNetworkAccessManager.createRequest(self, operation, request, data) - else: - self.bungloo_callback(request.url()) - return QNetworkAccessManager.createRequest(self, QNetworkAccessManager.GetOperation, QNetworkRequest(QtCore.QUrl())) - class PostModel: - def __init__(self): - self.text = None - self.inReplyTostatusId = None - self.inReplyToEntity = None - self.location = None - self.imageFilePath = None - self.isPrivate = False + def __init__(self): + self.text = None + self.inReplyTostatusId = None + self.inReplyToEntity = None + self.location = None + self.imageFilePath = None + self.isPrivate = False class RestorableWindow(QtGui.QMainWindow): - def __init__(self, action, app): - self.action = action - self.app = app - QtGui.QMainWindow.__init__(self) - self.restoreGeometry(QtCore.QByteArray.fromRawData(self.app.controller.stringForKey("mainWindowGeometry-" + self.action))) - self.restoreState(QtCore.QByteArray.fromRawData(self.app.controller.stringForKey("mainWindowState-" + self.action))) + def __init__(self, action, app): + self.action = action + self.app = app + QtGui.QMainWindow.__init__(self) + self.restoreGeometry(QtCore.QByteArray.fromRawData(self.app.controller.stringForKey("mainWindowGeometry-" + self.action))) + self.restoreState(QtCore.QByteArray.fromRawData(self.app.controller.stringForKey("mainWindowState-" + self.action))) - def closeEvent(self, event): - self._saveGeometry() + def closeEvent(self, event): + self._saveGeometry() - def _saveGeometry(self): - self.app.controller.setStringForKey(self.saveGeometry(), "mainWindowGeometry-" + self.action) - self.app.controller.setStringForKey(self.saveState(), "mainWindowState-" + self.action) + def _saveGeometry(self): + self.app.controller.setStringForKey(self.saveGeometry(), "mainWindowGeometry-" + self.action) + self.app.controller.setStringForKey(self.saveState(), "mainWindowState-" + self.action) - def hide(self): - self._saveGeometry() - QtGui.QMainWindow.close(self) + def hide(self): + self._saveGeometry() + QtGui.QMainWindow.close(self) - def sizeHint(self): - return QtCore.QSize(300, 500) + def sizeHint(self): + return QtCore.QSize(300, 500) - def show(self): - QtGui.QMainWindow.show(self) - self.activateWindow() - self.raise_() \ No newline at end of file + def show(self): + QtGui.QMainWindow.show(self) + self.activateWindow() + self.raise_() \ No newline at end of file diff --git a/Linux/Windows.py b/Linux/Windows.py index 9a132c3..a416645 100644 --- a/Linux/Windows.py +++ b/Linux/Windows.py @@ -99,7 +99,7 @@ class Timeline: def initUI(self): - newPostAction = QtGui.QAction("&New Post", self.window) + newPostAction = QtGui.QAction("&New Post", self.window) newPostAction.setShortcut("Ctrl+N") newPostAction.setStatusTip("Open new post window") newPostAction.triggered.connect(self.app.controller.openNewMessageWidow) @@ -253,12 +253,12 @@ class NewPost(Helper.RestorableWindow): self.imageFilePath = None def initUI(self): - newPostAction = QtGui.QAction("&New Post", self) + newPostAction = QtGui.QAction("&New Post", self) newPostAction.setShortcut("Ctrl+N") newPostAction.setStatusTip("Open new post window") newPostAction.triggered.connect(self.app.controller.openNewMessageWidow) - sendPostAction = QtGui.QAction("&Send Post", self) + sendPostAction = QtGui.QAction("&Send Post", self) sendPostAction.setShortcut("Ctrl+Return") sendPostAction.setStatusTip("Send post") sendPostAction.triggered.connect(self.sendMessage) diff --git a/Mac/AccessToken.m b/Mac/AccessToken.m index 7c75464..f60e91c 100644 --- a/Mac/AccessToken.m +++ b/Mac/AccessToken.m @@ -13,109 +13,109 @@ - (id)init { - self = [super init]; - if (self) { - // Initialization code here. - d = [NSUserDefaults standardUserDefaults]; - //[d removeObjectForKey:@"user_access_token"]; - } - - return self; + self = [super init]; + if (self) { + // Initialization code here. + d = [NSUserDefaults standardUserDefaults]; + //[d removeObjectForKey:@"user_access_token"]; + } + + return self; } - (void)setString:(NSString *)string forKey:(NSString *)aKey { - [d setObject:string forKey:aKey]; - [d synchronize]; + [d setObject:string forKey:aKey]; + [d synchronize]; } - (NSString *)stringForKey:(NSString *)aKey { - return [d objectForKey:aKey]; + return [d objectForKey:aKey]; } - (void)setAccessToken:(NSString *)_accessToken { - [d synchronize]; + [d synchronize]; } - (NSString *)accessToken { - return [d objectForKey:@"accessToken"]; + return [d objectForKey:@"accessToken"]; } - (void)setSecret:(NSString *)_secret { - UInt32 _passwordLength = 0; - char *_password = nil; - SecKeychainItemRef item = nil; - SecKeychainFindGenericPassword(NULL, 6, "Bungloo", 17, "BunglooUserAccount", &_passwordLength, (void **)&_password, &item); - - OSStatus status; - void * passwordData = (void*)[_secret cStringUsingEncoding:NSUTF8StringEncoding]; - UInt32 passwordLength = strlen((char*)passwordData); - if (!item) - { - status = SecKeychainAddGenericPassword( - NULL, // default keychain - 6, // length of service name - "Bungloo", // service name - 17, // length of account name - "BunglooUserAccount", // account name - passwordLength, // length of password - passwordData, // pointer to password data - NULL // the item reference - ); - } - else - { - status = SecKeychainItemModifyContent( - item, - NULL, - passwordLength, - passwordData - ); - } - NSLog(@"%@",(NSString *)SecCopyErrorMessageString (status,NULL)); + UInt32 _passwordLength = 0; + char *_password = nil; + SecKeychainItemRef item = nil; + SecKeychainFindGenericPassword(NULL, 6, "Bungloo", 17, "BunglooUserAccount", &_passwordLength, (void **)&_password, &item); + + OSStatus status; + void * passwordData = (void*)[_secret cStringUsingEncoding:NSUTF8StringEncoding]; + UInt32 passwordLength = strlen((char*)passwordData); + if (!item) + { + status = SecKeychainAddGenericPassword( + NULL, // default keychain + 6, // length of service name + "Bungloo", // service name + 17, // length of account name + "BunglooUserAccount", // account name + passwordLength, // length of password + passwordData, // pointer to password data + NULL // the item reference + ); + } + else + { + status = SecKeychainItemModifyContent( + item, + NULL, + passwordLength, + passwordData + ); + } + NSLog(@"%@",(NSString *)SecCopyErrorMessageString (status,NULL)); } - (NSString *)secret { - UInt32 passwordLength = 0; - char *password = nil; - SecKeychainItemRef item = nil; - SecKeychainFindGenericPassword(NULL, 6, "Bungloo", 17, "BunglooUserAccount", &passwordLength, (void **)&password, &item); - - if (!item) { - return nil; - } - - //Get password - NSString *passwordString = [[[NSString alloc] initWithData:[NSData dataWithBytes:password length:passwordLength] encoding:NSUTF8StringEncoding] autorelease]; - SecKeychainItemFreeContent(NULL, password); - return passwordString; + UInt32 passwordLength = 0; + char *password = nil; + SecKeychainItemRef item = nil; + SecKeychainFindGenericPassword(NULL, 6, "Bungloo", 17, "BunglooUserAccount", &passwordLength, (void **)&password, &item); + + if (!item) { + return nil; + } + + //Get password + NSString *passwordString = [[[NSString alloc] initWithData:[NSData dataWithBytes:password length:passwordLength] encoding:NSUTF8StringEncoding] autorelease]; + SecKeychainItemFreeContent(NULL, password); + return passwordString; } - (void)setUserId:(NSString *)_userId { - [d setObject:_userId forKey:@"userId"]; - [d synchronize]; + [d setObject:_userId forKey:@"userId"]; + [d synchronize]; } - (NSString *)userId { - return [d objectForKey:@"userId"]; + return [d objectForKey:@"userId"]; } - (void)setScreenName:(NSString *)_screenName { - [d setObject:_screenName forKey:@"screenName"]; - [d synchronize]; + [d setObject:_screenName forKey:@"screenName"]; + [d synchronize]; } - (NSString *)screenName { - return [d objectForKey:@"screenName"]; + return [d objectForKey:@"screenName"]; } + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { diff --git a/Mac/Bungloo.temp_caseinsensitive_rename_Prefix.pch b/Mac/Bungloo.temp_caseinsensitive_rename_Prefix.pch index 3402f1b..694af35 100644 --- a/Mac/Bungloo.temp_caseinsensitive_rename_Prefix.pch +++ b/Mac/Bungloo.temp_caseinsensitive_rename_Prefix.pch @@ -3,5 +3,5 @@ // #ifdef __OBJC__ - #import + #import #endif diff --git a/Mac/Constants.m b/Mac/Constants.m index a746713..d70242a 100644 --- a/Mac/Constants.m +++ b/Mac/Constants.m @@ -213,7 +213,7 @@ string = nil; break; } - + return string; } diff --git a/Mac/Controller.h b/Mac/Controller.h index 0a5d908..9eb0800 100644 --- a/Mac/Controller.h +++ b/Mac/Controller.h @@ -21,20 +21,20 @@ IBOutlet NSWindow *timelineViewWindow; IBOutlet WebView *mentionsView; IBOutlet NSWindow *mentionsViewWindow; - IBOutlet WebView *conversationView; - IBOutlet NSWindow *conversationViewWindow; - WebView *profileView; - NSWindow *profileViewWindow; - NSPanel *openProfileWindow; - NSWindow *loginViewWindow; - NSTextField *loginEntityTextField; - NSProgressIndicator *loginActivityIndicator; + IBOutlet WebView *conversationView; + IBOutlet NSWindow *conversationViewWindow; + WebView *profileView; + NSWindow *profileViewWindow; + NSPanel *openProfileWindow; + NSWindow *loginViewWindow; + NSTextField *loginEntityTextField; + NSProgressIndicator *loginActivityIndicator; IBOutlet NSMenuItem *globalHotkeyMenuItem; IBOutlet NSImageView *logoLayer; ViewDelegate *viewDelegate; - WebView *oauthView; - AccessToken *accessToken; - NSTextField *showProfileTextField; + WebView *oauthView; + AccessToken *accessToken; + NSTextField *showProfileTextField; } diff --git a/Mac/Controller.m b/Mac/Controller.m index 897c248..e4f1b1e 100644 --- a/Mac/Controller.m +++ b/Mac/Controller.m @@ -24,59 +24,59 @@ - (void)awakeFromNib { - [timelineViewWindow setExcludedFromWindowsMenu:YES]; - [mentionsViewWindow setExcludedFromWindowsMenu:YES]; - + [timelineViewWindow setExcludedFromWindowsMenu:YES]; + [mentionsViewWindow setExcludedFromWindowsMenu:YES]; + [self initHotKeys]; - - [GrowlApplicationBridge setGrowlDelegate:self]; - + + [GrowlApplicationBridge setGrowlDelegate:self]; + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc addObserver:self - selector:@selector(openNewMessageWindow:) + [nc addObserver:self + selector:@selector(openNewMessageWindow:) name:@"openNewMessageWindow" object:nil]; - [nc addObserver:self - selector:@selector(sendTweet:) + [nc addObserver:self + selector:@selector(sendTweet:) name:@"sendTweet" object:nil]; - [nc addObserver:self - selector:@selector(authentificationSucceded:) + [nc addObserver:self + selector:@selector(authentificationSucceded:) name:@"authentificationSucceded" object:nil]; - [nc addObserver:self - selector:@selector(getTweetUpdates:) + [nc addObserver:self + selector:@selector(getTweetUpdates:) name:@"getTweetUpdates" object:nil]; - + NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; - - viewDelegate = [[ViewDelegate alloc] init]; - accessToken = [[AccessToken alloc] init]; - - BOOL forceLogin = NO; - /* - if (![accessToken stringForKey:@"version-0.6.0-new-login"]) { - [self logout:self]; - forceLogin = YES; - [accessToken setString:nil forKey:@"entity"]; - [accessToken setString:@"yes" forKey:@"version-0.6.0-new-login"]; - }*/ - - if (forceLogin || ![accessToken stringForKey:@"user_access_token"] || ![accessToken secret]) { - [timelineViewWindow performClose:self]; - [mentionsViewWindow performClose:self]; - [self.loginViewWindow makeKeyAndOrderFront:self]; - [self initOauth]; - } else { - [timelineViewWindow makeKeyAndOrderFront:self]; - [self initWebViews]; - } + + viewDelegate = [[ViewDelegate alloc] init]; + accessToken = [[AccessToken alloc] init]; + + BOOL forceLogin = NO; + /* + if (![accessToken stringForKey:@"version-0.6.0-new-login"]) { + [self logout:self]; + forceLogin = YES; + [accessToken setString:nil forKey:@"entity"]; + [accessToken setString:@"yes" forKey:@"version-0.6.0-new-login"]; + }*/ + + if (forceLogin || ![accessToken stringForKey:@"user_access_token"] || ![accessToken secret]) { + [timelineViewWindow performClose:self]; + [mentionsViewWindow performClose:self]; + [self.loginViewWindow makeKeyAndOrderFront:self]; + [self initOauth]; + } else { + [timelineViewWindow makeKeyAndOrderFront:self]; + [self initWebViews]; + } } # pragma mark Init @@ -85,113 +85,113 @@ - (void)initOauth { - if (!oauthView) { - NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Webkit/"]; - NSURL *url = [NSURL fileURLWithPath:path]; - NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@index.html", path] encoding:NSUTF8StringEncoding error:nil]; - - oauthView = [[WebView alloc] init]; - viewDelegate.oauthView = oauthView; - [[oauthView mainFrame] loadHTMLString:index_string baseURL:url]; - [oauthView setFrameLoadDelegate:viewDelegate]; - [oauthView setPolicyDelegate:viewDelegate]; - [oauthView setUIDelegate:viewDelegate]; - [[oauthView windowScriptObject] setValue:self forKey:@"controller"]; + if (!oauthView) { + NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Webkit/"]; + NSURL *url = [NSURL fileURLWithPath:path]; + NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@index.html", path] encoding:NSUTF8StringEncoding error:nil]; - } + oauthView = [[WebView alloc] init]; + viewDelegate.oauthView = oauthView; + [[oauthView mainFrame] loadHTMLString:index_string baseURL:url]; + [oauthView setFrameLoadDelegate:viewDelegate]; + [oauthView setPolicyDelegate:viewDelegate]; + [oauthView setUIDelegate:viewDelegate]; + [[oauthView windowScriptObject] setValue:self forKey:@"controller"]; + + } } - (void)initWebViews { - if (viewDelegate.timelineView != timelineView) - { - [self initOauth]; - - NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Webkit/"]; - NSURL *url = [NSURL fileURLWithPath:path]; - NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@index.html", path] encoding:NSUTF8StringEncoding error:nil]; - - viewDelegate.timelineView = timelineView; - [[timelineView mainFrame] loadHTMLString:index_string baseURL:url]; - [timelineView setFrameLoadDelegate:viewDelegate]; - [timelineView setPolicyDelegate:viewDelegate]; - [timelineView setUIDelegate:viewDelegate]; - [[timelineView windowScriptObject] setValue:self forKey:@"controller"]; - //WebPreferences* prefs = [timelineView preferences]; - //[prefs _setLocalStorageDatabasePath:localStoragePath]; - //[prefs setLocalStorageEnabled:YES]; - - viewDelegate.mentionsView = mentionsView; - [[mentionsView mainFrame] loadHTMLString:index_string baseURL:url]; - [mentionsView setFrameLoadDelegate:viewDelegate]; - [mentionsView setPolicyDelegate:viewDelegate]; - [mentionsView setUIDelegate:viewDelegate]; - [[mentionsView windowScriptObject] setValue:self forKey:@"controller"]; - //prefs = [mentionsView preferences]; - //[prefs _setLocalStorageDatabasePath:localStoragePath]; - //[prefs setLocalStorageEnabled:YES]; - - viewDelegate.conversationView = conversationView; - [[conversationView mainFrame] loadHTMLString:index_string baseURL:url]; - [conversationView setFrameLoadDelegate:viewDelegate]; - [conversationView setPolicyDelegate:viewDelegate]; - [conversationView setUIDelegate:viewDelegate]; - [[conversationView windowScriptObject] setValue:self forKey:@"controller"]; - //prefs = [conversationView preferences]; - //[prefs _setLocalStorageDatabasePath:localStoragePath]; - //[prefs setLocalStorageEnabled:YES]; - - viewDelegate.profileView = profileView; - [[profileView mainFrame] loadHTMLString:index_string baseURL:url]; - [profileView setFrameLoadDelegate:viewDelegate]; - [profileView setPolicyDelegate:viewDelegate]; - [profileView setUIDelegate:viewDelegate]; - [[profileView windowScriptObject] setValue:self forKey:@"controller"]; - //prefs = [profileView preferences]; - //[prefs _setLocalStorageDatabasePath:localStoragePath]; - //[prefs setLocalStorageEnabled:YES]; + if (viewDelegate.timelineView != timelineView) + { + [self initOauth]; - } - else - { - [timelineView stringByEvaluatingJavaScriptFromString:@"start('timeline')"]; - [mentionsView stringByEvaluatingJavaScriptFromString:@"start('mentions')"]; - [conversationView stringByEvaluatingJavaScriptFromString:@"start('conversation')"]; - [profileView stringByEvaluatingJavaScriptFromString:@"start('profile')"]; - } + NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Webkit/"]; + NSURL *url = [NSURL fileURLWithPath:path]; + NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@index.html", path] encoding:NSUTF8StringEncoding error:nil]; + + viewDelegate.timelineView = timelineView; + [[timelineView mainFrame] loadHTMLString:index_string baseURL:url]; + [timelineView setFrameLoadDelegate:viewDelegate]; + [timelineView setPolicyDelegate:viewDelegate]; + [timelineView setUIDelegate:viewDelegate]; + [[timelineView windowScriptObject] setValue:self forKey:@"controller"]; + //WebPreferences* prefs = [timelineView preferences]; + //[prefs _setLocalStorageDatabasePath:localStoragePath]; + //[prefs setLocalStorageEnabled:YES]; + + viewDelegate.mentionsView = mentionsView; + [[mentionsView mainFrame] loadHTMLString:index_string baseURL:url]; + [mentionsView setFrameLoadDelegate:viewDelegate]; + [mentionsView setPolicyDelegate:viewDelegate]; + [mentionsView setUIDelegate:viewDelegate]; + [[mentionsView windowScriptObject] setValue:self forKey:@"controller"]; + //prefs = [mentionsView preferences]; + //[prefs _setLocalStorageDatabasePath:localStoragePath]; + //[prefs setLocalStorageEnabled:YES]; + + viewDelegate.conversationView = conversationView; + [[conversationView mainFrame] loadHTMLString:index_string baseURL:url]; + [conversationView setFrameLoadDelegate:viewDelegate]; + [conversationView setPolicyDelegate:viewDelegate]; + [conversationView setUIDelegate:viewDelegate]; + [[conversationView windowScriptObject] setValue:self forKey:@"controller"]; + //prefs = [conversationView preferences]; + //[prefs _setLocalStorageDatabasePath:localStoragePath]; + //[prefs setLocalStorageEnabled:YES]; + + viewDelegate.profileView = profileView; + [[profileView mainFrame] loadHTMLString:index_string baseURL:url]; + [profileView setFrameLoadDelegate:viewDelegate]; + [profileView setPolicyDelegate:viewDelegate]; + [profileView setUIDelegate:viewDelegate]; + [[profileView windowScriptObject] setValue:self forKey:@"controller"]; + //prefs = [profileView preferences]; + //[prefs _setLocalStorageDatabasePath:localStoragePath]; + //[prefs setLocalStorageEnabled:YES]; + + } + else + { + [timelineView stringByEvaluatingJavaScriptFromString:@"start('timeline')"]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"start('mentions')"]; + [conversationView stringByEvaluatingJavaScriptFromString:@"start('conversation')"]; + [profileView stringByEvaluatingJavaScriptFromString:@"start('profile')"]; + } } - (void)initHotKeys { NSInteger newTweetKey = kVK_ANSI_M; // http://boredzo.org/blog/archives/2007-05-22/virtual-key-codes - NSInteger newTweetModifierKey = controlKey + cmdKey + optionKey; // cmdKey 256, shitfKey 512, optionKey 2048, controlKey 4096 - + NSInteger newTweetModifierKey = controlKey + cmdKey + optionKey; // cmdKey 256, shitfKey 512, optionKey 2048, controlKey 4096 + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSInteger defaultsNewTweetKey = (NSInteger)[defaults integerForKey:@"newTweetKey"]; if ([defaults objectForKey:@"newTweetKey"] != nil) - { + { newTweetKey = defaultsNewTweetKey; } - else - { + else + { [defaults setInteger:newTweetKey forKey:@"newTweetKey"]; } - + NSInteger defaultsNewTweetModifierKey = (NSInteger)[defaults integerForKey:@"newTweetModifierKey"]; if ([defaults objectForKey:@"newTweetModifierKey"] != nil) - { + { newTweetModifierKey = defaultsNewTweetModifierKey; } - else - { + else + { [defaults setInteger:newTweetModifierKey forKey:@"newTweetModifierKey"]; } - + [defaults synchronize]; - + NSUInteger cocoaModifiers = 0; if (newTweetModifierKey & shiftKey) cocoaModifiers = cocoaModifiers | NSShiftKeyMask; if (newTweetModifierKey & optionKey) cocoaModifiers = cocoaModifiers | NSAlternateKeyMask; @@ -200,44 +200,44 @@ [globalHotkeyMenuItem setKeyEquivalent:[Constants stringFromVirtualKeyCode:newTweetKey]]; [globalHotkeyMenuItem setKeyEquivalentModifierMask:cocoaModifiers]; - + /* CARBON from http://github.com/Xjs/drama-button/blob/carbon/Drama_ButtonAppDelegate.m */ - + EventTypeSpec eventType; eventType.eventClass = kEventClassKeyboard; eventType.eventKind = kEventHotKeyPressed; - + InstallApplicationEventHandler(&handler, 1, &eventType, NULL, NULL); - + EventHotKeyID g_HotKeyID; g_HotKeyID.id = 1; - + EventHotKeyRef g_HotKeyRef; - + RegisterEventHotKey(newTweetKey, newTweetModifierKey, g_HotKeyID, GetApplicationEventTarget(), 0, &g_HotKeyRef); - + /* end CARBON */ } - (void)alertTitle:(NSString *)title withMessage:(NSString *)message { - NSAlert *alert = [NSAlert alertWithMessageText:title - defaultButton:@"OK" alternateButton:nil otherButton:nil - informativeTextWithFormat:@"%@", message]; - [alert runModal]; + NSAlert *alert = [NSAlert alertWithMessageText:title + defaultButton:@"OK" alternateButton:nil otherButton:nil + informativeTextWithFormat:@"%@", message]; + [alert runModal]; } - (void)authentificationSucceded:(id)sender { - [loginActivityIndicator stopAnimation:self]; + [loginActivityIndicator stopAnimation:self]; [self initWebViews]; - [loginViewWindow performClose:self]; + [loginViewWindow performClose:self]; } - (void)authentificationDidNotSucceed:(NSString *)errorMessage { - [loginActivityIndicator stopAnimation:self]; - [self alertTitle:@"Authenication error" withMessage:errorMessage]; + [loginActivityIndicator stopAnimation:self]; + [self alertTitle:@"Authenication error" withMessage:errorMessage]; } + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector @@ -252,21 +252,21 @@ - (void)setString:(NSString *)string forKey:(NSString *)aKey { - [self.accessToken setString:string forKey:aKey]; + [self.accessToken setString:string forKey:aKey]; } - (void)setSecret:(NSString *)string { - [self.accessToken setSecret:string]; + [self.accessToken setSecret:string]; } - (NSString *)secret { - return [self.accessToken secret]; + return [self.accessToken secret]; } - (NSString *)stringForKey:(NSString *)aKey { - return [self.accessToken stringForKey:aKey]; + return [self.accessToken stringForKey:aKey]; } @@ -274,43 +274,43 @@ -(BOOL)applicationShouldOpenUntitledFile:(NSApplication *)theApplication { - return NO; + return NO; } - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag { - [timelineViewWindow makeKeyAndOrderFront:self]; - return NO; + [timelineViewWindow makeKeyAndOrderFront:self]; + return NO; } - (IBAction)openNewMessageWindow:(id)sender { - [NSApp activateIgnoringOtherApps:YES]; - [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; + [NSApp activateIgnoringOtherApps:YES]; + [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; } - (void)openNewMessageWindowInReplyTo:(NSString *)userName statusId:(NSString *)statusId withString:(NSString *)string isPrivate:(BOOL)isPrivate { - [NSApp activateIgnoringOtherApps:YES]; + [NSApp activateIgnoringOtherApps:YES]; NewMessageWindow *newMessage = (NewMessageWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; [newMessage inReplyTo:userName statusId:statusId withString:string]; - [newMessage setIsPrivate:isPrivate]; + [newMessage setIsPrivate:isPrivate]; } - (void)openNewMessageWindowWithString:(NSString *)aString { [NSApp activateIgnoringOtherApps:YES]; - + NSRange range = [aString rangeOfString:@"oauthtoken"]; - + if (range.length > 0) - { - [oauthView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"bungloo_instance.requestAccessToken('%@')", aString]]; + { + [oauthView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"bungloo_instance.requestAccessToken('%@')", aString]]; } - else - { + else + { NewMessageWindow *newTweet = (NewMessageWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; - [newTweet withString:aString]; + [newTweet withString:aString]; } } @@ -323,47 +323,47 @@ - (IBAction)sendTweet:(id)sender { PostModel *post = (PostModel *)[sender object]; - NSString *text = [[post.text stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; - text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]; - - NSString *locationObject = @"null"; - if (post.location) { - locationObject = [NSString stringWithFormat:@"[%f, %f]", post.location.coordinate.latitude, post.location.coordinate.longitude]; - } - - NSString *imageFilePath = @"null"; - if (post.imageFilePath) { - NSError *error; - NSString *mimeType = [MimeType mimeTypeForFileAtPath:post.imageFilePath error:&error]; - NSData *data = [[NSData alloc] initWithContentsOfFile:post.imageFilePath]; - NSString *base64 = [data base64Encoding_xcd]; - [data release]; - imageFilePath = [NSString stringWithFormat:@"\"data:%@;base64,%@\"", mimeType, base64]; - } - - NSString *isPrivate = @"false"; - if (post.isPrivate) { - isPrivate = @"true"; - } - - NSString *func = [NSString stringWithFormat:@"bungloo_instance.sendNewMessage(\"%@\", \"%@\", \"%@\", %@, %@, %@)", - text, - post.inReplyTostatusId, - post.inReplyToEntity, - locationObject, - imageFilePath, - isPrivate]; + NSString *text = [[post.text stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; + text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]; - [timelineView stringByEvaluatingJavaScriptFromString:func]; + NSString *locationObject = @"null"; + if (post.location) { + locationObject = [NSString stringWithFormat:@"[%f, %f]", post.location.coordinate.latitude, post.location.coordinate.longitude]; + } + + NSString *imageFilePath = @"null"; + if (post.imageFilePath) { + NSError *error; + NSString *mimeType = [MimeType mimeTypeForFileAtPath:post.imageFilePath error:&error]; + NSData *data = [[NSData alloc] initWithContentsOfFile:post.imageFilePath]; + NSString *base64 = [data base64Encoding_xcd]; + [data release]; + imageFilePath = [NSString stringWithFormat:@"\"data:%@;base64,%@\"", mimeType, base64]; + } + + NSString *isPrivate = @"false"; + if (post.isPrivate) { + isPrivate = @"true"; + } + + NSString *func = [NSString stringWithFormat:@"bungloo_instance.sendNewMessage(\"%@\", \"%@\", \"%@\", %@, %@, %@)", + text, + post.inReplyTostatusId, + post.inReplyToEntity, + locationObject, + imageFilePath, + isPrivate]; + + [timelineView stringByEvaluatingJavaScriptFromString:func]; } - (NSString *)pluginURL { NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *pathToPlugin = [@"~/Library/Application Support/Bungloo/Plugin.js" stringByExpandingTildeInPath]; - - if([fileManager fileExistsAtPath:pathToPlugin]) - { + + if([fileManager fileExistsAtPath:pathToPlugin]) + { return [NSString stringWithFormat:@"%@", [NSURL fileURLWithPath:pathToPlugin]]; } return nil; @@ -372,12 +372,12 @@ - (void)unreadMentions:(int)count { if (![mentionsViewWindow isVisible] && count > 0) - { + { [timelineViewWindow setTitle:[NSString stringWithFormat:@"Bungloo (^%i)", count]]; [[[NSApplication sharedApplication] dockTile] setBadgeLabel:[NSString stringWithFormat:@"%i", count]]; } - else - { + else + { [timelineViewWindow setTitle:[NSString stringWithFormat:@"Bungloo"]]; [[[NSApplication sharedApplication] dockTile] setBadgeLabel:nil]; [mentionsView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.unread_mentions = 0;"]; @@ -386,95 +386,95 @@ - (void)notificateUserAboutMention:(NSString *)text fromName:(NSString *)name withPostId:(NSString *)postId andEntity:(NSString *)entity { - [GrowlApplicationBridge - notifyWithTitle:[NSString stringWithFormat:@"Mentioned by %@ on Tent", name] - description:text - notificationName:@"Mention" - iconData:nil - priority:0 - isSticky:NO - clickContext:[NSDictionary dictionaryWithObjectsAndKeys: - entity, @"entity", - postId, @"postId", nil]]; + [GrowlApplicationBridge + notifyWithTitle:[NSString stringWithFormat:@"Mentioned by %@ on Tent", name] + description:text + notificationName:@"Mention" + iconData:nil + priority:0 + isSticky:NO + clickContext:[NSDictionary dictionaryWithObjectsAndKeys: + entity, @"entity", + postId, @"postId", nil]]; } - (void)openURL:(NSString *)url { - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; } - (IBAction)showProfile:(id)sender { - NSString *entity = [self.showProfileTextField stringValue]; - if ([entity rangeOfString:@"."].location != NSNotFound && ([entity hasPrefix:@"http://"] || [entity hasPrefix:@"https://"])) { - NSString *func = [NSString stringWithFormat:@"bungloo_instance.showProfileForEntity('%@')", entity]; - [profileView stringByEvaluatingJavaScriptFromString:func]; - [profileViewWindow makeKeyAndOrderFront:self]; - [openProfileWindow performClose:self]; - } + NSString *entity = [self.showProfileTextField stringValue]; + if ([entity rangeOfString:@"."].location != NSNotFound && ([entity hasPrefix:@"http://"] || [entity hasPrefix:@"https://"])) { + NSString *func = [NSString stringWithFormat:@"bungloo_instance.showProfileForEntity('%@')", entity]; + [profileView stringByEvaluatingJavaScriptFromString:func]; + [profileViewWindow makeKeyAndOrderFront:self]; + [openProfileWindow performClose:self]; + } } - (void)notificateViewsAboutDeletedPostWithId:(NSString *)postId byEntity:(NSString*)entity { - NSString *fun = [NSString stringWithFormat:@"bungloo_instance.postDeleted('%@', '%@')", postId, entity]; - [timelineView stringByEvaluatingJavaScriptFromString:fun]; - [mentionsView stringByEvaluatingJavaScriptFromString:fun]; - [conversationView stringByEvaluatingJavaScriptFromString:fun]; - [profileView stringByEvaluatingJavaScriptFromString:fun]; + NSString *fun = [NSString stringWithFormat:@"bungloo_instance.postDeleted('%@', '%@')", postId, entity]; + [timelineView stringByEvaluatingJavaScriptFromString:fun]; + [mentionsView stringByEvaluatingJavaScriptFromString:fun]; + [conversationView stringByEvaluatingJavaScriptFromString:fun]; + [profileView stringByEvaluatingJavaScriptFromString:fun]; } /* - (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]; + 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]; }*/ - (void)loggedIn { - [loginActivityIndicator stopAnimation:self]; + [loginActivityIndicator stopAnimation:self]; [self initWebViews]; - [loginViewWindow performClose:self]; - [timelineViewWindow makeKeyAndOrderFront:self]; + [loginViewWindow performClose:self]; + [timelineViewWindow makeKeyAndOrderFront:self]; } - (IBAction)login:(id)sender { - if ([[loginEntityTextField stringValue] length] > 0) { - [[loginEntityTextField window] makeFirstResponder:nil]; - [loginActivityIndicator startAnimation:self]; - [oauthView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.authenticate();"]; - } + if ([[loginEntityTextField stringValue] length] > 0) { + [[loginEntityTextField window] makeFirstResponder:nil]; + [loginActivityIndicator startAnimation:self]; + [oauthView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.authenticate();"]; + } } - (IBAction)logout:(id)sender { - [oauthView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.logout();"]; - - [timelineViewWindow performClose:self]; - [mentionsViewWindow performClose:self]; - [conversationViewWindow performClose:self]; - [profileViewWindow performClose:self]; - [self.loginViewWindow makeKeyAndOrderFront:self]; - - [timelineView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.logout();"]; - [mentionsView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.logout();"]; + [oauthView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.logout();"]; + + [timelineViewWindow performClose:self]; + [mentionsViewWindow performClose:self]; + [conversationViewWindow performClose:self]; + [profileViewWindow performClose:self]; + [self.loginViewWindow makeKeyAndOrderFront:self]; + + [timelineView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.logout();"]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.logout();"]; } // Mentions window has been visible - (void)windowDidBecomeKey:(NSNotification *)notification { if ([notification object] == mentionsViewWindow) - { + { //[self unreadMentions:0]; [mentionsView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.setAllMentionsRead();"]; - } + } } - (void)getTweetUpdates:(id)sender @@ -485,39 +485,39 @@ - (IBAction)showConversationForPostId:(NSString *)postId andEntity:(NSString *)entity { - NSString *js = [NSString stringWithFormat:@"bungloo_instance.showStatus('%@', '%@');", postId, entity]; - [conversationView stringByEvaluatingJavaScriptFromString:js]; - [conversationViewWindow makeKeyAndOrderFront:self]; - [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + NSString *js = [NSString stringWithFormat:@"bungloo_instance.showStatus('%@', '%@');", postId, entity]; + [conversationView stringByEvaluatingJavaScriptFromString:js]; + [conversationViewWindow makeKeyAndOrderFront:self]; + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; } - (IBAction)clearCache:(id)sender { - [timelineView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.cache.clear()"]; + [timelineView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.cache.clear()"]; } - (IBAction)showProfileForEntity:(NSString *)entity { - NSString *js = [NSString stringWithFormat:@"bungloo_instance.showProfileForEntity('%@');", entity]; - [profileView stringByEvaluatingJavaScriptFromString:js]; - [profileViewWindow makeKeyAndOrderFront:self]; + NSString *js = [NSString stringWithFormat:@"bungloo_instance.showProfileForEntity('%@');", entity]; + [profileView stringByEvaluatingJavaScriptFromString:js]; + [profileViewWindow makeKeyAndOrderFront:self]; } - (void)growlNotificationWasClicked:(id)clickContext { - NSDictionary *userInfo = (NSDictionary *)clickContext; - NSString *postId = [userInfo objectForKey:@"postId"]; - NSString *entity = [userInfo objectForKey:@"entity"]; - - [self showConversationForPostId:postId andEntity:entity]; - - NSString *js = [NSString stringWithFormat:@"bungloo_instance.mentionRead('%@', '%@');", postId, entity]; - [mentionsView stringByEvaluatingJavaScriptFromString:js]; + NSDictionary *userInfo = (NSDictionary *)clickContext; + NSString *postId = [userInfo objectForKey:@"postId"]; + NSString *entity = [userInfo objectForKey:@"entity"]; + + [self showConversationForPostId:postId andEntity:entity]; + + NSString *js = [NSString stringWithFormat:@"bungloo_instance.mentionRead('%@', '%@');", postId, entity]; + [mentionsView stringByEvaluatingJavaScriptFromString:js]; } - (NSString *) applicationNameForGrowl { - return @"Bungloo"; + return @"Bungloo"; } /* CARBON */ diff --git a/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h index 3639757..6ad38f9 100644 --- a/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h +++ b/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h @@ -390,8 +390,8 @@ /*! @brief Tries to fill in missing keys in a notification dictionary. * @param notifDict The dictionary to fill in. * @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict. - * @discussion This function examines the \a notifDict for missing keys, and - * tries to get them from the last known registration dictionary. As of 1.1, + * @discussion This function examines the \a notifDict for missing keys, and + * tries to get them from the last known registration dictionary. As of 1.1, * the keys that it will look for are: * * \li GROWL_APP_NAME @@ -410,8 +410,8 @@ *@abstract Lets the app know whether growl:// is registered on the system, used for certain methods below this *@return Returns whether growl:// is registered on the system *@discussion Methods such as openGrowlPreferences rely on the growl:// URL scheme to function - * Further, this method can provide a check on whether Growl is installed, - * however, the framework will not be relying on this method for choosing when/how to notify, + * Further, this method can provide a check on whether Growl is installed, + * however, the framework will not be relying on this method for choosing when/how to notify, * and it is not recommended that the app rely on it for other than whether to use growl:// methods *@since Growl.framework 1.4 */ @@ -421,7 +421,7 @@ * @method openGrowlPreferences: * @abstract Open Growl preferences, optionally to this app's settings, growl:// method * @param showApp Whether to show the application's settings, otherwise just opens to the last position - * @return Return's whether opening the URL was succesfull or not. + * @return Return's whether opening the URL was succesfull or not. * @discussion Will launch if Growl is installed, but not running, and open the preferences window * Uses growl:// URL scheme * @since Growl.framework 1.4 diff --git a/Mac/MimeType.m b/Mac/MimeType.m index 59a2efd..f1327c4 100644 --- a/Mac/MimeType.m +++ b/Mac/MimeType.m @@ -11,17 +11,17 @@ @implementation MimeType +(NSString *)mimeTypeForFileAtPath:(NSString *)path error:(NSError **)err { - NSString *uti, *mimeType = nil; - - if (!(uti = [[NSWorkspace sharedWorkspace] typeOfFile:path error:err])) - return nil; - if (err) - *err = nil; - - if ((mimeType = (NSString *)UTTypeCopyPreferredTagWithClass((CFStringRef)uti, kUTTagClassMIMEType))) - mimeType = NSMakeCollectable(mimeType); - - return mimeType; + NSString *uti, *mimeType = nil; + + if (!(uti = [[NSWorkspace sharedWorkspace] typeOfFile:path error:err])) + return nil; + if (err) + *err = nil; + + if ((mimeType = (NSString *)UTTypeCopyPreferredTagWithClass((CFStringRef)uti, kUTTagClassMIMEType))) + mimeType = NSMakeCollectable(mimeType); + + return mimeType; } @end diff --git a/Mac/NSData+Base64.h b/Mac/NSData+Base64.h index 24d0984..fc674c8 100644 --- a/Mac/NSData+Base64.h +++ b/Mac/NSData+Base64.h @@ -15,7 +15,7 @@ { if ([base64Encoding length] % 4 != 0) return nil; - + NSString *plist = [NSString stringWithFormat:@"%@", base64Encoding]; return [NSPropertyListSerialization propertyListWithData:[plist dataUsingEncoding:NSASCIIStringEncoding] options:0 format:NULL error:NULL]; } @@ -28,14 +28,14 @@ NSRange endRange = [plist rangeOfData:[@"" dataUsingEncoding:NSASCIIStringEncoding] options:NSDataSearchBackwards range:fullRange]; if (startRange.location == NSNotFound || endRange.location == NSNotFound) return nil; - + NSUInteger base64Location = startRange.location + startRange.length; NSUInteger base64length = endRange.location - base64Location; NSData *base64Data = [NSData dataWithBytesNoCopy:(void *)((uintptr_t)base64Location + (uintptr_t)[plist bytes]) length:base64length freeWhenDone:NO]; NSString *base64Encoding = [[NSString alloc] initWithData:base64Data encoding:NSASCIIStringEncoding]; base64Encoding = [base64Encoding stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; base64Encoding = [base64Encoding stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - + #if __has_feature(objc_arc) return base64Encoding; #else diff --git a/Mac/NewMessageWindow.h b/Mac/NewMessageWindow.h index a61ab0d..b8893ab 100644 --- a/Mac/NewMessageWindow.h +++ b/Mac/NewMessageWindow.h @@ -15,15 +15,15 @@ { IBOutlet NSTextField *textField; IBOutlet NSTextField *counter; - NSMenu *addMenu; - NSButton *addMenuButton; + NSMenu *addMenu; + NSButton *addMenuButton; NSString *inReplyTostatusId; - NSString *inReplyToEntity; - NSMenuItem *addImage; - CLLocationManager *locationManager; - CLLocation *currentLocation; - NSString *imageFilePath; - NSButton *togglePrivateButton; + NSString *inReplyToEntity; + NSMenuItem *addImage; + CLLocationManager *locationManager; + CLLocation *currentLocation; + NSString *imageFilePath; + NSButton *togglePrivateButton; } @property (nonatomic, retain) IBOutlet NSTextField *textField; diff --git a/Mac/NewMessageWindow.m b/Mac/NewMessageWindow.m index 9d969d2..c4fbd3d 100644 --- a/Mac/NewMessageWindow.m +++ b/Mac/NewMessageWindow.m @@ -27,31 +27,31 @@ - (void)dealloc { - [locationManager stopUpdatingLocation]; - [locationManager release]; - [currentLocation release]; - [imageFilePath release]; - [super dealloc]; + [locationManager stopUpdatingLocation]; + [locationManager release]; + [currentLocation release]; + [imageFilePath release]; + [super dealloc]; } - (id)init { - self = [super init]; - if (self) - { - // Add your subclass-specific initialization here. - // If an error occurs here, send a [self release] message and return nil. + self = [super init]; + if (self) + { + // Add your subclass-specific initialization here. + // If an error occurs here, send a [self release] message and return nil. inReplyTostatusId = @""; - inReplyToEntity = @""; - } - return self; + inReplyToEntity = @""; + } + return self; } - (NSString *)windowNibName { - // Override returning the nib file name of the document - // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. - return @"NewMessageWindow"; + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"NewMessageWindow"; } - (NSString *)displayName @@ -61,24 +61,24 @@ - (void)windowControllerDidLoadNib:(NSWindowController *) aController { - [super windowControllerDidLoadNib:aController]; - // Add any code here that needs to be executed once the windowController has loaded the document's window. - [textField becomeFirstResponder]; + [super windowControllerDidLoadNib:aController]; + // Add any code here that needs to be executed once the windowController has loaded the document's window. + [textField becomeFirstResponder]; - // Enable Continous Spelling - NSTextView *textView = (NSTextView *)[[[self.windowControllers objectAtIndex:0] window] firstResponder];; - [textView setContinuousSpellCheckingEnabled:YES]; + // Enable Continous Spelling + NSTextView *textView = (NSTextView *)[[[self.windowControllers objectAtIndex:0] window] firstResponder];; + [textView setContinuousSpellCheckingEnabled:YES]; } - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { - // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil. + // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil. - // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. + // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. - // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. + // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. - if ( outError != NULL ) { + if ( outError != NULL ) { *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; } return nil; @@ -86,42 +86,42 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError { - // Insert code here to read your document from the given data of the specified type. If the given outError != NULL, ensure that you set *outError when returning NO. + // Insert code here to read your document from the given data of the specified type. If the given outError != NULL, ensure that you set *outError when returning NO. - // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. - - // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead. - - if ( outError != NULL ) - { + // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. + + // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead. + + if ( outError != NULL ) + { *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; } - return YES; + return YES; } - (void)inReplyTo:(NSString *)entity statusId:(NSString *)statusId withString:(NSString *)string { [textField setStringValue:string]; - - NSInteger location = [string rangeOfString:@" "].location; - NSInteger length = 0; - if (location != NSNotFound) { - length = [[textField stringValue] length] - location - 1; - } - - + + NSInteger location = [string rangeOfString:@" "].location; + NSInteger length = 0; + if (location != NSNotFound) { + length = [[textField stringValue] length] - location - 1; + } + + NSRange range = {location + 1, length}; [[textField currentEditor] setSelectedRange:range]; - + [inReplyTostatusId release]; inReplyTostatusId = statusId; [inReplyTostatusId retain]; - - [inReplyToEntity release]; - inReplyToEntity = entity; - [inReplyToEntity retain]; - - [self controlTextDidChange:nil]; + + [inReplyToEntity release]; + inReplyToEntity = entity; + [inReplyToEntity retain]; + + [self controlTextDidChange:nil]; } - (void)withString:(NSString *)aString @@ -129,59 +129,59 @@ [textField setStringValue:aString]; NSRange range = {[[textField stringValue] length] , 0}; [[textField currentEditor] setSelectedRange:range]; - NSLog(@"BB"); - - [self controlTextDidChange:nil]; + NSLog(@"BB"); + + [self controlTextDidChange:nil]; } - (IBAction)addCurrentLocation:(id)sender { - NSMenuItem *menuItem = (NSMenuItem *)sender; - if (!self.locationManager) - { - [menuItem setTitle:@"Current location not available"]; - [self initLocationManager]; - } - else - { - [self.locationManager stopUpdatingLocation]; - self.currentLocation = nil; - self.locationManager = nil; - [menuItem setTitle:@"Add current location"]; - } + NSMenuItem *menuItem = (NSMenuItem *)sender; + if (!self.locationManager) + { + [menuItem setTitle:@"Current location not available"]; + [self initLocationManager]; + } + else + { + [self.locationManager stopUpdatingLocation]; + self.currentLocation = nil; + self.locationManager = nil; + [menuItem setTitle:@"Add current location"]; + } } - (IBAction)openAddMenu:(id)sender { - NSRect frame = [(NSButton *)sender frame]; - NSPoint menuOrigin = [[(NSButton *)sender superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height) toView:nil]; - - NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseDown - location:menuOrigin - modifierFlags:NSLeftMouseDownMask // 0x100 - timestamp:NSTimeIntervalSince1970 - windowNumber:[[(NSButton *)sender window] windowNumber] - context:[[(NSButton *)sender window] graphicsContext] - eventNumber:0 - clickCount:1 - pressure:1]; - - [NSMenu popUpContextMenu:self.addMenu withEvent:event forView:self.addMenuButton]; + NSRect frame = [(NSButton *)sender frame]; + NSPoint menuOrigin = [[(NSButton *)sender superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height) toView:nil]; + + NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseDown + location:menuOrigin + modifierFlags:NSLeftMouseDownMask // 0x100 + timestamp:NSTimeIntervalSince1970 + windowNumber:[[(NSButton *)sender window] windowNumber] + context:[[(NSButton *)sender window] graphicsContext] + eventNumber:0 + clickCount:1 + pressure:1]; + + [NSMenu popUpContextMenu:self.addMenu withEvent:event forView:self.addMenuButton]; } - (IBAction)togglePrivate:(id)sender { - NSImage *image = [NSImage imageNamed:NSImageNameLockLockedTemplate]; - if (self.togglePrivateButton.image == [NSImage imageNamed:NSImageNameLockLockedTemplate]) - { - image = [NSImage imageNamed:NSImageNameLockUnlockedTemplate]; - } - [self.togglePrivateButton setImage:image]; + NSImage *image = [NSImage imageNamed:NSImageNameLockLockedTemplate]; + if (self.togglePrivateButton.image == [NSImage imageNamed:NSImageNameLockLockedTemplate]) + { + image = [NSImage imageNamed:NSImageNameLockUnlockedTemplate]; + } + [self.togglePrivateButton setImage:image]; } - (void)setIsPrivate:(BOOL)isPrivate { - NSImage *image = [NSImage imageNamed:(isPrivate ? NSImageNameLockLockedTemplate : NSImageNameLockUnlockedTemplate)]; - [self.togglePrivateButton setImage:image]; + NSImage *image = [NSImage imageNamed:(isPrivate ? NSImageNameLockLockedTemplate : NSImageNameLockUnlockedTemplate)]; + [self.togglePrivateButton setImage:image]; } -(void)controlTextDidChange:(NSNotification *)aNotification { @@ -190,50 +190,50 @@ if(c < 0) { [counter setTextColor:[NSColor redColor]]; } else { - [counter setTextColor:[NSColor controlTextColor]]; + [counter setTextColor:[NSColor controlTextColor]]; } } - (void)initLocationManager { - self.locationManager = [[CLLocationManager alloc] init]; - [self.locationManager setDelegate:self]; - [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; - [self.locationManager setDistanceFilter:kCLDistanceFilterNone]; - [self.locationManager startUpdatingLocation]; + self.locationManager = [[CLLocationManager alloc] init]; + [self.locationManager setDelegate:self]; + [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; + [self.locationManager setDistanceFilter:kCLDistanceFilterNone]; + [self.locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { - self.currentLocation = newLocation; - NSMenuItem *menuItem = [self.addMenu itemAtIndex:0]; - [menuItem setTitle:@"Remove current location"]; + self.currentLocation = newLocation; + NSMenuItem *menuItem = [self.addMenu itemAtIndex:0]; + [menuItem setTitle:@"Remove current location"]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ - NSLog(@"CLLocationManager Error: %@", error); - - NSMenuItem *menuItem = [self.addMenu itemAtIndex:0]; - [menuItem setTitle:@"Current location not available"]; + NSLog(@"CLLocationManager Error: %@", error); + + NSMenuItem *menuItem = [self.addMenu itemAtIndex:0]; + [menuItem setTitle:@"Current location not available"]; } - (IBAction)sendPostButtonPressed:(id)sender { - [self sendPost:self.textField]; + [self sendPost:self.textField]; } #pragma mark Keyboard delegate methods - (IBAction)sendPost:(NSControl *)control { - BOOL emptyIsOk = self.currentLocation || self.imageFilePath; + BOOL emptyIsOk = self.currentLocation || self.imageFilePath; if (emptyIsOk || ([[control stringValue] length] <= MESSAGE_MAX_LENGTH && [[control stringValue] length] > 0)) { PostModel *post = [[[PostModel alloc] init] autorelease]; post.text = [control stringValue]; post.inReplyTostatusId = inReplyTostatusId; - post.inReplyToEntity = inReplyToEntity; - post.location = self.currentLocation; - post.imageFilePath = self.imageFilePath; - post.isPrivate = self.togglePrivateButton.image == [NSImage imageNamed:NSImageNameLockLockedTemplate]; + post.inReplyToEntity = inReplyToEntity; + post.location = self.currentLocation; + post.imageFilePath = self.imageFilePath; + post.isPrivate = self.togglePrivateButton.image == [NSImage imageNamed:NSImageNameLockLockedTemplate]; [[NSNotificationCenter defaultCenter] postNotificationName:@"sendTweet" object:post]; [self close]; } else { @@ -243,102 +243,102 @@ } - (BOOL)isCommandEnterEvent:(NSEvent *)e { - NSUInteger flags = (e.modifierFlags & NSDeviceIndependentModifierFlagsMask); - BOOL isCommand = (flags & NSCommandKeyMask) == NSCommandKeyMask; - BOOL isEnter = (e.keyCode == 0x24); // VK_RETURN - return (isCommand && isEnter); + NSUInteger flags = (e.modifierFlags & NSDeviceIndependentModifierFlagsMask); + BOOL isCommand = (flags & NSCommandKeyMask) == NSCommandKeyMask; + BOOL isEnter = (e.keyCode == 0x24); // VK_RETURN + return (isCommand && isEnter); } - (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector { - BOOL retval = NO; - - BOOL isEnter = [[NSApp currentEvent] keyCode] == 76; - - if (commandSelector == @selector(insertNewline:) && !isEnter) { - - NSText *text = [[textField window] fieldEditor:YES forObject:nil]; - - NSRange range = [text selectedRange]; - NSString *stringBefore = [textField.stringValue substringToIndex:range.location]; - NSString *stringAfter = [textField.stringValue substringFromIndex:range.location + range.length]; - - textField.stringValue = [NSString stringWithFormat:@"%@\n%@", stringBefore, stringAfter]; + BOOL retval = NO; - NSRange r = NSMakeRange(range.location + 1, 0); - [text scrollRangeToVisible:r]; - [text setSelectedRange:r]; + BOOL isEnter = [[NSApp currentEvent] keyCode] == 76; - retval = YES; // causes Apple to NOT fire the default enter action - } - else if (commandSelector == @selector(noop:) && isEnter) { - retval = YES; - [self sendPost:control]; - } - - return retval; + if (commandSelector == @selector(insertNewline:) && !isEnter) { + + NSText *text = [[textField window] fieldEditor:YES forObject:nil]; + + NSRange range = [text selectedRange]; + NSString *stringBefore = [textField.stringValue substringToIndex:range.location]; + NSString *stringAfter = [textField.stringValue substringFromIndex:range.location + range.length]; + + textField.stringValue = [NSString stringWithFormat:@"%@\n%@", stringBefore, stringAfter]; + + NSRange r = NSMakeRange(range.location + 1, 0); + [text scrollRangeToVisible:r]; + [text setSelectedRange:r]; + + retval = YES; // causes Apple to NOT fire the default enter action + } + else if (commandSelector == @selector(noop:) && isEnter) { + retval = YES; + [self sendPost:control]; + } + + return retval; } #pragma mark Add images - (IBAction)addImage:(id)sender { - NSMenuItem *menuItem = (NSMenuItem *)sender; + NSMenuItem *menuItem = (NSMenuItem *)sender; - if (!self.imageFilePath) - { - [menuItem setTitle:@"Remove photo"]; - - NSOpenPanel* openDlg = [NSOpenPanel openPanel]; - [openDlg setPrompt:@"Select"]; - [openDlg setDelegate:self]; - - // Enable the selection of files in the dialog. - [openDlg setCanChooseFiles:YES]; - - // Enable the selection of directories in the dialog. - [openDlg setCanChooseDirectories:NO]; - - // Display the dialog. If the OK button was pressed, - // process the files. - if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton ) - { - // Get an array containing the full filenames of all - // files and directories selected. - NSArray* files = [openDlg filenames]; - - // Loop through all the files and process them. - for( int i = 0; i < [files count]; i++ ) - { - self.imageFilePath = [files objectAtIndex:i]; - } - } - } - else - { - self.imageFilePath = nil; - [menuItem setTitle:@"Add photo"]; - } + if (!self.imageFilePath) + { + [menuItem setTitle:@"Remove photo"]; + + NSOpenPanel* openDlg = [NSOpenPanel openPanel]; + [openDlg setPrompt:@"Select"]; + [openDlg setDelegate:self]; + + // Enable the selection of files in the dialog. + [openDlg setCanChooseFiles:YES]; + + // Enable the selection of directories in the dialog. + [openDlg setCanChooseDirectories:NO]; + + // Display the dialog. If the OK button was pressed, + // process the files. + if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton ) + { + // Get an array containing the full filenames of all + // files and directories selected. + NSArray* files = [openDlg filenames]; + + // Loop through all the files and process them. + for( int i = 0; i < [files count]; i++ ) + { + self.imageFilePath = [files objectAtIndex:i]; + } + } + } + else + { + self.imageFilePath = nil; + [menuItem setTitle:@"Add photo"]; + } } -(BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename { - NSString* ext = [filename pathExtension]; - if ([ext isEqualToString:@""] || [ext isEqualToString:@"/"] || ext == nil || ext == NULL || [ext length] < 1) { - return YES; - } - - NSEnumerator* tagEnumerator = [[NSArray arrayWithObjects:@"png", @"jpg", @"gif", @"jpeg", nil] objectEnumerator]; - NSString* allowedExt; - while ((allowedExt = [tagEnumerator nextObject])) - { - if ([ext caseInsensitiveCompare:allowedExt] == NSOrderedSame) - { - return YES; - } - } - - return NO; + NSString* ext = [filename pathExtension]; + if ([ext isEqualToString:@""] || [ext isEqualToString:@"/"] || ext == nil || ext == NULL || [ext length] < 1) { + return YES; + } + + NSEnumerator* tagEnumerator = [[NSArray arrayWithObjects:@"png", @"jpg", @"gif", @"jpeg", nil] objectEnumerator]; + NSString* allowedExt; + while ((allowedExt = [tagEnumerator nextObject])) + { + if ([ext caseInsensitiveCompare:allowedExt] == NSOrderedSame) + { + return YES; + } + } + + return NO; } @end diff --git a/Mac/PostModel.h b/Mac/PostModel.h index 57f367c..b8ebb44 100644 --- a/Mac/PostModel.h +++ b/Mac/PostModel.h @@ -12,10 +12,10 @@ @interface PostModel : NSObject { NSString *text; NSString *inReplyTostatusId; - NSString *inReplyToEntity; - CLLocation *location; - NSString *imageFilePath; - BOOL isPrivate; + NSString *inReplyToEntity; + CLLocation *location; + NSString *imageFilePath; + BOOL isPrivate; } @property (nonatomic, retain) NSString *text; diff --git a/Mac/PostModel.m b/Mac/PostModel.m index b98db99..e36be45 100644 --- a/Mac/PostModel.m +++ b/Mac/PostModel.m @@ -17,9 +17,9 @@ { [text release]; [inReplyTostatusId release]; - [inReplyToEntity release]; - [location release]; - [imageFilePath release]; + [inReplyToEntity release]; + [location release]; + [imageFilePath release]; [super dealloc]; } diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h index 7f1ca65..f2d128c 100644 --- a/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -13,16 +13,16 @@ NSString *title; NSDate *date; NSString *itemDescription; - + NSURL *releaseNotesURL; - - NSString *DSASignature; + + NSString *DSASignature; NSString *minimumSystemVersion; - + NSURL *fileURL; NSString *versionString; NSString *displayVersionString; - + NSDictionary *propertiesDictionary; } diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h index e78c4d3..e5b5081 100644 --- a/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -15,7 +15,7 @@ @interface SUUpdater : NSObject { NSTimer *checkTimer; SUUpdateDriver *driver; - + SUHost *host; IBOutlet id delegate; } diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h index 3d11ae8..d9ac619 100644 --- a/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h @@ -16,7 +16,7 @@ @protocol SUVersionComparison /*! - @method + @method @abstract An abstract method to compare two version strings. @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. */ diff --git a/Mac/ViewDelegate.h b/Mac/ViewDelegate.h index 81a50c7..7e3cb80 100644 --- a/Mac/ViewDelegate.h +++ b/Mac/ViewDelegate.h @@ -13,9 +13,9 @@ @interface ViewDelegate : NSObject { WebView *timelineView; WebView *mentionsView; - WebView *conversationView; - WebView *profileView; - WebView *oauthView; + WebView *conversationView; + WebView *profileView; + WebView *oauthView; } @property (nonatomic, assign) WebView *timelineView; diff --git a/Mac/ViewDelegate.m b/Mac/ViewDelegate.m index 663507a..15b1fe9 100644 --- a/Mac/ViewDelegate.m +++ b/Mac/ViewDelegate.m @@ -16,15 +16,15 @@ - (void)webView:(WebView *)sender addMessageToConsole:(NSDictionary *)message;{ if (![message isKindOfClass:[NSDictionary class]]) return; - - NSString *viewName = @"TimelineView"; - if (sender == mentionsView) viewName = @"MentionsView"; - if (sender == conversationView) viewName = @"ConversationView"; - if (sender == oauthView) viewName = @"OauthView"; - if (sender == profileView) viewName = @"ProfileView"; - + + NSString *viewName = @"TimelineView"; + if (sender == mentionsView) viewName = @"MentionsView"; + if (sender == conversationView) viewName = @"ConversationView"; + if (sender == oauthView) viewName = @"OauthView"; + if (sender == profileView) viewName = @"ProfileView"; + NSLog(@"js<%@>: %@:%@: %@", - viewName, + viewName, [[message objectForKey:@"sourceURL"] lastPathComponent], [message objectForKey:@"lineNumber"], [message objectForKey:@"message"] @@ -32,103 +32,103 @@ } - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame { - NSString *viewName = @"TimelineView"; - if (sender == mentionsView) viewName = @"MentionsView"; - if (sender == conversationView) viewName = @"ConversationView"; - if (sender == oauthView) viewName = @"OauthView"; + NSString *viewName = @"TimelineView"; + if (sender == mentionsView) viewName = @"MentionsView"; + if (sender == conversationView) viewName = @"ConversationView"; + if (sender == oauthView) viewName = @"OauthView"; NSLog(@"jsa<%@>: %@", viewName, message); } - (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame { - NSInteger result = NSRunCriticalAlertPanel(NSLocalizedString(@"Bungloo", @""), // title - message, // message - NSLocalizedString(@"OK", @""), // default button - NSLocalizedString(@"Cancel", @""), // alt button - nil); - return NSAlertDefaultReturn == result; - return NO; + NSInteger result = NSRunCriticalAlertPanel(NSLocalizedString(@"Bungloo", @""), // title + message, // message + NSLocalizedString(@"OK", @""), // default button + NSLocalizedString(@"Cancel", @""), // alt button + nil); + return NSAlertDefaultReturn == result; + return NO; } - (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener { [listener ignore]; - [[NSWorkspace sharedWorkspace] openURL:[request URL]]; + [[NSWorkspace sharedWorkspace] openURL:[request URL]]; } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { - - NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *pathToJsPlugin = [@"~/Library/Application Support/bungloo/Plugin.js" stringByExpandingTildeInPath]; NSString *pathToCssPlugin = [@"~/Library/Application Support/bungloo/Plugin.css" stringByExpandingTildeInPath]; - - if([fileManager fileExistsAtPath:pathToCssPlugin]) - { - [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setTimeout(function() { loadCssPlugin('file://localhost%@') }, 1000);", pathToCssPlugin]]; - } - - if([fileManager fileExistsAtPath:pathToJsPlugin]) - { - [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setTimeout(function() { loadJsPlugin('file://localhost%@') }, 1000);", pathToJsPlugin]]; - } - - [sender stringByEvaluatingJavaScriptFromString:@"var OS_TYPE = 'mac';"]; - if (sender == oauthView) { - - [oauthView stringByEvaluatingJavaScriptFromString:@"function HostAppGo() { start('oauth') }"]; + if([fileManager fileExistsAtPath:pathToCssPlugin]) + { + [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setTimeout(function() { loadCssPlugin('file://localhost%@') }, 1000);", pathToCssPlugin]]; + } - } else if(sender == conversationView) { - - [conversationView stringByEvaluatingJavaScriptFromString:@"function HostAppGo() { start('conversation') }"]; - - } else if(sender == profileView) { - - [profileView stringByEvaluatingJavaScriptFromString:@"function HostAppGo() { start('profile') }"]; - - } else { - - NSString *action = @"timeline"; - NSString *delay = @"1"; - - if (sender == mentionsView) { - action = @"mentions"; - delay = @"1000"; - } - - [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"function HostAppGo() { start('%@') }", action]]; - } + if([fileManager fileExistsAtPath:pathToJsPlugin]) + { + [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setTimeout(function() { loadJsPlugin('file://localhost%@') }, 1000);", pathToJsPlugin]]; + } + + [sender stringByEvaluatingJavaScriptFromString:@"var OS_TYPE = 'mac';"]; + + if (sender == oauthView) { + + [oauthView stringByEvaluatingJavaScriptFromString:@"function HostAppGo() { start('oauth') }"]; + + } else if(sender == conversationView) { + + [conversationView stringByEvaluatingJavaScriptFromString:@"function HostAppGo() { start('conversation') }"]; + + } else if(sender == profileView) { + + [profileView stringByEvaluatingJavaScriptFromString:@"function HostAppGo() { start('profile') }"]; + + } else { + + NSString *action = @"timeline"; + NSString *delay = @"1"; + + if (sender == mentionsView) { + action = @"mentions"; + delay = @"1000"; + } + + [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"function HostAppGo() { start('%@') }", action]]; + } } - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems { - // FIXME - /* - NSMutableArray *menuItems = [NSMutableArray arrayWithArray:defaultMenuItems]; - - for (NSMenuItem*item in defaultMenuItems) { - if ([[item title] isEqualToString:@"Reload"]) { - //[item setAction:@selector(reload:)]; - //[item setTarget:self]; - } else { - [menuItems addObject:item]; - } - }*/ - - return defaultMenuItems; + // FIXME + /* + NSMutableArray *menuItems = [NSMutableArray arrayWithArray:defaultMenuItems]; + + for (NSMenuItem*item in defaultMenuItems) { + if ([[item title] isEqualToString:@"Reload"]) { + //[item setAction:@selector(reload:)]; + //[item setTarget:self]; + } else { + [menuItems addObject:item]; + } + }*/ + + return defaultMenuItems; } - (void)reload:(id)sender { - [timelineView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.getNewData();"]; - [mentionsView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.getNewData();"]; + [timelineView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.getNewData();"]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"bungloo_instance.getNewData();"]; } - (NSString *)pluginURL { NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *pathToPlugin = [@"~/Library/Application Support/Bungloo/Plugin.js" stringByExpandingTildeInPath]; - - if([fileManager fileExistsAtPath:pathToPlugin]) - { + + if([fileManager fileExistsAtPath:pathToPlugin]) + { return [NSString stringWithFormat:@"%@", [NSURL fileURLWithPath:pathToPlugin]]; } return nil; diff --git a/Mac/main.m b/Mac/main.m index e841b28..75ec058 100644 --- a/Mac/main.m +++ b/Mac/main.m @@ -10,5 +10,5 @@ int main(int argc, char *argv[]) { - return NSApplicationMain(argc, (const char **) argv); + return NSApplicationMain(argc, (const char **) argv); } diff --git a/Mac/publish/Appcast.xml b/Mac/publish/Appcast.xml index cb159ba..6f58002 100755 --- a/Mac/publish/Appcast.xml +++ b/Mac/publish/Appcast.xml @@ -1,12 +1,12 @@ - - Bungloo's Changelog - http://jabs.nu/Bungloo/download/Appcast.xml - Most recent changes with links to updates. - en - - Version 1.0.0 + + Bungloo's Changelog + http://jabs.nu/Bungloo/download/Appcast.xml + Most recent changes with links to updates. + en + + Version 1.0.0 10.5.0 http://jabs.nu/bungloo/download/ReleaseNotes.html Mon, 11 Feb 2013 00:29:41 +0100 @@ -15,6 +15,6 @@ length="1101694" type="application/octet-stream" sparkle:dsaSignature="MCwCFB1JIQINycvbZblob0PHy6Be1nVzAhQ2zkoVqoOjJsDjcnZYjI1qY7oX1Q==" /> - - + + diff --git a/Mac/publish/ReleaseNotes.html b/Mac/publish/ReleaseNotes.html index 95ec5e8..c52d38e 100644 --- a/Mac/publish/ReleaseNotes.html +++ b/Mac/publish/ReleaseNotes.html @@ -1,5 +1,4 @@ - + Tentia Release Notes @@ -8,8 +7,8 @@ h1 { font-size: 1.2em; } h2 { font-size: 1em; margin-top: 2em; } hr { margin: 2em 0; } - p { margin: 0; padding: 0; } - strong { color: red; } + p { margin: 0; padding: 0; } + strong { color: red; } @@ -175,7 +174,7 @@

Moved reply icon to left so it is easier to use when the scrollbar is shown

Login with the [Login] button now works

Fixed automatic updates so it will work next time again.

- +

Tentia 0.2.0

@@ -192,15 +191,15 @@

Mentions now appear as realnames


- +

Tentia 0.1.1

Bugfixes

Changed to send on Cmd+Enter.

- +
- +

Tentia 0.1.0

First attempt to rewrite the old Twitter client Twittia to a new and shiny Tent client Tentia.

- + \ No newline at end of file diff --git a/Mac/publish/publish.rb b/Mac/publish/publish.rb index fb5d5c0..ba37a34 100755 --- a/Mac/publish/publish.rb +++ b/Mac/publish/publish.rb @@ -2,10 +2,10 @@ require 'time' def test var, message - unless var - puts message - exit - end + unless var + puts message + exit + end end path = File.dirname File.expand_path(__FILE__) @@ -28,13 +28,13 @@ end xml = < - - Bungloo's Changelog - http://jabs.nu/Bungloo/download/Appcast.xml - Most recent changes with links to updates. - en - - Version #{version} + + Bungloo's Changelog + http://jabs.nu/Bungloo/download/Appcast.xml + Most recent changes with links to updates. + en + + Version #{version} 10.5.0 http://jabs.nu/bungloo/download/ReleaseNotes.html #{Time.now.rfc2822} @@ -43,8 +43,8 @@ xml = < - - + + XML diff --git a/WebKit/css/default.css b/WebKit/css/default.css index 027ca37..ef410f4 100644 --- a/WebKit/css/default.css +++ b/WebKit/css/default.css @@ -13,6 +13,7 @@ body { a { text-decoration: none; color: #00317a; + outline: 0; } ol { @@ -39,7 +40,7 @@ ol li, .error, header.profile { } body > ol > li { - + } body > ol > li:first-child { @@ -80,6 +81,7 @@ body > ol > li:after, header.profile:after { header.profile img { float: left; margin: 0 10px 10px 0; + max-height: 100px; max-width: 100px; border-radius: 10px; } @@ -282,7 +284,7 @@ li.mentioned { .reposted_by li:hover { background: black; -} +} .reposted_by li a { color: white; diff --git a/WebKit/scripts/controller/Conversation.js b/WebKit/scripts/controller/Conversation.js index 145e547..c09d6f6 100644 --- a/WebKit/scripts/controller/Conversation.js +++ b/WebKit/scripts/controller/Conversation.js @@ -47,7 +47,7 @@ function(HostApp, Core, Paths, URI) { var dom_element = _this.getStatusDOMElement(status); if (node) { - + node.parentNode.insertBefore(dom_element, node); } else { @@ -115,7 +115,7 @@ function(HostApp, Core, Paths, URI) { var _this = this; var callback = function(resp) { - + var statuses = JSON.parse(resp.responseText); for (var i = 0; i < statuses.length; i++) { diff --git a/WebKit/scripts/controller/Mentions.js b/WebKit/scripts/controller/Mentions.js index 0dfc746..5410e10 100644 --- a/WebKit/scripts/controller/Mentions.js +++ b/WebKit/scripts/controller/Mentions.js @@ -33,13 +33,13 @@ function(HostApp, Timeline, URI, Paths) { for (var i = 0; i < statuses.length; i++) { var status = statuses[i]; - + var name; var profile = this.cache.profiles.getItem(status.entity); if(profile) { name = profile["https://tent.io/types/info/basic/v0.1.0"].name; } - + HostApp.notificateUserAboutMention(status.content.text, name || status.entity, status.id, status.entity); }; } @@ -52,7 +52,7 @@ function(HostApp, Timeline, URI, Paths) { add_to_search = add_to_search || {}; if (!add_to_search["mentioned_entity"]) { - add_to_search["mentioned_entity"] = HostApp.stringForKey("entity"); + add_to_search["mentioned_entity"] = HostApp.stringForKey("entity"); } Timeline.prototype.getNewData.call(this, add_to_search); diff --git a/WebKit/scripts/controller/Oauth.js b/WebKit/scripts/controller/Oauth.js index 293fbdc..e4c04cc 100644 --- a/WebKit/scripts/controller/Oauth.js +++ b/WebKit/scripts/controller/Oauth.js @@ -92,7 +92,7 @@ function(HostApp, Paths, Hmac) { // mac_key // mac_algorithm this.register_data = register_data; - + // Needed for later App Registration Modification HostApp.setStringForKey(register_data["mac_key"], "app_mac_key"); HostApp.setStringForKey(register_data["mac_key_id"], "app_mac_key_id"); @@ -130,9 +130,9 @@ function(HostApp, Paths, Hmac) { }; var auth_header = Hmac.makeAuthHeader( - url, - http_method, - HostApp.stringForKey("app_mac_key"), + url, + http_method, + HostApp.stringForKey("app_mac_key"), HostApp.stringForKey("app_mac_key_id") ); @@ -147,13 +147,13 @@ function(HostApp, Paths, Hmac) { Oauth.prototype.requestAccessTokenTicketFinished = function(responseBody) { - var access = JSON.parse(responseBody); + var access = JSON.parse(responseBody); HostApp.setStringForKey(access["access_token"], "user_access_token"); HostApp.setSecret(access["mac_key"]); HostApp.setStringForKey(access["mac_algorithm"], "user_mac_algorithm"); HostApp.setStringForKey(access["token_type"], "user_token_type"); - + HostApp.loggedIn(); } @@ -162,9 +162,9 @@ function(HostApp, Paths, Hmac) { var url = Paths.mkApiRootPath("/apps/" + HostApp.stringForKey("app_id")); var http_method = "DELETE"; var auth_header = Hmac.makeAuthHeader( - url, - http_method, - HostApp.stringForKey("app_mac_key"), + url, + http_method, + HostApp.stringForKey("app_mac_key"), HostApp.stringForKey("app_mac_key_id") ); @@ -178,10 +178,10 @@ function(HostApp, Paths, Hmac) { HostApp.setStringForKey(null, "user_mac_algorithm"); HostApp.setStringForKey(null, "user_token_type"); HostApp.setStringForKey(null, "api_root"); - HostApp.setStringForKey(null, "entity"); + HostApp.setStringForKey(null, "entity"); }, null, auth_header); } - + return Oauth; diff --git a/WebKit/scripts/controller/Profile.js b/WebKit/scripts/controller/Profile.js index 2f5e99a..01a1a8e 100644 --- a/WebKit/scripts/controller/Profile.js +++ b/WebKit/scripts/controller/Profile.js @@ -253,7 +253,7 @@ function(HostApp, Core, Paths, URI) { this.populate(this.profile_template.location, basic.location); this.populate(this.profile_template.gender, basic.gender); this.populate(this.profile_template.bio, basic.bio); - + if(basic.website_url) { var url = basic.website_url; @@ -405,7 +405,7 @@ function(HostApp, Core, Paths, URI) { var _this = this; if (this.following_id) { - + this.setFollowingButton(false); var url = Paths.mkApiRootPath("/followings/") + this.following_id; Paths.getURL(url, "DELETE", function(resp) { @@ -566,7 +566,7 @@ function(HostApp, Core, Paths, URI) { }, null, false); // do not send auth-headers } - }); + }); } return li; diff --git a/WebKit/scripts/controller/Timeline.js b/WebKit/scripts/controller/Timeline.js index 58891af..4b997bd 100644 --- a/WebKit/scripts/controller/Timeline.js +++ b/WebKit/scripts/controller/Timeline.js @@ -146,7 +146,7 @@ function(Core, Paths, HostApp, URI) { if (!callback) { callback = function(data) { _this.getNewData(); } } - Core.prototype.repost.call(this, id, entity, callback); + Core.prototype.repost.call(this, id, entity, callback); } Timeline.prototype.logout = function() { diff --git a/WebKit/scripts/helper/Cache.js b/WebKit/scripts/helper/Cache.js index 2ec5c96..eb79fe7 100644 --- a/WebKit/scripts/helper/Cache.js +++ b/WebKit/scripts/helper/Cache.js @@ -56,7 +56,7 @@ function(URI, CacheStorage, require) { Cache.prototype.stopGettingFollowings = function() { clearTimeout(this.intervall); } - + return Cache; }); \ No newline at end of file diff --git a/WebKit/scripts/helper/CacheStorage.js b/WebKit/scripts/helper/CacheStorage.js index 19ee012..a79b306 100644 --- a/WebKit/scripts/helper/CacheStorage.js +++ b/WebKit/scripts/helper/CacheStorage.js @@ -17,9 +17,9 @@ function() { CacheStorage.prototype.getItem = function(key) { var item = null; - + try { // If localStorage doesn't work then just leave it empty - item = JSON.parse(localStorage.getItem(this.mkPath(key))); + item = JSON.parse(localStorage.getItem(this.mkPath(key))); } catch(e) {} return item; @@ -35,7 +35,7 @@ function() { var length_path = this.mkInternalPath("_length"); var length = parseInt(localStorage.getItem(length_path), 10) + 1; localStorage.setItem(length_path, length); - } + } } catch(e) {} } @@ -49,7 +49,7 @@ function() { var length_path = this.mkInternalPath("_length"); var length = parseInt(localStorage.getItem(length_path), 10) - 1; localStorage.setItem(length_path, length); - } + } } catch(e) {} }; @@ -62,7 +62,7 @@ function() { } } - localStorage.setItem(this.mkInternalPath("_length"), 0); + localStorage.setItem(this.mkInternalPath("_length"), 0); } catch(e) {} } diff --git a/WebKit/scripts/helper/Core.js b/WebKit/scripts/helper/Core.js index 3ca43b5..6a318f1 100644 --- a/WebKit/scripts/helper/Core.js +++ b/WebKit/scripts/helper/Core.js @@ -18,20 +18,20 @@ function(jQuery, Paths, URI, HostApp, Cache) { if(this.template == "undefined") { return jQuery.extend(true, {}, this.template); } - + var a = document.createElement("a"); - + var item = document.createElement("li"); var aside = document.createElement("aside"); item.appendChild(aside); - + var reply_to = a.cloneNode(); reply_to.className = "reply_to" reply_to.innerText = " "; reply_to.href = "#"; aside.appendChild(reply_to); - + var repost = a.cloneNode(); repost.className = "repost"; repost.innerText = " "; @@ -43,29 +43,29 @@ function(jQuery, Paths, URI, HostApp, Cache) { remove.innerText = " "; remove.href = "#"; aside.appendChild(remove); - + var image = document.createElement("img"); image.className = "image"; image.src = "img/default-avatar.png"; image.onmousedown = function(e) { e.preventDefault(); }; item.appendChild(image); - + var image_username = a.cloneNode(); image.appendChild(image_username); - + var data = document.createElement("div"); data.className = "data"; item.appendChild(data); - + var head = document.createElement("h1"); data.appendChild(head); - + var username = a.cloneNode(); head.appendChild(username); - + var space = document.createTextNode(" "); head.appendChild(space); - + var geo = document.createElement("a"); geo.style.display = "none"; head.appendChild(geo); @@ -80,7 +80,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { head.appendChild(is_private); head.appendChild(space.cloneNode()); - + var pin = document.createElement("img"); pin.src = "img/pin.png"; pin.alt = "Map link"; @@ -102,29 +102,29 @@ function(jQuery, Paths, URI, HostApp, Cache) { head.appendChild(reposted_by) - + var message = document.createElement("p"); message.className = "message"; data.appendChild(message); - + var images = document.createElement("p") images.className = "images"; data.appendChild(images); - + var date = message.cloneNode(); date.className = "date"; data.appendChild(date); - + var ago = a.cloneNode(); date.appendChild(ago); - + var from = document.createTextNode(" from "); date.appendChild(from) - + var source = document.createElement("a"); source.className = "source"; date.appendChild(source) - + this.template = { item: item, reply_to: reply_to, @@ -238,15 +238,15 @@ function(jQuery, Paths, URI, HostApp, Cache) { }, null, false); // do not send auth-headers } - }); + }); } if (status && status.permissions && !status.permissions.public) { template.is_private.style.display = ''; } - + var text = ""; - + if (status.type == "https://tent.io/types/post/photo/v0.1.0") { text = status.content.caption; } else { @@ -271,7 +271,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { for (var i = 0; i < status.attachments.length; i++) { // closure needed for the callback (function() { - + var attachment = status.attachments[i]; var img = new Image(); @@ -317,7 +317,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { HostApp.showConversation(status.id, status.entity); return false; } - + // {"type":"Point","coordinates":[57.10803113,12.25854746]} if (status.content && status.content.location && (typeof status.content.location.type == "undefined" || status.content.location.type == "Point")) { var href = "http://www.openstreetmap.org/?mlat=" + status.content.location.coordinates[0] + "&mlon=" + status.content.location.coordinates[1] + "&zoom=12" @@ -328,7 +328,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { if (typeof status.__repost != "undefined") { template.source.href = status.__repost.app.url; template.source.innerHTML = status.__repost.app.name; - template.source.title = status.__repost.app.url; + template.source.title = status.__repost.app.url; } else { template.source.href = status.app.url; template.source.innerHTML = status.app.name; @@ -372,7 +372,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { } var reposted_count = $(post).find(".reposted_by ul li").length + 1; - + var people_person = reposted_count == 1 ? "person" : "people"; $(post).find(".reposted_by span").html("by " + reposted_count + " " + people_person); @@ -381,12 +381,12 @@ function(jQuery, Paths, URI, HostApp, Cache) { var li = $("
  • "); li.attr("id", "post-" + repost.id) var a = $(""); - + a.attr("href", repost.entity); a.attr("title", repost.entity); a.html(repost.entity); li.append(a); - $(post).find(".reposted_by ul").append(li); + $(post).find(".reposted_by ul").append(li); a.click(function(e) { @@ -600,10 +600,10 @@ function(jQuery, Paths, URI, HostApp, Cache) { Core.prototype.logout = function() { - + this.body.innerHTML = ""; } - + // Helper functions @@ -613,9 +613,9 @@ function(jQuery, Paths, URI, HostApp, Cache) { 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; // FIXME: new api key - + jQuery.ajax({ url: api_url, success: function(data) { @@ -636,7 +636,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { var text = node.innerHTML; var mentions_in_text = []; - + var res = text.match(/(\^[\w:/.]+(?:[\w]))/ig); if (res) { @@ -665,7 +665,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { (function(mention) { // need this closure var profile = function(profile) { - + var basic = profile["https://tent.io/types/info/basic/v0.1.0"]; if (profile) { @@ -675,7 +675,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { } var new_text = node.innerHTML.replace( - mention.text, + mention.text, "" + name + "" @@ -712,7 +712,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { if (resp.status >= 200 && resp.status < 400) { var p = JSON.parse(resp.responseText); _this.cache.profiles.setItem(mention.entity, p); - profile(p) + profile(p) } }, null, false); // do not send auth-headers } @@ -726,16 +726,16 @@ function(jQuery, Paths, URI, HostApp, Cache) { Core.prototype.parseMentions = function(text, post_id, entity) { var mentions = []; - + if (post_id && entity && post_id != "(null)" && entity != "(null)") { mentions.push({ post: post_id, entity: entity }) } - + var res = text.match(/(\^[\w:/]+\.[\w:/.]+(?:[\w]))/ig); - + if (res) { for (var i = 0; i < res.length; i++) { var e = res[i].substring(1); @@ -791,7 +791,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { return text.replace(hash, "$1$2$3"); } - Core.prototype.replyTo = function(entity, status_id, mentions, is_private) { + Core.prototype.replyTo = function(entity, status_id, mentions, is_private) { var string = "^" + entity.replace("https://", "") + " "; for (var i = 0; i < mentions.length; i++) { @@ -815,7 +815,7 @@ function(jQuery, Paths, URI, HostApp, Cache) { } else { var reposted_by = ul.parent(".reposted_by"); var reposted_count = reposted_by.find("ul li").length; - + var people_person = reposted_count == 1 ? "person" : "people"; reposted_by.find("span").html("by " + reposted_count + " " + people_person); diff --git a/WebKit/scripts/helper/Hmac.js b/WebKit/scripts/helper/Hmac.js index b18a5e8..b22a2f3 100644 --- a/WebKit/scripts/helper/Hmac.js +++ b/WebKit/scripts/helper/Hmac.js @@ -18,7 +18,7 @@ function(URI, CryptoJS) { port = url.protocol() == "https" ? "443" : "80"; } - var normalizedRequestString = "" + var normalizedRequestString = "" + time_stamp + '\n' + nonce + '\n' + http_method + '\n' diff --git a/WebKit/scripts/helper/HostApp.js b/WebKit/scripts/helper/HostApp.js index a62325d..50bcbe8 100644 --- a/WebKit/scripts/helper/HostApp.js +++ b/WebKit/scripts/helper/HostApp.js @@ -1,5 +1,5 @@ define(function() { - + var HostApp = {}; HostApp.setStringForKey = function(string, key) { @@ -10,16 +10,16 @@ define(function() { controller.setStringForKey(string, key); } } - + HostApp.setSecret = function(string) { - + if (OS_TYPE == "mac") { controller.setSecret_(string); } else { controller.setStringForKey(string, "user_mac_key"); } } - + HostApp.secret = function() { if (OS_TYPE == "mac") { return controller.secret(); @@ -140,6 +140,6 @@ define(function() { } } - return HostApp; + return HostApp; }); \ No newline at end of file diff --git a/WebKit/scripts/helper/Paths.js b/WebKit/scripts/helper/Paths.js index 3b7cf71..5f477a7 100644 --- a/WebKit/scripts/helper/Paths.js +++ b/WebKit/scripts/helper/Paths.js @@ -46,13 +46,13 @@ function(jQuery, HostApp, Hmac, Cache) { if (auth_header !== false && typeof user_access_token != "undefined") { auth_header = Hmac.makeAuthHeader( - url, - http_method, + url, + http_method, HostApp.secret(), user_access_token ); xhr.setRequestHeader("Authorization", auth_header); - } + } } }, url: url, @@ -85,14 +85,14 @@ function(jQuery, HostApp, Hmac, Cache) { if (user_access_token) { auth_header = Hmac.makeAuthHeader( - url, - "POST", + url, + "POST", HostApp.secret(), user_access_token ); xhr.setRequestHeader("Authorization", auth_header); - } + } }, url: url, contentType: "multipart/form-data;boundary=" + boundary, diff --git a/WebKit/scripts/main.js b/WebKit/scripts/main.js index 03acffa..7eda271 100644 --- a/WebKit/scripts/main.js +++ b/WebKit/scripts/main.js @@ -9,7 +9,7 @@ function start(view) { if (view == "oauth") { require(["controller/Oauth"], function(Oauth) { - + bungloo_instance = new Oauth(); }); @@ -17,9 +17,9 @@ function start(view) { } else if (view == "timeline") { require(["controller/Timeline"], function(Timeline) { - + bungloo_instance = new Timeline(); - + }); } else if (view == "mentions") { @@ -131,7 +131,7 @@ function loadCssPlugin(css_url) { } function debug(string) { - + if (typeof string != "string") { string = JSON.stringify(string); } @@ -141,18 +141,18 @@ function debug(string) { function go() { // wait untill everything is loaded setTimeout(function() { - + if (typeof HostAppGo != typeof __not_defined__) { HostAppGo(); } else { - + go(); } - }, 500); + }, 500); } go(); \ No newline at end of file diff --git a/README.markdown b/readme.md similarity index 100% rename from README.markdown rename to readme.md