class Window(QDialog): def __init__(self): QDialog.__init__(self) self.target_codec = 'hevc' self.logIsTerse = True self.printProgress = True defaultDirectory = "/media/" screen1 = QHBoxLayout() self.setLayout(screen1) self.inputBox = QLineEdit(defaultDirectory) browseContainer = QVBoxLayout() inputBrowseContainer = QHBoxLayout() inputBrowseContainer.addWidget(self.inputBox) self.consoleBox = QPlainTextEdit() analyzeButton = QPushButton("Analyze") analyzeButton.clicked.connect(self.analyze) saveLogButton = QPushButton("Save log to directory") saveLogButton.clicked.connect(self.saveLog) browseContainer.addLayout(inputBrowseContainer) browseContainer.addWidget(analyzeButton) browseContainer.addWidget(self.consoleBox) browseContainer.addWidget(saveLogButton) screen1.addLayout(browseContainer) def saveLog(self): savedir = self.getDirString() os.chdir(savedir) if self.consoleBox.blockCount() <= 1: self.analyze() with open("ConversionLog" + str(time.strftime("%Y%m%d")) + ".txt", 'w', encoding="utf8") as logFile: logFile.write("Generated on: " + str(time.strftime("%b %d %Y, %I:%M %p")) + "\n") if self.logIsTerse: logFile.write("Log is Terse\n\n") logFile.write(str(self.consoleBox.toPlainText())) def analyze(self): self.consoleBox.clear() print("Analyzing") rootdir = self.getDirString() directoryList = [] infoTuples = [] fileExtensionsToAnalyze = [ '.mp4', '.mkv', '.avi', '.m4v', '.wmv', '.MP4', '.MKV', '.AVI', '.M4V', '.wmv' ] invalidFilesList = [] # Build list of immediate subdirectories for fileNames in os.listdir(rootdir): if os.path.isdir(rootdir + fileNames): directoryList.append(fileNames) directoryList = sorted(directoryList) # Scan subdirectories and tally info for dirs in directoryList: numberOfFiles = 0 sizeOfFiles = 0 numberOfInvalidFiles = 0 sizeOfInvalidFiles = 0 sizeOfOtherFiles = 0 if self.printProgress: print() print(dirs) # Build filelist for subdirectories, start tallying by type for fileNames in os.listdir(rootdir + dirs): filePath = os.path.join(rootdir + dirs, fileNames) if os.path.isdir(filePath): sizeOfOtherFiles += get_dir_size_recursive(filePath) else: if any(extensions in fileNames for extensions in fileExtensionsToAnalyze): mediaInfo = MediaObject(filePath) mediaInfo.run() if mediaInfo.fileIsValid: codec = mediaInfo.videoCodec if codec != self.target_codec: numberOfFiles += 1 sizeOfFiles += os.path.getsize(filePath) else: invalidFilesList.append(filePath) numberOfInvalidFiles += 1 sizeOfInvalidFiles += os.path.getsize(filePath) else: sizeOfOtherFiles += os.path.getsize(filePath) # Changes bytes to Megabytes sizeOfFiles /= 1000000 sizeOfInvalidFiles /= 1000000 sizeOfOtherFiles /= 1000000 # Don't worry about directories with nothing to convert if numberOfFiles > 0: infoTuples.append( (sizeOfFiles, numberOfFiles, dirs, sizeOfInvalidFiles, numberOfInvalidFiles, sizeOfOtherFiles)) # Sorts by file sizes printableList = sorted(infoTuples) self.printAnalysis(printableList, invalidFilesList) def printAnalysis(self, printableList, invalidFilesList): # Print the tuples, big numbers first for i in range(len(printableList) - 1, -1, -1): sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) print(printableList[i][2]) print() print("Size of h264 files: " + str(math.floor((printableList[i][0] * 100)) / 100) + " MB") print("Number of h264 files: " + str(printableList[i][1])) print() if self.logIsTerse == False or printableList[i][4] > 0: print("Size of invalid files: " + str(math.floor((printableList[i][3] * 100)) / 100) + " MB") print("Number of invalid files: " + str(printableList[i][4])) print() if self.logIsTerse == False or printableList[i][5] > 0: print("Size of other files & folders: " + str(math.floor((printableList[i][5] * 100)) / 100) + " MB") print() print() print() print("Invalid/malformed files:") for i in range(0, len(invalidFilesList) - 1): print(" " + invalidFilesList[i]) # Scrolls back to top of list for reading cursor = self.consoleBox.textCursor() cursor.setPosition(0) self.consoleBox.setTextCursor(cursor) def getDirString(self): inputText = self.inputBox.text() if sys.platform == 'win32': if inputText[len(inputText) - 1] is not "\\": inputText += "\\" return inputText def normalOutputWritten(self, text): cursor = self.consoleBox.textCursor() cursor.movePosition(QTextCursor.End) cursor.insertText(text) self.consoleBox.setTextCursor(cursor) self.consoleBox.ensureCursorVisible() def __del__(self): sys.stdout = sys.__stdout__
class search_window(QtWidgets.QWidget): def __init__(self): QtWidgets.QWidget.__init__(self) self.setup() def setup(self): self.setGeometry(10, 10, 900, 600) self.setFixedSize(900,600) self.setWindowTitle("Search") self.textbox = QtWidgets.QLineEdit(self) self.textbox.move(165, 150) self.textbox.setEchoMode(QLineEdit.Normal) self.textbox.resize(280, 40) self.textbox2 = QtWidgets.QLineEdit(self) self.textbox2.move(605, 270) self.textbox2.setEchoMode(QLineEdit.Normal) self.textbox2.resize(280, 40) self.continueBtn = QtWidgets.QPushButton("Perform Query", self) self.continueBtn.setGeometry(205,200, 200,60) self.continueBtn.clicked.connect(self.cont) self.exportBtn = QtWidgets.QPushButton("Export Query", self) self.exportBtn.setGeometry(625, 200, 200, 60) self.exportBtn.clicked.connect(self.exportFunc) self.output2 = QPlainTextEdit(self) self.output2.move(205,260) self.output2.setGeometry(150,300,400,200) self.output2.setReadOnly(True) self.show() self.theOutput =[] self.input ="" #def QPlainTextEdit.event(e) def errorPop(self,err,msgCode=0): msg = QtWidgets.QMessageBox() if msgCode ==0: msg.setText(str(err)[7:-1]) else: msg.setText(str(err)) msg.setInformativeText( "Check your input." + "\nClick Cancel To Exit") msg.setWindowTitle("Error: Invalid Search String") msg.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel) msg.setGeometry(190, 190, 200, 100) ret = msg.exec_() if ret == 4194304: QtWidgets.QApplication.quit() def exportFunc(self): self.input2 = self.textbox2.text() if self.output2.blockCount() == 1: return if self.input2 == "": self.errorPop("You must enter a file name!",1) return ex = export.export() ex.runExport(self.theOutput, self.input, self.input2) def cont(self): self.input = self.textbox.text().lower() bool = self.input.find("select") if input == "": return elif bool == -1: self.errorPop("ONLY QUERIES PERMITTED",1) return else: que = dbQuery.query() returnInput,e = que.query(self.input) if returnInput == 0: self.errorPop(e) else: self.output2.clear() for x in range(e): self.output2.insertPlainText(returnInput[x] +"\n") self.theOutput = returnInput def paintEvent(self,event): self.qp = QPainter() self.qp.begin(self) self.qp.drawText(90,90,"Enter in your query") self.qp.end()