Restart new window if there is an error fetching the project

Julien LepillerSun Aug 25 18:42:52+0200 2019

cc0d25e

Restart new window if there is an error fetching the project

offlate/ui/manager.py

161161
        worker.signals.finished.connect(self.openProject)
162162
        worker.signals.finished.connect(self.finishReport)
163163
        worker.signals.progress.connect(self.reportProgress)
164-
        worker.signals.error.connect(self.reportError)
164+
        worker.signals.restart_required.connect(self.restartNew)
165+
        self.threadpool.start(worker)
166+
167+
    def restartNew(self, name, lang, system, info, error):
168+
        self.reportError(name, error)
169+
        w = NewWindow(self.manager, self, name, lang, system, info)
170+
        w.exec_()
171+
        if not w.wantNew():
172+
            return
173+
        worker = NewRunnable(self, w.getProjectName(), w.getProjectLang(),
174+
                w.getProjectSystem(), w.getProjectInfo())
175+
        worker.signals.finished.connect(self.openProject)
176+
        worker.signals.finished.connect(self.finishReport)
177+
        worker.signals.progress.connect(self.reportProgress)
178+
        worker.signals.restart_required.connect(self.restartNew)
165179
        self.threadpool.start(worker)
166180
167181
    def reportError(self, name, msg):

241255
    finished = pyqtSignal(str)
242256
    progress = pyqtSignal(str, int)
243257
    error = pyqtSignal(str, str)
258+
    restart_required = pyqtSignal(str, str, int, dict, str)
244259
245260
class NewRunnable(QRunnable):
246261
    def __init__(self, parent, name, lang, system, info):

252267
        self.parent = parent
253268
        self.signals = NewRunnableSignals()
254269
        self.oldamount = -1
270+
        self.error = None
255271
256272
    def run(self):
257273
        res = self.parent.manager.createProject(self.name, self.lang, self.system,
258274
                self.info, self)
259275
        if res:
260276
            self.signals.finished.emit(self.name)
277+
        else:
278+
            self.signals.restart_required.emit(self.name, self.lang, self.system,
279+
                    self.info, self.error)
261280
        self.parent.filter()
262281
263282
    def progress(self, amount):

266285
            self.signals.progress.emit(self.name, amount)
267286
268287
    def project_exists(self):
269-
        self.signals.error.emit(self.name, self.parent.tr('A project with the \
270-
same name already exists. The new project was not created. You should first \
271-
remove the same-named project.'))
288+
        self.error = self.parent.tr('A project with the same name already exists. \
289+
The new project was not created. You should first remove the same-named project.')
272290
273291
    def project_present(self, directory):
274-
        self.signals.error.emit(self.name, self.parent.tr('Your filesystem \
275-
contains a same-named directory for your new project. The new project was not \
276-
created. You should first remove the same-named directory: {}.'.format(directory)))
292+
        self.error = self.parent.tr('Your filesystem contains a same-named \
293+
directory for your new project. The new project was not created. You should \
294+
first remove the same-named directory: "{}".'.format(directory))
277295
278296
    def project_error(self, error):
279297
        if isinstance(error, UnsupportedFormatException):
280-
            self.signals.error.emit(self.name, self.parent.tr('The project you \
281-
added uses the {} format, but it is not supported yet by Offlate. You can try to \
282-
update the application, or if you are on the latest version already, report \
283-
it as a bug!'.format(error.unsupportedFormat)))
298+
            self.error = self.parent.tr('The project you added uses the {} format, \
299+
but it is not supported yet by Offlate. You can try to update the application, \
300+
or if you are on the latest version already, report it as a bug.'.format(error.unsupportedFormat))
284301
        else:
285-
            self.signals.error.emit(self.name, self.parent.tr('An unexpected \
286-
error occured while fetching the project: {}. You should report this as a \
287-
bug.'.format(str(error))))
302+
            self.error = self.parent.tr('An unexpected error occured while \
303+
fetching the project: {}. You should report this as a bug.'.format(str(error)))
288304
289305
class EditRunnable(QRunnable):
290306
    def __init__(self, parent, name, lang, system, info):