diff --git a/harbour-tooterb.pro b/harbour-tooterb.pro index cf3b679..7401286 100644 --- a/harbour-tooterb.pro +++ b/harbour-tooterb.pro @@ -73,6 +73,8 @@ DISTFILES += qml/harbour-tooterb.qml \ qml/pages/LoginPage.qml \ qml/pages/Browser.qml \ qml/lib/API.js \ + qml/lib/server.py \ + qml/lib/index.html \ qml/images/icon-s-following \ qml/images/icon-s-bookmark \ qml/images/icon-m-emoji.svg \ diff --git a/qml/lib/index.html b/qml/lib/index.html new file mode 100644 index 0000000..1e3f3a1 --- /dev/null +++ b/qml/lib/index.html @@ -0,0 +1,26 @@ + + + + + + + + + +

Login Complete

+ + diff --git a/qml/lib/server.py b/qml/lib/server.py new file mode 100644 index 0000000..716658b --- /dev/null +++ b/qml/lib/server.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +# POETASTER +import sys +sys.path.append('/usr/share/harbour-tooterb/qml') +sys.path.append('/usr/share/harbour-tooterb/qml/lib') +sys.path.append('/usr/share/harbour-tooterb/qml/pages') + +# POETASTER + +import pyotherside +import threading +import time +import random +import os +import http.server +import socketserver + +PORT = 8000 +directory = '/usr/share/harbour-tooterb/qml/lib' +Handler = http.server.SimpleHTTPRequestHandler +os.chdir(directory) + +def serveMe(): + with socketserver.TCPServer(("", PORT), Handler) as httpd: + print("serving at port", PORT) + pyotherside.send('finished', PORT) + httpd.serve_forever() + +class Downloader: + def __init__(self): + # Set bgthread to a finished thread so we never + # have to check if it is None. + self.bgthread = threading.Thread() + self.bgthread.start() + + def serve(self): + if self.bgthread.is_alive(): + return + self.bgthread = threading.Thread(target=serveMe) + self.bgthread.start() + +downloader = Downloader() diff --git a/qml/pages/LoginPage.qml b/qml/pages/LoginPage.qml index 5208f18..d71b389 100644 --- a/qml/pages/LoginPage.qml +++ b/qml/pages/LoginPage.qml @@ -1,12 +1,33 @@ import QtQuick 2.0 -// import QtWebKit 3.0 import Sailfish.Silica 1.0 import Sailfish.WebView 1.0 import Sailfish.WebEngine 1.0 +import io.thp.pyotherside 1.5 import "../lib/API.js" as Logic Page { + + // Python connections and signals, callable from QML side + // This is not ideal but keeps the page from erroring out on redirect + Python { + id: py + Component.onCompleted: { + addImportPath(Qt.resolvedUrl('../lib/')); + importModule('server', function () {}); + + setHandler('finished', function(newvalue) { + console.debug(newvalue) + }); + startDownload(); + } + function startDownload() { + call('server.downloader.serve', function() {}); + console.debug("called") + + } + } + id: loginPage // The effective value will be restricted by ApplicationWindow.allowedOrientations allowedOrientations: Orientation.All @@ -41,7 +62,7 @@ Page { EnterKey.onClicked: { Logic.api = Logic.mastodonAPI({ instance: instance.text, api_user_token: "" }); Logic.api.registerApplication("Tooter", - 'http://localhost/harbour-tooter', // redirect uri, we will need this later on + 'http://localhost:8000/index.html', // redirect uri, we will need this later on ["read", "write", "follow"], //scopes "http://grave-design.com/harbour-tooter", //website on the login screen function(data) { @@ -100,6 +121,28 @@ Page { WebEngineSettings.setPreference("security.disable_cors_checks", true, WebEngineSettings.BoolPref) WebEngineSettings.setPreference("security.fileuri.strict_origin_policy", false, WebEngineSettings.BoolPref) } + onViewInitialized: { + //webview.loadFrameScript(Qt.resolvedUrl("../html/framescript.js")); + //webview.addMessageListener("webview:action"); + //webview.runJavaScript("return latlon('" + lat + "','" + lon + "')"); + } + + onRecvAsyncMessage: { + console.log('async changed: ' + url) + console.debug(message) + switch (message) { + case "embed:contentOrientationChanged": + break + case "webview:action": + if ( data.topic != lon ) { + //webview.runJavaScript("return latlon('" + lat + "','" + lon + "')"); + //if (debug) console.debug(data.topic) + //if (debug) console.debug(data.also) + //if (debug) console.debug(data.src) + } + break + } + } visible: false //opacity: 0 anchors { @@ -110,10 +153,10 @@ Page { } onLoadingChanged: { - console.log(url) + console.log('loading changed: ' + url) if ( - (url+"").substr(0, 37) === 'http://localhost/harbour-tooter?code=' || - (url+"").substr(0, 38) === 'https://localhost/harbour-tooter?code=' + (url+"").substr(0, 38) === 'http://localhost:8000/index.html?code=' || + (url+"").substr(0, 39) === 'https://localhost:8000/index.html?code=' ) { visible = false;