diff -r d2da14b2a233 -r 3f5c05eb2d5f ProjectFlask/FlaskCommandDialog.py --- a/ProjectFlask/FlaskCommandDialog.py Thu Nov 19 18:34:05 2020 +0100 +++ b/ProjectFlask/FlaskCommandDialog.py Thu Nov 19 20:19:55 2020 +0100 @@ -35,11 +35,14 @@ self.__process = None + self.successMessage = "" + self.errorMessage = "" + self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) - def startCommand(self, command, args=None): + def startFlaskCommand(self, command, args=None): """ Public method to start a flask command and show its output. @@ -86,6 +89,61 @@ return ok + def startBabelCommand(self, command, args, title, msgSuccess="", + msgError=""): + """ + Public method to start a pybabel command and show its output. + + @param command pybabel command to be run + @type str + @param args list of command line arguments for the command + @type list of str + @param title window title of the dialog + @type str + @param msgSuccess success message to be shown + @type str + @param msgError message to be shown on error + @type str + @return flag indicating a successful start + @rtype bool + """ + self.setWindowTitle(title) + + self.successMessage = msgSuccess + self.errorMessage = msgError + + workdir, _ = self.__project.getApplication() + babelCommand = self.__project.getBabelCommand() + + self.__process = QProcess() + self.__process.setWorkingDirectory(workdir) + self.__process.setProcessChannelMode(QProcess.MergedChannels) + + self.__process.readyReadStandardOutput.connect(self.__readStdOut) + self.__process.finished.connect(self.__processFinished) + + self.outputEdit.clear() + + babelArgs = [command] + if args: + babelArgs += args + + self.__process.start(babelCommand, babelArgs) + ok = self.__process.waitForStarted(10000) + if not ok: + E5MessageBox.critical( + None, + self.tr("Execute PyBabel Command"), + self.tr("""The pybabel process could not be started.""")) + else: + self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) + self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) + self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True) + self.buttonBox.button(QDialogButtonBox.Cancel).setFocus( + Qt.OtherFocusReason) + + return ok + def closeEvent(self, evt): """ Protected method handling the close event of the dialog. @@ -105,11 +163,16 @@ out = str(self.__process.readAllStandardOutput(), "utf-8") self.outputEdit.insertPlainText(out) - @pyqtSlot() - def __processFinished(self): + def __processFinished(self, exitCode, exitStatus): """ - Private slot handling the finishing of the server process. + Private slot connected to the finished signal. + + @param exitCode exit code of the process + @type int + @param exitStatus exit status of the process + @type QProcess.ExitStatus """ + normal = (exitStatus == QProcess.NormalExit) and (exitCode == 0) self.__cancelProcess() self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) @@ -117,6 +180,11 @@ self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) self.buttonBox.button(QDialogButtonBox.Close).setFocus( Qt.OtherFocusReason) + + if normal and self.successMessage: + self.outputEdit.insertPlainText(self.successMessage) + elif not normal and self.errorMessage: + self.outputEdit.insertPlainText(self.errorMessage) @pyqtSlot() def __cancelProcess(self):