windows fixes (#767)

This commit is contained in:
Charlotte Weaver
2019-06-11 11:41:27 -07:00
committed by GitHub
parent 0f17b84dc1
commit afeddad343
4 changed files with 26 additions and 14 deletions
-4
View File
@@ -11,10 +11,6 @@ WindowUtils = cef.WindowUtils()
# OS differences # OS differences
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
CefWidgetParent = QWidget CefWidgetParent = QWidget
if LINUX:
# noinspection PyUnresolvedReferences
CefWidgetParent = QX11EmbedContainer
class CefWidget(CefWidgetParent): class CefWidget(CefWidgetParent):
def __init__(self, parent=None): def __init__(self, parent=None):
+19 -7
View File
@@ -1,11 +1,13 @@
# flake8: noqa F403, F405 # flake8: noqa F403, F405
from functools import partialmethod from functools import partialmethod
from multiprocessing import Pipe, Process from multiprocessing import Pipe, Process
from os.path import splitext, basename from os import environ
from os.path import splitext, basename, dirname, join
import sys import sys
import threading import threading
from cefpython3 import cefpython as cef from cefpython3 import cefpython as cef
import PySide2
from PySide2.QtCore import * from PySide2.QtCore import *
from PySide2.QtWidgets import * from PySide2.QtWidgets import *
@@ -15,12 +17,18 @@ from server.gui.utils import WINDOWS, LINUX, MAC, FileLoadSignals, Emitter, Work
from server.utils.constants import MODES from server.utils.constants import MODES
from server.utils.utils import find_available_port from server.utils.utils import find_available_port
if WINDOWS or LINUX:
dirname = dirname(PySide2.__file__)
plugin_path = join(dirname, 'plugins', 'platforms')
environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
# Configuration # Configuration
# TODO remember this or calculate it? # TODO remember this or calculate it?
WIDTH = 1024 WIDTH = 1024
HEIGHT = 768 HEIGHT = 768
GUI_PORT = find_available_port("localhost") GUI_PORT = find_available_port("localhost")
BROWSER_INDEX = 0
LOAD_INDEX = 1
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
def __init__(self): def __init__(self):
@@ -39,6 +47,8 @@ class MainWindow(QMainWindow):
self.setupLayout() self.setupLayout()
self.setupMenu() self.setupMenu()
def showBrowser(self):
self.stacked_layout.setCurrentIndex(BROWSER_INDEX)
def restartOnError(self): def restartOnError(self):
self.window().shutdownServer() self.window().shutdownServer()
# close emitter on error/finished # close emitter on error/finished
@@ -51,10 +61,11 @@ class MainWindow(QMainWindow):
def setupLayout(self): def setupLayout(self):
self.resize(WIDTH, HEIGHT) self.resize(WIDTH, HEIGHT)
self.cef_widget = CefWidget(self) self.cef_widget = CefWidget(self)
self.cef_widget.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding))
self.data_widget = LoadWidget(self) self.data_widget = LoadWidget(self)
self.stacked_layout = QStackedLayout() self.stacked_layout = QStackedLayout()
self.stacked_layout.addWidget(self.data_widget)
self.stacked_layout.addWidget(self.cef_widget) self.stacked_layout.addWidget(self.cef_widget)
self.stacked_layout.addWidget(self.data_widget)
main_layout = QVBoxLayout() main_layout = QVBoxLayout()
main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.setSpacing(0) main_layout.setSpacing(0)
@@ -80,7 +91,8 @@ class MainWindow(QMainWindow):
# cef widget in the layout with the container. # cef widget in the layout with the container.
self.container = QWidget.createWindowContainer( self.container = QWidget.createWindowContainer(
self.cef_widget.hidden_window, parent=self) self.cef_widget.hidden_window, parent=self)
self.stacked_layout.addWidget(self.container, 1, 0) self.stacked_layout.replaceWidget(self.cef_widget, self.container)
self.stacked_layout.setCurrentIndex(LOAD_INDEX)
def setupServer(self): def setupServer(self):
self.shutdownServer() self.shutdownServer()
@@ -108,7 +120,7 @@ class MainWindow(QMainWindow):
file_menu.addAction(load_action) file_menu.addAction(load_action)
def showLoad(self): def showLoad(self):
self.stacked_layout.setCurrentIndex(0) self.stacked_layout.setCurrentIndex(LOAD_INDEX)
def closeEvent(self, event): def closeEvent(self, event):
# Close browser (force=True) and free CEF reference # Close browser (force=True) and free CEF reference
@@ -209,7 +221,7 @@ class LoadWidget(QFrame):
def onDataReady(self): def onDataReady(self):
self.site_ready_worker = SiteReadyWorker(self.window().url) self.site_ready_worker = SiteReadyWorker(self.window().url)
self.site_ready_worker.signals.ready.connect(self.onServerReady) self.site_ready_worker.signals.ready.connect(self.onServerReady)
self.site_ready_worker.signals.error.connect(self.onError) self.site_ready_worker.signals.error.connect(self.onServerError)
srw_thread = threading.Thread(target=self.site_ready_worker.run, daemon=True) srw_thread = threading.Thread(target=self.site_ready_worker.run, daemon=True)
srw_thread.start() srw_thread.start()
@@ -217,7 +229,7 @@ class LoadWidget(QFrame):
def onServerReady(self): def onServerReady(self):
if not self.serverError: if not self.serverError:
self.window().cef_widget.browser.Navigate(self.window().url) self.window().cef_widget.browser.Navigate(self.window().url)
self.window().stacked_layout.setCurrentIndex(1) self.window().showBrowser()
def onError(self, err, server_error=False): def onError(self, err, server_error=False):
# Restart worker # Restart worker
@@ -225,7 +237,7 @@ class LoadWidget(QFrame):
self.serverError = True self.serverError = True
# Report error and switch to load screen # Report error and switch to load screen
self.window().shutdownServer() self.window().shutdownServer()
self.window().stacked_layout.setCurrentIndex(0) self.window().stacked_layout.setCurrentIndex(LOAD_INDEX)
self.error_label.setText(f"Error: {err}") self.error_label.setText(f"Error: {err}")
self.error_label.resize(self.MAX_CONTENT_WIDTH, self.error_label.height()) self.error_label.resize(self.MAX_CONTENT_WIDTH, self.error_label.height())
+7
View File
@@ -1,3 +1,4 @@
import errno
import platform import platform
from PySide2.QtCore import QObject, Signal from PySide2.QtCore import QObject, Signal
@@ -60,6 +61,12 @@ class Emitter:
except EOFError: except EOFError:
# Server done # Server done
break break
except OSError as e:
if e.errno == errno.EBADF:
break
else:
self.signals.error.emit(str(e))
break
except Exception as e: except Exception as e:
self.signals.error.emit(str(e)) self.signals.error.emit(str(e))
break break
-3
View File
@@ -1,5 +1,4 @@
from multiprocessing import Process from multiprocessing import Process
import traceback
import time import time
import requests import requests
@@ -65,7 +64,6 @@ class Worker(EmittingProcess):
try: try:
server.app.run(host=self.host, debug=False, port=self.port, threaded=True) server.app.run(host=self.host, debug=False, port=self.port, threaded=True)
except Exception as e: except Exception as e:
traceback.print_exc()
self.emit("server_error", str(e)) self.emit("server_error", str(e))
finally: finally:
self.emit("finished") self.emit("finished")
@@ -87,6 +85,5 @@ class SiteReadyWorker:
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
time.sleep(1) time.sleep(1)
except Exception as e: except Exception as e:
traceback.print_exc()
self.signals.error.emit(str(e)) self.signals.error.emit(str(e))
self.signals.timeout.emit() self.signals.timeout.emit()