diff --git a/Linux/Helper.py b/Linux/Helper.py new file mode 100644 index 0000000..5fffab3 --- /dev/null +++ b/Linux/Helper.py @@ -0,0 +1,38 @@ +from PyQt4 import QtCore, QtGui, QtWebKit + +class WebPage(QtWebKit.QWebPage): + def __init__(self, parent): + super(QtWebKit.QWebPage, self).__init__(parent) + + def javaScriptConsoleMessage(self, message, lineNumber, sourceId): + print str(message) + " on line: " + str(lineNumber) + " Source: " + str(sourceId) + +class WebViewCreator(QtGui.QWidget): + def __init__(self, app, delegate): + + QtGui.QWidget.__init__(self) + + self.app = app + self.delegate = delegate + + self.view = QtWebKit.QWebView(self) + self.view.loadFinished.connect(self.load_finished) + + self.page = WebPage(self) + self.view.setPage(self.page) + self.page.settings().setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True) + + layout = QtGui.QVBoxLayout(self) + layout.addWidget(self.view) + + frame = self.view.page().mainFrame() + frame.addToJavaScriptWindowObject("controller", self.app.controller) + frame.addToJavaScriptWindowObject("console", self.app.console) + + url = self.app.resources_uri() + "/index.html" + self.view.load(QtCore.QUrl(url)) + + + def load_finished(self, ok): + self.view.page().mainFrame().evaluateJavaScript("OS_TYPE = 'linux';") + self.delegate.load_finished(ok) diff --git a/Linux/Tentia.py b/Linux/Tentia.py index fb0480f..18ddaec 100755 --- a/Linux/Tentia.py +++ b/Linux/Tentia.py @@ -1,8 +1,7 @@ #!/usr/bin/env python -import os -import sys +import os, sys, pickle from PyQt4 import QtCore, QtGui -import TentiaWindows +import Windows class Tentia: @@ -19,36 +18,52 @@ class Tentia: print "quit" def setup_windows(self): - self.preferences = TentiaWindows.Preferences(self) - #self.timeline = TentiaWindows.Timeline(self) - #self.mentions = TentiaWindows.Timeline(self, action="mentions", title="Mentions") + self.preferences = Windows.Preferences(self) + #self.timeline = Windows.Timeline(self) + #self.mentions = Windows.Timeline(self, action="mentions", title="Mentions") def resources_path(self): - return "../" + return os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) def resources_uri(self): - return "file://localhost" + os.path.abspath(os.path.join(os.path.dirname(__file__), '..', "WebKit")) + return "file://localhost" + os.path.abspath(os.path.join(self.resources_path(), "WebKit")) def login_with_entity(self, entity): - self.controller.setStringForKey("entity", entity) - self.oauth_implementation = TentiaWindows.OauthImplementation(self) - - def controller(): - return self.controller; + self.controller.setStringForKey(entity, "entity") + self.oauth_implementation = Windows.Oauth(self) class Controller(QtCore.QObject): - user_defaults = {} + def __init__(self): + QtCore.QObject.__init__(self) + self.config_path = os.path.expanduser('~/.tentia.cfg') + if os.access(self.config_path, os.R_OK): + with open(self.config_path, 'r') as f: + self.config = pickle.load(f) + else: + print self.config_path + " is not readable" + self.config = {} @QtCore.pyqtSlot(str, str) def setStringForKey(self, string, key): - self.user_defaults[string] = key + string, key = str(string), str(key) + self.config[key] = string + try: + with open(self.config_path, 'w+') as f: + pickle.dump(self.config, f) + except IOError: + print self.config_path + " is not writable" + print "I/O error({0}): {1}".format(e.errno, e.strerror) + @QtCore.pyqtSlot(str, result=str) def stringForKey(self, key): - if key in self.user_defaults: - return self.user_defaults[key] + key = str(key) + if key in self.config: + return self.config[key] + else: + return "" class Console(QtCore.QObject): diff --git a/Linux/TentiaWindows.py b/Linux/Windows.py similarity index 78% rename from Linux/TentiaWindows.py rename to Linux/Windows.py index 1781e0a..a5f0236 100644 --- a/Linux/TentiaWindows.py +++ b/Linux/Windows.py @@ -1,4 +1,5 @@ from PyQt4 import QtCore, QtGui, QtWebKit +import Helper class Preferences: @@ -12,10 +13,10 @@ class Preferences: self.window.resize(480, 186) self.window.setMinimumSize(480, 186) self.window.setMaximumSize(480, 186) - self.window.move(0, 0) + self.window.move(1400, 700) # image view - image = QtGui.QPixmap(self.app.resources_path() + "Icon.png") + image = QtGui.QPixmap(self.app.resources_path() + "/Icon.png") image_view = QtGui.QLabel(self.window) image_view.setGeometry(20, 20, 146, 146) image_view.setPixmap(image) @@ -35,6 +36,7 @@ class Preferences: # text field self.text_field = QtGui.QLineEdit(self.window) + self.text_field.setText("http://jeena.net") self.text_field.setPlaceholderText("https://example.tent.is") self.text_field.setGeometry(194, 84, 262, 22) self.window.connect(self.text_field, QtCore.SIGNAL('returnPressed()'), self.on_login_button_clicked) @@ -119,24 +121,14 @@ class Timeline: self.web_view.execute_script(script) -class OauthImplementation: +class Oauth: def __init__(self, app): self.app = app - self.web_view = QtWebKit.QWebView() - self.web_view.settings().setAttribute(QtWebKit.QWebSettings.DeveloperExtrasEnabled, True) - self.init_web_view() - frame = self.web_view.page().mainFrame() - frame.addToJavaScriptWindowObject("controller", self.app.controller) - frame.addToJavaScriptWindowObject("console", self.app.console) - insp = QtWebKit.QWebInspector() - insp.setPage(self.web_view.page()) - insp.show() + self.window = Helper.WebViewCreator(self.app, self) - def init_web_view(self): - self.web_view.loadFinished.connect(self.load_finished) - self.web_view.load(QtCore.QUrl(self.app.resources_uri() + "/index.html")) + def load_finished(self, ok): + if ok: + script = "function HostAppGo() { start('oauth'); }" + self.window.view.page().mainFrame().evaluateJavaScript(script) - def load_finished(self, widget): - script = "function HostAppGo() { start('oauth'); }" - self.web_view.page().mainFrame().evaluateJavaScript(script) diff --git a/WebKit/index.html b/WebKit/index.html index 7a1c7ba..b18a065 100644 --- a/WebKit/index.html +++ b/WebKit/index.html @@ -1,10 +1,11 @@
-