diff --git a/qubesmanager/qvm_template_gui.py b/qubesmanager/qvm_template_gui.py index 5c5b78d..d4a8e2c 100644 --- a/qubesmanager/qvm_template_gui.py +++ b/qubesmanager/qvm_template_gui.py @@ -15,7 +15,7 @@ from . import utils #pylint: disable=invalid-name -BASE_CMD = ['qvm-template', '--enablerepo=*', '--yes', '--quiet'] +BASE_CMD = ['qvm-template', '--enablerepo=*', '--yes'] class Template(typing.NamedTuple): status: str @@ -291,6 +291,19 @@ class TemplateInstallProgressDialog( self.actions = actions self.buttonBox.hide() + @staticmethod + def _process_cr(text): + """Reduce lines replaced using CR character (\r)""" + while '\r' in text: + prefix, suffix = text.rsplit('\r', 1) + if '\n' in prefix: + prefix = prefix.rsplit('\n', 1)[0] + prefix += '\n' + else: + prefix = '' + text = prefix + suffix + return text + def install(self): async def coro(): self.actions.sort() @@ -313,12 +326,14 @@ class TemplateInstallProgressDialog( stderr=asyncio.subprocess.STDOUT, env=envs) #pylint: disable=cell-var-from-loop + status_text = '' while True: - line = await proc.stdout.readline() + line = await proc.stdout.read(100) if line == b'': break - line = line.decode('ASCII') - self.textEdit.append(line.rstrip()) + line = line.decode('UTF-8') + status_text = self._process_cr(status_text + line) + self.textEdit.setPlainText(status_text) if await proc.wait() != 0: self.buttonBox.show() self.progressBar.setMaximum(100) diff --git a/ui/templateinstallprogressdlg.ui b/ui/templateinstallprogressdlg.ui index 5cc7791..3f98082 100644 --- a/ui/templateinstallprogressdlg.ui +++ b/ui/templateinstallprogressdlg.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 840 + 260