Ejemplo n.º 1
0
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__
Ejemplo n.º 2
0
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()