diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py new file mode 100644 index 0000000000..1df1ab773e --- /dev/null +++ b/cura/CrashHandler.py @@ -0,0 +1,41 @@ +import sys +import platform +import traceback +import webbrowser + +from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR +from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit + +def show(): + dialog = QDialog() + dialog.setWindowTitle("Oops!") + + layout = QVBoxLayout(dialog) + + label = QLabel(dialog) + layout.addWidget(label) + label.setText("

An uncaught exception has occurred!

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

") + + textarea = QTextEdit(dialog) + layout.addWidget(textarea) + + try: + from UM.Application import Application + version = Application.getInstance().getVersion() + except: + version = "Unknown" + + trace = "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])) + + crash_info = "Version: {0}\nPlatform: {1}\nQt: {2}\nPyQt: {3}\n\nException:\n{4}" + crash_info = crash_info.format(version, platform.platform(), QT_VERSION_STR, PYQT_VERSION_STR, trace) + + textarea.setText(crash_info) + + buttons = QDialogButtonBox(QDialogButtonBox.Close, dialog) + layout.addWidget(buttons) + buttons.addButton("Open Web Page", QDialogButtonBox.HelpRole) + buttons.rejected.connect(lambda: dialog.close()) + buttons.helpRequested.connect(lambda: webbrowser.open("http://github.com/Ultimaker/Cura/issues")) + + dialog.exec_() diff --git a/cura_app.py b/cura_app.py index cfe99284b3..35ea0375b6 100755 --- a/cura_app.py +++ b/cura_app.py @@ -3,7 +3,12 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -import cura.CuraApplication +try: + import cura.CuraApplication + + app = cura.CuraApplication.CuraApplication.getInstance() + app.run() +except Exception as e: + import cura.CrashHandler + cura.CrashHandler.show() -app = cura.CuraApplication.CuraApplication.getInstance() -app.run() diff --git a/plugins/USBPrinting/PrinterConnection.py b/plugins/USBPrinting/PrinterConnection.py index b26a7bf4f4..cc4a04c275 100644 --- a/plugins/USBPrinting/PrinterConnection.py +++ b/plugins/USBPrinting/PrinterConnection.py @@ -201,18 +201,18 @@ class PrinterConnection(SignalEmitter): continue # Could not set the baud rate, go to the next time.sleep(1.5) # Ensure that we are not talking to the bootloader. 1.5 sec seems to be the magic number sucesfull_responses = 0 - timeout_time = time.time() + 5 + timeout_time = time.time() + 15 self._serial.write(b"\n") self._sendCommand("M105") # Request temperature, as this should (if baudrate is correct) result in a command with "T:" in it + while timeout_time > time.time(): - line = self._readline() + line = self._readline() if line is None: self.setIsConnected(False) # Something went wrong with reading, could be that close was called. return if b"T:" in line: self._serial.timeout = 0.5 - self._serial.write(b"\n") self._sendCommand("M105") sucesfull_responses += 1 if sucesfull_responses >= self._required_responses_auto_baud: @@ -220,6 +220,8 @@ class PrinterConnection(SignalEmitter): self.setIsConnected(True) Logger.log("i", "Established printer connection on port %s" % self._serial_port) return + + Logger.log("e", "Baud rate detection for %s failed", self._serial_port) self.close() # Unable to connect, wrap up. self.setIsConnected(False) diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml index 369a2cfbfc..a736a7fbda 100644 --- a/resources/qml/AboutDialog.qml +++ b/resources/qml/AboutDialog.qml @@ -31,7 +31,7 @@ UM.Dialog { Label { id: version - text: "Cura 15.06" + text: "Cura %1".arg(UM.Application.version) font: UM.Theme.fonts.large anchors.horizontalCenter : logo.horizontalCenter anchors.horizontalCenterOffset : (logo.width * 0.25)