Project/ProjectTranslationsBrowser.py

changeset 2795
641d03b2aa8c
parent 2785
06c9e4d45f9f
child 2803
282752ecd0fc
equal deleted inserted replaced
2794:2c4a7e0d18ab 2795:641d03b2aa8c
69 """<b>Project Translations Browser</b>""" 69 """<b>Project Translations Browser</b>"""
70 """<p>This allows to easily see all translations contained in the current""" 70 """<p>This allows to easily see all translations contained in the current"""
71 """ project. Several actions can be executed via the context menu.</p>""" 71 """ project. Several actions can be executed via the context menu.</p>"""
72 )) 72 ))
73 73
74 self.lreleaseProc = None 74 self.__lreleaseProcesses = []
75 self.__pylupdateProcesses = []
75 self.lreleaseProcRunning = False 76 self.lreleaseProcRunning = False
76 self.pylupdateProcRunning = False 77 self.pylupdateProcRunning = False
77 self.__tmpProjects = [] 78 self.__tmpProjects = []
78 self.__pylupdateProcesses = []
79 79
80 def _createPopupMenus(self): 80 def _createPopupMenus(self):
81 """ 81 """
82 Protected overloaded method to generate the popup menu. 82 Protected overloaded method to generate the popup menu.
83 """ 83 """
793 def __readStdoutLrelease(self): 793 def __readStdoutLrelease(self):
794 """ 794 """
795 Private slot to handle the readyReadStandardOutput signal of the 795 Private slot to handle the readyReadStandardOutput signal of the
796 lrelease process. 796 lrelease process.
797 """ 797 """
798 if self.lreleaseProc is not None: 798 proc = self.sender()
799 self.__readStdout(self.lreleaseProc, 'lrelease: ') 799 if proc is not None:
800 self.__readStdout(proc, 'lrelease: ')
800 else: 801 else:
801 return 802 return
802 803
803 def __readStdout(self, proc, ps): 804 def __readStdout(self, proc, ps):
804 """ 805 """
830 def __readStderrLrelease(self): 831 def __readStderrLrelease(self):
831 """ 832 """
832 Private slot to handle the readyReadStandardError signal of the 833 Private slot to handle the readyReadStandardError signal of the
833 lrelease process. 834 lrelease process.
834 """ 835 """
835 if self.lreleaseProc is not None: 836 proc = self.sender()
836 self.__readStderr(self.lreleaseProc, 'lrelease: ') 837 if proc is not None:
838 self.__readStderr(proc, 'lrelease: ')
837 else: 839 else:
838 return 840 return
839 841
840 def __readStderr(self, proc, ps): 842 def __readStderr(self, proc, ps):
841 """ 843 """
1061 shutil.move(qmFile, target) 1063 shutil.move(qmFile, target)
1062 else: 1064 else:
1063 E5MessageBox.critical(self, 1065 E5MessageBox.critical(self,
1064 self.trUtf8("Translation file release"), 1066 self.trUtf8("Translation file release"),
1065 self.trUtf8("The release of the translation files (*.qm) has failed.")) 1067 self.trUtf8("The release of the translation files (*.qm) has failed."))
1066 self.lreleaseProc = None 1068
1067 try: 1069 proc = self.sender()
1068 os.remove(self.tmpProject) 1070 for index in range(len(self.__lreleaseProcesses)):
1069 except EnvironmentError: 1071 if proc == self.__lreleaseProcesses[index][0]:
1070 pass 1072 try:
1071 self.tmpProject = None 1073 os.remove(self.__lreleaseProcesses[index][1])
1072 self.project.checkLanguageFiles() 1074 except EnvironmentError:
1075 pass
1076 del self.__lreleaseProcesses[index]
1077 break
1078 if not self.__lreleaseProcesses:
1079 # all done
1080 self.lreleaseProcRunning = False
1081 self.project.checkLanguageFiles()
1073 1082
1074 def __releaseTSFile(self, generateAll=False): 1083 def __releaseTSFile(self, generateAll=False):
1075 """ 1084 """
1076 Private method to run lrelease to release the translation files (.qm). 1085 Private method to run lrelease to release the translation files (.qm).
1077 1086
1101 else: 1110 else:
1102 ok = False 1111 ok = False
1103 if not ok: 1112 if not ok:
1104 return 1113 return
1105 1114
1106 self.lreleaseProc = QProcess()
1107 args = []
1108
1109 if self.project.getProjectType() in \ 1115 if self.project.getProjectType() in \
1110 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]: 1116 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
1111 lrelease = os.path.join( 1117 lrelease = os.path.join(
1112 Utilities.getQtBinariesPath(), 1118 Utilities.getQtBinariesPath(),
1113 Utilities.generateQtToolName("lrelease")) 1119 Utilities.generateQtToolName("lrelease"))
1114 else: 1120 else:
1115 return 1121 return
1116 if Utilities.isWindowsPlatform(): 1122 if Utilities.isWindowsPlatform():
1117 lrelease = lrelease + '.exe' 1123 lrelease = lrelease + '.exe'
1118 1124
1119 args.append('-verbose') 1125 self.__lreleaseProcesses = []
1120 args.append(self.tmpProject) 1126 for tempProjectFile in self.__tmpProjects[:]:
1121 self.lreleaseProc.setWorkingDirectory(self.project.ppath) 1127 proc = QProcess()
1122 self.lreleaseProc.finished.connect(self.__releaseTSFileDone) 1128 args = []
1123 self.lreleaseProc.readyReadStandardOutput.connect(self.__readStdoutLrelease) 1129
1124 self.lreleaseProc.readyReadStandardError.connect(self.__readStderrLrelease) 1130 args.append('-verbose')
1125 1131 path, filename = os.path.split(tempProjectFile)
1126 self.lreleaseProc.start(lrelease, args) 1132 args.append(filename)
1127 procStarted = self.lreleaseProc.waitForStarted(5000) 1133 proc.setWorkingDirectory(os.path.join(self.project.ppath, path))
1128 if procStarted: 1134 proc.finished.connect(self.__releaseTSFileDone)
1129 self.lreleaseProcRunning = True 1135 proc.readyReadStandardOutput.connect(self.__readStdoutLrelease)
1130 else: 1136 proc.readyReadStandardError.connect(self.__readStderrLrelease)
1131 E5MessageBox.critical(self, 1137
1132 self.trUtf8('Process Generation Error'), 1138 proc.start(lrelease, args)
1133 self.trUtf8( 1139 procStarted = proc.waitForStarted()
1134 '<p>Could not start lrelease.<br>' 1140 if procStarted:
1135 'Ensure that it is available as <b>{0}</b>.</p>' 1141 self.lreleaseProcRunning = True
1136 ).format(lrelease)) 1142 self.__lreleaseProcesses.append((proc, tempProjectFile))
1143 else:
1144 E5MessageBox.critical(self,
1145 self.trUtf8('Process Generation Error'),
1146 self.trUtf8(
1147 '<p>Could not start lrelease.<br>'
1148 'Ensure that it is available as <b>{0}</b>.</p>'
1149 ).format(lrelease))
1150
1151 # cleanup
1152 try:
1153 self.__tmpProjects.remove(tempProjectFile)
1154 os.remove(tempProjectFile)
1155 except EnvironmentError:
1156 pass
1137 1157
1138 def __releaseSelected(self): 1158 def __releaseSelected(self):
1139 """ 1159 """
1140 Private method to release the translation files (.qm). 1160 Private method to release the translation files (.qm).
1141 """ 1161 """

eric ide

mercurial