2019-09-10 00:54:28 +00:00
|
|
|
# Created By: Virgil Dupras
|
|
|
|
# Created On: 2009-05-23
|
|
|
|
# Copyright 2015 Hardcoded Software (http://www.hardcoded.net)
|
2020-01-01 02:16:27 +00:00
|
|
|
#
|
|
|
|
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
|
|
|
|
# which should be included with this package. The terms are also available at
|
2019-09-10 00:54:28 +00:00
|
|
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
|
|
|
|
import traceback
|
|
|
|
import sys
|
|
|
|
import os
|
2021-08-25 07:05:18 +00:00
|
|
|
import platform
|
2019-09-10 00:54:28 +00:00
|
|
|
|
2022-07-09 03:17:42 +00:00
|
|
|
from PyQt6.QtCore import Qt, QCoreApplication, QSize
|
|
|
|
from PyQt6.QtWidgets import (
|
2020-01-01 02:16:27 +00:00
|
|
|
QDialog,
|
|
|
|
QVBoxLayout,
|
|
|
|
QHBoxLayout,
|
|
|
|
QLabel,
|
|
|
|
QPlainTextEdit,
|
|
|
|
QPushButton,
|
|
|
|
)
|
2019-09-10 00:54:28 +00:00
|
|
|
|
|
|
|
from hscommon.trans import trget
|
|
|
|
from hscommon.desktop import open_url
|
2022-05-09 00:22:08 +00:00
|
|
|
from qt.util import horizontal_spacer
|
2019-09-10 00:54:28 +00:00
|
|
|
|
2022-05-09 00:40:37 +00:00
|
|
|
tr = trget("ui")
|
2020-01-01 02:16:27 +00:00
|
|
|
|
2019-09-10 00:54:28 +00:00
|
|
|
|
|
|
|
class ErrorReportDialog(QDialog):
|
|
|
|
def __init__(self, parent, github_url, error, **kwargs):
|
2022-07-09 03:17:42 +00:00
|
|
|
flags = Qt.WindowType.CustomizeWindowHint | Qt.WindowType.WindowTitleHint | Qt.WindowType.WindowSystemMenuHint
|
2019-09-10 00:54:28 +00:00
|
|
|
super().__init__(parent, flags, **kwargs)
|
|
|
|
self._setupUi()
|
|
|
|
name = QCoreApplication.applicationName()
|
|
|
|
version = QCoreApplication.applicationVersion()
|
2021-08-25 07:05:18 +00:00
|
|
|
error_text = "Application Name: {}\nVersion: {}\nPython: {}\nOperating System: {}\n\n{}".format(
|
|
|
|
name, version, platform.python_version(), platform.platform(), error
|
|
|
|
)
|
2019-09-10 00:54:28 +00:00
|
|
|
# Under windows, we end up with an error report without linesep if we don't mangle it
|
2021-08-24 05:12:23 +00:00
|
|
|
error_text = error_text.replace("\n", os.linesep)
|
2022-07-09 03:17:42 +00:00
|
|
|
self.error_text_edit.setPlainText(error_text)
|
2019-09-10 00:54:28 +00:00
|
|
|
self.github_url = github_url
|
2020-01-01 02:16:27 +00:00
|
|
|
|
2019-09-10 00:54:28 +00:00
|
|
|
def _setupUi(self):
|
|
|
|
self.setWindowTitle(tr("Error Report"))
|
|
|
|
self.resize(553, 349)
|
2022-07-09 03:17:42 +00:00
|
|
|
main_layout = QVBoxLayout(self)
|
|
|
|
|
|
|
|
title_label = QLabel(self)
|
|
|
|
title_label.setText(tr("Something went wrong. How about reporting the error?"))
|
|
|
|
title_label.setWordWrap(True)
|
|
|
|
main_layout.addWidget(title_label)
|
|
|
|
|
|
|
|
self.error_text_edit = QPlainTextEdit(self)
|
|
|
|
self.error_text_edit.setReadOnly(True)
|
|
|
|
main_layout.addWidget(self.error_text_edit)
|
|
|
|
|
2019-09-10 00:54:28 +00:00
|
|
|
msg = tr(
|
|
|
|
"Error reports should be reported as Github issues. You can copy the error traceback "
|
2020-10-27 17:23:14 +00:00
|
|
|
"above and paste it in a new issue.\n\nPlease make sure to run a search for any already "
|
|
|
|
"existing issues beforehand. Also make sure to test the very latest version available from the repository, "
|
|
|
|
"since the bug you are experiencing might have already been patched.\n\n"
|
|
|
|
"What usually really helps is if you add a description of how you got the error. Thanks!"
|
2019-09-10 00:54:28 +00:00
|
|
|
"\n\n"
|
|
|
|
"Although the application should continue to run after this error, it may be in an "
|
|
|
|
"unstable state, so it is recommended that you restart the application."
|
|
|
|
)
|
2022-07-09 03:17:42 +00:00
|
|
|
instructions_label = QLabel(msg)
|
|
|
|
instructions_label.setWordWrap(True)
|
|
|
|
main_layout.addWidget(instructions_label)
|
|
|
|
|
|
|
|
button_layout = QHBoxLayout()
|
|
|
|
button_layout.addItem(horizontal_spacer())
|
|
|
|
|
|
|
|
close_button = QPushButton(self)
|
|
|
|
close_button.setText(tr("Close"))
|
|
|
|
close_button.setMinimumSize(QSize(110, 0))
|
|
|
|
button_layout.addWidget(close_button)
|
|
|
|
|
|
|
|
report_button = QPushButton(self)
|
|
|
|
report_button.setText(tr("Go to Github"))
|
|
|
|
report_button.setMinimumSize(QSize(110, 0))
|
|
|
|
report_button.setDefault(True)
|
|
|
|
button_layout.addWidget(report_button)
|
|
|
|
|
|
|
|
main_layout.addLayout(button_layout)
|
|
|
|
|
|
|
|
report_button.clicked.connect(self.goToGithub)
|
|
|
|
close_button.clicked.connect(self.reject)
|
2020-01-01 02:16:27 +00:00
|
|
|
|
2019-09-10 00:54:28 +00:00
|
|
|
def goToGithub(self):
|
|
|
|
open_url(self.github_url)
|
2020-01-01 02:16:27 +00:00
|
|
|
|
2019-09-10 00:54:28 +00:00
|
|
|
|
|
|
|
def install_excepthook(github_url):
|
|
|
|
def my_excepthook(exctype, value, tb):
|
2020-01-01 02:16:27 +00:00
|
|
|
s = "".join(traceback.format_exception(exctype, value, tb))
|
2019-09-10 00:54:28 +00:00
|
|
|
dialog = ErrorReportDialog(None, github_url, s)
|
2022-07-09 03:17:42 +00:00
|
|
|
dialog.exec()
|
2020-01-01 02:16:27 +00:00
|
|
|
|
2019-09-10 00:54:28 +00:00
|
|
|
sys.excepthook = my_excepthook
|