def openFirstFile(selected, error): if not error: if len(selected) == 1 and Utils.queryFileExtension( selected[0], interop.getSceneFiles()): if not interop.getCurrentSceneFile() == selected[0]: result = QtWidgets.QMessageBox.question( interop.main_parent_window(), "Open Scene?", "Do you want to open the checked out scene?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.StandardButton.Yes: interop.openScene(selected[0])
def openSelectedFile(self, *args): index = self.tableWidget.currentRow() item = self.entries[index] fileName = item['File'] filePath = item['Folder'] depotFile = os.path.join(filePath, fileName) try: result = self.p4.run_fstat(depotFile)[0] clientFile = result['clientFile'] if Utils.queryFileExtension(depotFile, interop.getSceneFiles()): interop.openScene(clientFile) else: Utils.open_file(clientFile) except P4Exception as e: displayErrorUI(e)
def populateFileRevisions(self, *args): self.statusBar.showMessage("") try: index = self.fileTree.selectedIndexes() except IndexError as e: Utils.p4Logger().error(e) raise if not index or not index[0].internalPointer().data: return index = index[0] try: name, filetype, time, action, change, fullname = index.internalPointer( ).data except ValueError as e: Utils.p4Logger().info(index.internalPointer().data) raise e self.getRevisionBtn.setEnabled(False) self.getLatestBtn.setEnabled(False) self.getPreviewBtn.setEnabled(False) if filetype == 'Folder': self.getRevisionBtn.setVisible(False) self.getLatestBtn.setVisible(False) self.getPreviewBtn.setVisible(False) self.isSceneFile = False self.clearRevisions() return else: self.getRevisionBtn.setVisible(True) self.getLatestBtn.setVisible(True) self.getPreviewBtn.setVisible(True) if Utils.queryFileExtension(fullname, interop.getSceneFiles()): self.getPreviewBtn.setEnabled(True) self.getPreviewBtn.setText("Preview Scene Revision") self.isSceneFile = True else: self.getPreviewBtn.setText("Preview File Revision") self.isSceneFile = False try: with self.p4.at_exception_level(P4.RAISE_ERRORS): files = self.p4.run_filelog("-l", fullname) except P4Exception as e: # TODO - Better error handling here, what if we can't connect etc #eMsg, type = parsePerforceError(e) self.statusBar.showMessage("{0} isn't on client".format( os.path.basename(fullname))) self.clearRevisions() self.getLatestBtn.setEnabled(False) self.getPreviewBtn.setEnabled(False) return self.getLatestBtn.setEnabled(True) self.getPreviewBtn.setEnabled(True) try: with self.p4.at_exception_level(P4.RAISE_ERRORS): p4FileInfo = self.p4.run_fstat(fullname) if p4FileInfo: fileInfo = p4FileInfo[0] if 'otherLock' in fileInfo: self.statusBar.showMessage( "{0} currently locked by {1}".format( os.path.basename(fullname), fileInfo['otherLock'][0])) if fileInfo['otherLock'][0].split('@')[0] != self.p4.user: self.getRevisionBtn.setEnabled(False) elif 'otherOpen' in fileInfo: self.statusBar.showMessage( "{0} currently opened by {1}".format( os.path.basename(fullname), fileInfo['otherOpen'][0])) if fileInfo['otherOpen'][0].split('@')[0] != self.p4.user: self.getRevisionBtn.setEnabled(False) else: self.statusBar.showMessage( "{0} currently opened by {1}@{2}".format( os.path.basename(fullname), self.p4.user, self.p4.client)) self.getRevisionBtn.setEnabled(True) except P4Exception: self.statusBar.showMessage("{0} is not checked out".format( os.path.basename(fullname))) self.getRevisionBtn.setEnabled(True) # Generate revision dictionary self.fileRevisions = [] if files: Utils.p4Logger().debug('filelog(%s):%s' % (fullname, files)) for revision in files[0].each_revision(): self.fileRevisions.append({ "revision": revision.rev, "action": revision.action, "date": revision.time, "desc": revision.desc, "user": revision.user, "client": revision.client }) self.tableWidget.setRowCount(len(self.fileRevisions)) # Map a file action to the path of it's UI icon actionToIcon = { 'edit': os.path.join(interop.getIconPath(), "File0440.png"), 'add': os.path.join(interop.getIconPath(), "File0242.png"), 'delete': os.path.join(interop.getIconPath(), "File0253.png"), 'move/delete': os.path.join(interop.getIconPath(), "File0253.png"), 'purge': os.path.join(interop.getIconPath(), "File0253.png") } # Populate table for i, revision in enumerate(self.fileRevisions): columns = [("#{0}".format(revision['revision']), None, False), (revision['user'], None, False), (revision['action'].capitalize(), actionToIcon.get(revision['action']), False), (revision['date'], None, False), (revision['client'], None, False), (revision['desc'], None, True)] for j, data in enumerate(columns): self.setRevisionTableColumn(i, j, *data) self.tableWidget.resizeColumnsToContents() self.tableWidget.resizeRowsToContents() self.tableWidget.horizontalHeader().setStretchLastSection(True)