Improve crash dialog
This commit is contained in:
parent
b25b3c3786
commit
4eebf24775
2
TODO
2
TODO
@ -44,8 +44,6 @@ Improvements / minor features
|
|||||||
Debian: python3-pkg-resources
|
Debian: python3-pkg-resources
|
||||||
- Use argparse and do something like click for command arguments, then we can
|
- Use argparse and do something like click for command arguments, then we can
|
||||||
have flags etc.
|
have flags etc.
|
||||||
- Make it more clear that it's possible to edit the crash info, e.g. to provide
|
|
||||||
more information.
|
|
||||||
- Reimplement tabbar to paint it by ourselves to look like dwb
|
- Reimplement tabbar to paint it by ourselves to look like dwb
|
||||||
- Save cookies in Netscape format so it can be used by wget. (see notes)
|
- Save cookies in Netscape format so it can be used by wget. (see notes)
|
||||||
- Zoom with ctrl + mousewheel
|
- Zoom with ctrl + mousewheel
|
||||||
|
@ -22,9 +22,8 @@ import traceback
|
|||||||
from urllib.error import URLError
|
from urllib.error import URLError
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QSize
|
from PyQt5.QtCore import Qt, QSize
|
||||||
from PyQt5.QtGui import QClipboard
|
|
||||||
from PyQt5.QtWidgets import (QDialog, QLabel, QTextEdit, QPushButton,
|
from PyQt5.QtWidgets import (QDialog, QLabel, QTextEdit, QPushButton,
|
||||||
QVBoxLayout, QHBoxLayout, QApplication)
|
QVBoxLayout, QHBoxLayout)
|
||||||
|
|
||||||
import qutebrowser.config.config as config
|
import qutebrowser.config.config as config
|
||||||
import qutebrowser.utils.misc as utils
|
import qutebrowser.utils.misc as utils
|
||||||
@ -44,8 +43,18 @@ class _CrashDialog(QDialog):
|
|||||||
_hbox: The QHboxLayout containing the buttons
|
_hbox: The QHboxLayout containing the buttons
|
||||||
_url: Pastebin URL QLabel.
|
_url: Pastebin URL QLabel.
|
||||||
_crash_info: A list of tuples with title and crash information.
|
_crash_info: A list of tuples with title and crash information.
|
||||||
|
|
||||||
|
Class attributes:
|
||||||
|
CRASHTEXT: The text to be displayed in the dialog.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
CRASHTEXT = ("Please review and edit the info below, then either submit "
|
||||||
|
"it to <a href='mailto:crash@qutebrowser.org'>"
|
||||||
|
"crash@qutebrowser.org</a> or click 'Report'.<br/><br/>"
|
||||||
|
"<i>Note that without your help, I can't fix the bug you "
|
||||||
|
"encountered. With the report, I most probably will."
|
||||||
|
"</i><br/><br/>")
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
"""Constructor for CrashDialog."""
|
"""Constructor for CrashDialog."""
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -103,6 +112,8 @@ class _CrashDialog(QDialog):
|
|||||||
exc: An exception tuple (type, value, traceback)
|
exc: An exception tuple (type, value, traceback)
|
||||||
"""
|
"""
|
||||||
self._crash_info = [
|
self._crash_info = [
|
||||||
|
("How did it happen?", ""),
|
||||||
|
("Contact info", ""),
|
||||||
("Version info", version()),
|
("Version info", version()),
|
||||||
]
|
]
|
||||||
try:
|
try:
|
||||||
@ -117,7 +128,10 @@ class _CrashDialog(QDialog):
|
|||||||
Return:
|
Return:
|
||||||
The string to display.
|
The string to display.
|
||||||
"""
|
"""
|
||||||
chunks = []
|
chunks = ["Please edit this crash report to remove sensitive info, "
|
||||||
|
"and add as much info as possible about how it happened.\n"
|
||||||
|
"If it's okay if I contact you about this bug report, "
|
||||||
|
"please also add your contact info (Mail/IRC/Jabber)."]
|
||||||
for (header, body) in self._crash_info:
|
for (header, body) in self._crash_info:
|
||||||
if body is not None:
|
if body is not None:
|
||||||
h = '==== {} ===='.format(header)
|
h = '==== {} ===='.format(header)
|
||||||
@ -129,12 +143,10 @@ class _CrashDialog(QDialog):
|
|||||||
try:
|
try:
|
||||||
url = utils.pastebin(self._txt.toPlainText())
|
url = utils.pastebin(self._txt.toPlainText())
|
||||||
except (URLError, ValueError) as e:
|
except (URLError, ValueError) as e:
|
||||||
self._url.setText('Error while pasting: {}'.format(e))
|
self._url.setText('Error while reporting: {}'.format(str(e)))
|
||||||
return
|
return
|
||||||
self._btn_pastebin.setEnabled(False)
|
self._btn_pastebin.setEnabled(False)
|
||||||
self._url.setText("URL copied to clipboard: "
|
self._url.setText("Reported to: <a href='{}'>{}</a>".format(url, url))
|
||||||
"<a href='{}'>{}</a>".format(url, url))
|
|
||||||
QApplication.clipboard().setText(url, QClipboard.Clipboard)
|
|
||||||
|
|
||||||
|
|
||||||
class ExceptionCrashDialog(_CrashDialog):
|
class ExceptionCrashDialog(_CrashDialog):
|
||||||
@ -166,13 +178,11 @@ class ExceptionCrashDialog(_CrashDialog):
|
|||||||
|
|
||||||
def _init_text(self):
|
def _init_text(self):
|
||||||
super()._init_text()
|
super()._init_text()
|
||||||
text = ("Argh! qutebrowser crashed unexpectedly.<br/>"
|
text = ("<b>Argh! qutebrowser crashed unexpectedly.</b><br/><br/>" +
|
||||||
"Please review the info below to remove sensitive data and "
|
self.CRASHTEXT)
|
||||||
"then submit it to <a href='mailto:crash@qutebrowser.org'>"
|
|
||||||
"crash@qutebrowser.org</a> or click 'pastebin'.<br/><br/>")
|
|
||||||
if self._pages:
|
if self._pages:
|
||||||
text += ("You can click 'Restore tabs' to attempt to reopen your "
|
text += ("You can click 'Restore tabs' after reporting to attempt "
|
||||||
"open tabs.")
|
"to reopen your open tabs.")
|
||||||
self._lbl.setText(text)
|
self._lbl.setText(text)
|
||||||
|
|
||||||
def _init_buttons(self):
|
def _init_buttons(self):
|
||||||
@ -181,16 +191,16 @@ class ExceptionCrashDialog(_CrashDialog):
|
|||||||
self._btn_quit.setText("Quit")
|
self._btn_quit.setText("Quit")
|
||||||
self._btn_quit.clicked.connect(self.reject)
|
self._btn_quit.clicked.connect(self.reject)
|
||||||
self._hbox.addWidget(self._btn_quit)
|
self._hbox.addWidget(self._btn_quit)
|
||||||
self._btn_pastebin = QPushButton()
|
|
||||||
self._btn_pastebin.setText("Pastebin")
|
|
||||||
self._btn_pastebin.clicked.connect(self.pastebin)
|
|
||||||
self._hbox.addWidget(self._btn_pastebin)
|
|
||||||
if self._pages:
|
if self._pages:
|
||||||
self._btn_restore = QPushButton()
|
self._btn_restore = QPushButton()
|
||||||
self._btn_restore.setText("Restore tabs")
|
self._btn_restore.setText("Restore tabs")
|
||||||
self._btn_restore.clicked.connect(self.accept)
|
self._btn_restore.clicked.connect(self.accept)
|
||||||
self._btn_restore.setDefault(True)
|
|
||||||
self._hbox.addWidget(self._btn_restore)
|
self._hbox.addWidget(self._btn_restore)
|
||||||
|
self._btn_pastebin = QPushButton()
|
||||||
|
self._btn_pastebin.setText("Report")
|
||||||
|
self._btn_pastebin.clicked.connect(self.pastebin)
|
||||||
|
self._btn_pastebin.setDefault(True)
|
||||||
|
self._hbox.addWidget(self._btn_pastebin)
|
||||||
|
|
||||||
def _gather_crash_info(self):
|
def _gather_crash_info(self):
|
||||||
super()._gather_crash_info()
|
super()._gather_crash_info()
|
||||||
@ -227,10 +237,8 @@ class FatalCrashDialog(_CrashDialog):
|
|||||||
|
|
||||||
def _init_text(self):
|
def _init_text(self):
|
||||||
super()._init_text()
|
super()._init_text()
|
||||||
text = ("qutebrowser was restarted after a fatal crash.<br/>"
|
text = ("<b>qutebrowser was restarted after a fatal crash.<b><br/>"
|
||||||
"Please click on 'pastebin' or send the data below to "
|
"<br/>" + self.CRASHTEXT)
|
||||||
"<a href='mailto:crash@qutebrowser.org'>"
|
|
||||||
"crash@qutebrowser.org</a>.<br/><br/>")
|
|
||||||
self._lbl.setText(text)
|
self._lbl.setText(text)
|
||||||
|
|
||||||
def _init_buttons(self):
|
def _init_buttons(self):
|
||||||
@ -240,8 +248,9 @@ class FatalCrashDialog(_CrashDialog):
|
|||||||
self._btn_ok.clicked.connect(self.accept)
|
self._btn_ok.clicked.connect(self.accept)
|
||||||
self._hbox.addWidget(self._btn_ok)
|
self._hbox.addWidget(self._btn_ok)
|
||||||
self._btn_pastebin = QPushButton()
|
self._btn_pastebin = QPushButton()
|
||||||
self._btn_pastebin.setText("Pastebin")
|
self._btn_pastebin.setText("Report")
|
||||||
self._btn_pastebin.clicked.connect(self.pastebin)
|
self._btn_pastebin.clicked.connect(self.pastebin)
|
||||||
|
self._btn_pastebin.setDefault(True)
|
||||||
self._hbox.addWidget(self._btn_pastebin)
|
self._hbox.addWidget(self._btn_pastebin)
|
||||||
|
|
||||||
def _gather_crash_info(self):
|
def _gather_crash_info(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user