You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.3 KiB
136 lines
4.3 KiB
# -*- coding: utf-8 -*- |
|
# |
|
# error_prompt.py |
|
# |
|
# Copyright © 2021 JezerM |
|
# |
|
# This file is part of Web Greeter. |
|
# |
|
# Web Greeter is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; either version 3 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# Web Greeter is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# The following additional terms are in effect as per Section 7 of the license: |
|
# |
|
# The preservation of all legal notices and author attributions in |
|
# the material or in the Appropriate Legal Notices displayed |
|
# by works containing it is required. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with Web Greeter; If not, see <http://www.gnu.org/licenses/>. |
|
|
|
# Standard lib |
|
|
|
# 3rd-Party Libs |
|
from typing import List |
|
from PyQt5.QtWebEngineWidgets import QWebEnginePage |
|
from PyQt5.QtWidgets import QAbstractButton, QDialogButtonBox, QDialog, QVBoxLayout, QLabel, QPushButton |
|
from config import web_greeter_config |
|
|
|
import globals |
|
from logging import ( |
|
getLogger, |
|
DEBUG, |
|
Formatter, |
|
StreamHandler, |
|
) |
|
|
|
log_format = ''.join([ |
|
'%(asctime)s [ %(levelname)s ] %(filename)s %(', |
|
'lineno)d: %(message)s' |
|
]) |
|
formatter = Formatter(fmt=log_format, datefmt="%Y-%m-%d %H:%M:%S") |
|
logger = getLogger("javascript") |
|
logger.propagate = False |
|
stream_handler = StreamHandler() |
|
stream_handler.setLevel(DEBUG) |
|
stream_handler.setFormatter(formatter) |
|
logger.setLevel(DEBUG) |
|
logger.addHandler(stream_handler) |
|
|
|
class WebPage(QWebEnginePage): |
|
|
|
def javaScriptConsoleMessage(self, level: QWebEnginePage.JavaScriptConsoleMessageLevel, message: str, lineNumber: int, sourceID: str): |
|
if sourceID == "": |
|
sourceID = "console" |
|
|
|
logLevel = 0 |
|
if level == WebPage.JavaScriptConsoleMessageLevel.ErrorMessageLevel: |
|
logLevel = 40 |
|
elif level == WebPage.JavaScriptConsoleMessageLevel.WarningMessageLevel: |
|
logLevel = 30 |
|
elif level == WebPage.JavaScriptConsoleMessageLevel.InfoMessageLevel: |
|
return |
|
else: |
|
return |
|
|
|
record = logger.makeRecord( |
|
name="javascript", |
|
level=logLevel, |
|
fn="", |
|
lno=lineNumber, |
|
msg=message, |
|
args=(), |
|
exc_info=None |
|
) |
|
record.filename = sourceID |
|
logger.handle(record) |
|
|
|
if logLevel == 40: |
|
errorMessage = "{source} {line}: {msg}".format( |
|
source=sourceID, line=lineNumber, msg=message) |
|
errorPrompt(errorMessage) |
|
|
|
class Dialog(QDialog): |
|
def __init__(self, parent=None, title:str = "Dialog", message:str = "Message", detail:str = "", buttons: List[str] = []): |
|
super().__init__(parent) |
|
self.setWindowTitle(title) |
|
|
|
self.buttonBox = QDialogButtonBox() |
|
for i in range(0, len(buttons)): |
|
button = QPushButton(buttons[i]) |
|
button.role = i |
|
self.buttonBox.addButton(button, QDialogButtonBox.ButtonRole.NoRole) |
|
|
|
self.buttonBox.clicked.connect(self.handle_click) |
|
|
|
self.layout = QVBoxLayout() |
|
self.layout.addWidget(QLabel(message)) |
|
self.layout.addWidget(QLabel(detail)) |
|
self.layout.addWidget(self.buttonBox) |
|
|
|
self.setLayout(self.layout) |
|
|
|
def handle_click(self, button: QAbstractButton): |
|
self.done(button.role) |
|
|
|
def errorPrompt(err): |
|
if not web_greeter_config["config"]["greeter"]["detect_theme_errors"]: |
|
return |
|
|
|
dia = Dialog(parent=globals.greeter.window, title="Error", |
|
message="An error ocurred. Do you want to change to default theme?", |
|
detail=err, |
|
buttons=["Reload theme", "Set default theme", "Cancel"], |
|
) |
|
|
|
dia.exec() |
|
result = dia.result() |
|
|
|
if result == 2: # Cancel |
|
return |
|
elif result == 1: # Default theme |
|
web_greeter_config["config"]["greeter"]["theme"] = "gruvbox" |
|
globals.greeter.load_theme() |
|
return |
|
elif result == 0: # Reload |
|
globals.greeter.load_theme() |
|
return |
|
|
|
return
|
|
|