Project/ProjectTranslationsBrowser.py

changeset 2795
641d03b2aa8c
parent 2785
06c9e4d45f9f
child 2803
282752ecd0fc
--- a/Project/ProjectTranslationsBrowser.py	Sat Jul 13 13:14:51 2013 +0200
+++ b/Project/ProjectTranslationsBrowser.py	Sat Jul 13 15:41:39 2013 +0200
@@ -71,11 +71,11 @@
             """ project. Several actions can be executed via the context menu.</p>"""
         ))
         
-        self.lreleaseProc = None
+        self.__lreleaseProcesses = []
+        self.__pylupdateProcesses = []
         self.lreleaseProcRunning = False
         self.pylupdateProcRunning = False
         self.__tmpProjects = []
-        self.__pylupdateProcesses = []
         
     def _createPopupMenus(self):
         """
@@ -795,8 +795,9 @@
         Private slot to handle the readyReadStandardOutput signal of the
         lrelease process.
         """
-        if self.lreleaseProc is not None:
-            self.__readStdout(self.lreleaseProc, 'lrelease: ')
+        proc = self.sender()
+        if proc is not None:
+            self.__readStdout(proc, 'lrelease: ')
         else:
             return
         
@@ -832,8 +833,9 @@
         Private slot to handle the readyReadStandardError signal of the
         lrelease process.
         """
-        if self.lreleaseProc is not None:
-            self.__readStderr(self.lreleaseProc, 'lrelease: ')
+        proc = self.sender()
+        if proc is not None:
+            self.__readStderr(proc, 'lrelease: ')
         else:
             return
         
@@ -1063,13 +1065,20 @@
             E5MessageBox.critical(self,
                 self.trUtf8("Translation file release"),
                 self.trUtf8("The release of the translation files (*.qm) has failed."))
-        self.lreleaseProc = None
-        try:
-            os.remove(self.tmpProject)
-        except EnvironmentError:
-            pass
-        self.tmpProject = None
-        self.project.checkLanguageFiles()
+        
+        proc = self.sender()
+        for index in range(len(self.__lreleaseProcesses)):
+            if proc == self.__lreleaseProcesses[index][0]:
+                try:
+                    os.remove(self.__lreleaseProcesses[index][1])
+                except EnvironmentError:
+                    pass
+                del self.__lreleaseProcesses[index]
+                break
+        if not self.__lreleaseProcesses:
+            # all done
+            self.lreleaseProcRunning = False
+            self.project.checkLanguageFiles()
         
     def __releaseTSFile(self, generateAll=False):
         """
@@ -1103,9 +1112,6 @@
         if not ok:
             return
         
-        self.lreleaseProc = QProcess()
-        args = []
-        
         if self.project.getProjectType() in \
                 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
             lrelease = os.path.join(
@@ -1116,24 +1122,38 @@
         if Utilities.isWindowsPlatform():
             lrelease = lrelease + '.exe'
         
-        args.append('-verbose')
-        args.append(self.tmpProject)
-        self.lreleaseProc.setWorkingDirectory(self.project.ppath)
-        self.lreleaseProc.finished.connect(self.__releaseTSFileDone)
-        self.lreleaseProc.readyReadStandardOutput.connect(self.__readStdoutLrelease)
-        self.lreleaseProc.readyReadStandardError.connect(self.__readStderrLrelease)
-        
-        self.lreleaseProc.start(lrelease, args)
-        procStarted = self.lreleaseProc.waitForStarted(5000)
-        if procStarted:
-            self.lreleaseProcRunning = True
-        else:
-            E5MessageBox.critical(self,
-                self.trUtf8('Process Generation Error'),
-                self.trUtf8(
-                    '<p>Could not start lrelease.<br>'
-                    'Ensure that it is available as <b>{0}</b>.</p>'
-                ).format(lrelease))
+        self.__lreleaseProcesses = []
+        for tempProjectFile in self.__tmpProjects[:]:
+            proc = QProcess()
+            args = []
+
+            args.append('-verbose')
+            path, filename = os.path.split(tempProjectFile)
+            args.append(filename)
+            proc.setWorkingDirectory(os.path.join(self.project.ppath, path))
+            proc.finished.connect(self.__releaseTSFileDone)
+            proc.readyReadStandardOutput.connect(self.__readStdoutLrelease)
+            proc.readyReadStandardError.connect(self.__readStderrLrelease)
+            
+            proc.start(lrelease, args)
+            procStarted = proc.waitForStarted()
+            if procStarted:
+                self.lreleaseProcRunning = True
+                self.__lreleaseProcesses.append((proc, tempProjectFile))
+            else:
+                E5MessageBox.critical(self,
+                    self.trUtf8('Process Generation Error'),
+                    self.trUtf8(
+                        '<p>Could not start lrelease.<br>'
+                        'Ensure that it is available as <b>{0}</b>.</p>'
+                    ).format(lrelease))
+                
+                # cleanup
+                try:
+                    self.__tmpProjects.remove(tempProjectFile)
+                    os.remove(tempProjectFile)
+                except EnvironmentError:
+                    pass
         
     def __releaseSelected(self):
         """

eric ide

mercurial