Example #1
0
    def run(self):

        file_iter = QDirIterator(self._path, QDirIterator.Subdirectories)

        while file_iter.hasNext():

            file_name = file_iter.next()

            if Path(file_name).is_dir():
                continue

            condition = [
                magic.from_file(file_name).lower().startswith(ext)
                for ext in self._filter
            ]

            if any(condition):
                new_resource = Resource(path=file_name,
                                        image=QPixmap(file_name),
                                        thumbnail=QPixmap(file_name).scaled(
                                            100, 100, Qt.KeepAspectRatio,
                                            Qt.SmoothTransformation))

                self.resource_loaded.emit(new_resource)

        self.finished.emit()
Example #2
0
    def find(self):
        self.filesTable.setRowCount(0)
        self.path = self.directoryComboBox.currentText()
        fileName = self.filterComboBox.currentText()
        files = []

        if not fileName:
            fileName = "*"
        fileName = fileName.split(", ")

        # not used, kept for full text search
        text = self.textComboBox.currentText()

        self.updateComboBox(self.directoryComboBox)
        self.updateComboBox(self.filterComboBox)
        self.updateComboBox(self.textComboBox)

        self.currentDir = QDir(self.path)

        self.it = QDirIterator(self.path, fileName, self.dirFilters,
                               self.searchRecursivity)
        while self.it.hasNext():
            files.append(self.it.next())

        # For full text search, not used
        if text:
            files = self.findFiles(files, text)

        self.showFiles(files)
Example #3
0
    def dropEvent(self, event):
        if event.mimeData().hasUrls():
            event.setDropAction(Qt.CopyAction)
            event.accept()
            icon = QIcon("loaded.png")
            for url in event.mimeData().urls():
                if url.isLocalFile():
                    fi = QFileInfo(url.toLocalFile())
                    if fi.isDir():
                        it = QDirIterator(
                            fi.fileName(),
                            QDir.Files,
                            QDirIterator.Subdirectories,
                        )
                        while it.hasNext():
                            item = QListWidgetItem()
                            item.setData(PathRole, it.next())
                            self.addItem(item)
                    elif fi.isFile():
                        item = QListWidgetItem()
                        item.setData(PathRole, url.toLocalFile())
                        self.addItem(item)

        else:
            event.ignore()
Example #4
0
    def __init__(self, size, parent=None):
        super(FlippablePad, self).__init__(self.boundsFromSize(size),
                QColor(226, 255, 92, 64), parent)

        numIcons = size.width() * size.height()
        pixmaps = []
        it = QDirIterator(":/images", ["*.png"])
        while it.hasNext() and len(pixmaps) < numIcons:
            pixmaps.append(it.next())

        iconRect = QRectF(-54, -54, 108, 108)
        iconColor = QColor(214, 240, 110, 128)
        self.iconGrid = []
        n = 0

        for y in range(size.height()):
            row = []

            for x in range(size.width()):
                rect = RoundRectItem(iconRect, iconColor, self)
                rect.setZValue(1)
                rect.setPos(self.posForLocation(x, y, size))
                rect.setPixmap(pixmaps[n % len(pixmaps)])
                n += 1

                row.append(rect)

            self.iconGrid.append(row)
Example #5
0
    def loadStamps(self):
        prefs = preferences.Preferences.instance()
        stampsDirectory = prefs.stampsDirectory()
        stampsDir = QDir(stampsDirectory)
        iterator = QDirIterator(stampsDirectory, ["*.stamp"],
                                QDir.Files | QDir.Readable)
        while (iterator.hasNext()):
            stampFileName = iterator.next()
            stampFile = QFile(stampFileName)
            if (not stampFile.open(QIODevice.ReadOnly)):
                continue
            data = stampFile.readAll()
            document = QJsonDocument.fromBinaryData(data)
            if (document.isNull()):
                # document not valid binary data, maybe it's an JSON text file
                error = QJsonParseError()
                document = QJsonDocument.fromJson(data, error)
                if (error.error != QJsonParseError.NoError):
                    qDebug("Failed to parse stamp file:" + error.errorString())
                    continue

            stamp = TileStamp.fromJson(document.object(), stampsDir)
            if (stamp.isEmpty()):
                continue
            stamp.setFileName(iterator.fileInfo().fileName())
            self.mTileStampModel.addStamp(stamp)
            index = stamp.quickStampIndex()
            if (index >= 0 and index < self.mQuickStamps.size()):
                self.mQuickStamps[index] = stamp
Example #6
0
    def loadStamps(self):
        prefs = preferences.Preferences.instance()
        stampsDirectory = prefs.stampsDirectory()
        stampsDir = QDir(stampsDirectory)
        iterator = QDirIterator(stampsDirectory,
                              ["*.stamp"],
                              QDir.Files | QDir.Readable)
        while (iterator.hasNext()):
            stampFileName = iterator.next()
            stampFile = QFile(stampFileName)
            if (not stampFile.open(QIODevice.ReadOnly)):
                continue
            data = stampFile.readAll()
            document = QJsonDocument.fromBinaryData(data)
            if (document.isNull()):
                # document not valid binary data, maybe it's an JSON text file
                error = QJsonParseError()
                document = QJsonDocument.fromJson(data, error)
                if (error.error != QJsonParseError.NoError):
                    qDebug("Failed to parse stamp file:" + error.errorString())
                    continue

            stamp = TileStamp.fromJson(document.object(), stampsDir)
            if (stamp.isEmpty()):
                continue
            stamp.setFileName(iterator.fileInfo().fileName())
            self.mTileStampModel.addStamp(stamp)
            index = stamp.quickStampIndex()
            if (index >= 0 and index < self.mQuickStamps.size()):
                self.mQuickStamps[index] = stamp
Example #7
0
    def __init__(self, size, parent=None):
        super(FlippablePad, self).__init__(self.boundsFromSize(size),
                                           QColor(226, 255, 92, 64), parent)

        numIcons = size.width() * size.height()
        pixmaps = []
        it = QDirIterator(":/images", ["*.png"])
        while it.hasNext() and len(pixmaps) < numIcons:
            pixmaps.append(it.next())

        iconRect = QRectF(-54, -54, 108, 108)
        iconColor = QColor(214, 240, 110, 128)
        self.iconGrid = []
        n = 0

        for y in range(size.height()):
            row = []

            for x in range(size.width()):
                rect = RoundRectItem(iconRect, iconColor, self)
                rect.setZValue(1)
                rect.setPos(self.posForLocation(x, y, size))
                rect.setPixmap(pixmaps[n % len(pixmaps)])
                n += 1

                row.append(rect)

            self.iconGrid.append(row)
Example #8
0
    def startSearch(self, query):
        print("search started..", query)
        filters = QDir.Files
        nameFilters = ["*.cpp"]
        iterator = QDirIterator("/home/alexanderb", nameFilters, filters,
                                QDirIterator.Subdirectories)
        while (iterator.hasNext()):
            filePath = iterator.next()
            fileInfo = QFileInfo(filePath)
            currentFile = QFile(filePath)
            currentFile.open(QFile.ReadOnly | QFile.Text)
            fileContents = currentFile.readAll().data().decode('utf8',
                                                               errors='ignore')
            if (fileContents.find(query) != -1):
                qtwItem = QTreeWidgetItem()
                qtwItem.setText(0, fileInfo.fileName())
                qtwItem.setText(1, fileInfo.suffix())
                qtwItem.setText(2, str(fileInfo.size() / 1024))
                qtwItem.setText(3,
                                fileInfo.lastModified().toString("MM/dd/yyyy"))
                qtwItem.setText(4, fileInfo.created().toString("MM/dd/yyyy"))
                qtwItem.setText(5, str("...here is the content..."))
                qtwItem.setText(6, filePath)
                self.qtwItems.append(qtwItem)

                self.match_found.emit(qtwItem)

        self.finished.emit()
Example #9
0
    def selectFolder(self, folder=None):
        debugMsg("SelectFolder")
        if folder is None:
            folder = self.treeView.currentIndex()
        self.listWidget.clear()

        self.currentFolder = self.filesystemmodel.filePath(
            self.treeView.currentIndex())
        print("current folder: ", self.currentFolder)

        if (self.showRecursive):
            flag = QDirIterator.Subdirectories
        else:
            flag = QDirIterator.NoIteratorFlags

        file_it = QDirIterator(self.currentFolder, [
            "*.jpg", "*.jpeg", "*.tiff", "*.png", "*.JPG", "*.JPEG", ".PNG",
            "*.TIFF"
        ], QDir.Files, flag)
        self._current_files = []
        while file_it.hasNext():
            filename = file_it.next()
            #print ("filename: ",filename)
            #print ("  - replacing", self.currentFolder+os.path.sep)
            item = filename.replace(self.currentFolder, ".")
            #print ("  -->item: ",item)
            self._current_files.append(item)
            self.listWidget.addItem(item)
        self.listWidget.clear()
        self._current_files.sort()
        self.listWidget.addItems(self._current_files)

        return
Example #10
0
    def configure(self, machineType, machineConfig, machinePort, machineStart):
        it = QDirIterator(self.dataConfigDir, ['*.cfg.json'])
        while it.hasNext():
            fileInfo = QFileInfo(it.next())
            basename = fileInfo.baseName()
            self.machineConfigCB.addItem(basename)

        self.reloadSettings()
Example #11
0
def import_emojis():
    import emoji

    emojis = []
    iterator = QDirIterator(":/emoji/", QDirIterator.Subdirectories)
    while iterator.hasNext():
        emoji = iterator.next()
        emojis.append(emoji[8:13])
    return emojis
Example #12
0
 def loadAvailableLanguages(self):
     self.mLanguages.clear()
     nameFilters = QStringList()
     nameFilters.append("tiled_*.qm")
     iterator = QDirIterator(self.mTranslationsDir, nameFilters, QDir.Files | QDir.Readable)
     while (iterator.hasNext()):
         iterator.next()
         baseName = iterator.fileInfo().completeBaseName()
         # Cut off "tiled_" from the start
         self.mLanguages.append(baseName[6:])
    def start_search(self, query, search_directory):
        self.keep_searching = True
        print("search started..", query)
        filters = QDir.Files

        nameFilters = [
            "*.cpp", "*.txt", "*.pdf", "*.doc", "*.docx", "*.xlsx", "*.xls",
            "*.ppt", "*.pptx"
        ]

        iterator = QDirIterator(search_directory, nameFilters, filters,
                                QDirIterator.Subdirectories)
        while (iterator.hasNext()):
            QApplication.processEvents()
            if (self.keep_searching):
                file_path = iterator.next()
                if (os.access(file_path, os.R_OK)):
                    try:
                        file_info = QFileInfo(file_path)
                        file_contents = parser.from_file(file_path)
                    except:
                        continue

                    if (file_contents['status'] == 200
                            and 'content' in file_contents.keys()
                            and file_contents['content'] is not None):
                        found_index = file_contents['content'].find(query)
                        if (found_index != -1):
                            snippet = file_contents['content'].strip().replace(
                                '\n', ' ').replace('\r', '')
                            snippet_index = snippet.find(query)

                            qtw_item = QTreeWidgetItem()
                            qtw_item.setText(0, file_info.fileName())
                            qtw_item.setText(1, file_info.suffix())
                            qtw_item.setText(2, str(file_info.size() / 1024))
                            qtw_item.setText(
                                3,
                                file_info.lastModified().toString(
                                    "MM/dd/yyyy"))
                            qtw_item.setText(
                                4,
                                file_info.created().toString("MM/dd/yyyy"))
                            qtw_item.setText(
                                5,
                                str(snippet)[snippet_index - 5:snippet_index +
                                             10])
                            qtw_item.setText(6, file_path)
                            self.qtw_items.append(qtw_item)

                            self.match_found.emit(qtw_item)
        self.finished.emit()
Example #14
0
 def run(self):
     if not os.path.exists(self.folder_location):
         return None
     filter = QDir.Dirs | QDir.Files | QDir.Hidden
     iterator = QDirIterator(self.folder_location, filter, QDirIterator.Subdirectories)
     while iterator.hasNext():
         path = iterator.next()
         if os.path.isfile(path):
             file_name = os.path.split(path)
             self.scanning_signal.emit("[SCANNING]: "+file_name[1])
             self.scan_for_yara(path=path)
             self.scan_for_tlsh(path=path)
     self.scanning_signal.emit(None)
Example #15
0
    def openImages(self, directory):
        image_it = QDirIterator(directory, labeler.IMAGE_FILE_TEMPLATES,
                QDir.Files, QDirIterator.Subdirectories)
        self._current_images = []
        while image_it.hasNext():
            self._current_images.append(image_it.next())
        self._current_images.sort()

        self._image_spinner.setRange(0, 0)
        self._image_spinner.setEnabled(False)
        self._image_spinner.setValue(0)
        image_total = len(self._current_images)
        if image_total > 0:
            self._progress_bar.setRange(0, image_total)
            self._image_spinner.setRange(1, image_total)
            self._image_spinner.setEnabled(True)
            self._image_spinner.setValue(1)
Example #16
0
    def load_playlist(self, path):
        '''load new playlist'''

        debug('load playlist')
        self.playlist.clear()

        # Note: not actually sure these formats are all supported ...
        files = QDirIterator(path, ['*.mp3', '*.ogg', '*.wav', '*.flac'], flags=QDirIterator.Subdirectories)
        while files.hasNext():
            filename = files.next()
            debug('+ {}'.format(filename))

            url = QUrl.fromLocalFile(filename)
            if not self.playlist.addMedia(QMediaContent(url)):
                debug('addMedia() => False')

        self.player.setPlaylist(self.playlist)
Example #17
0
	def dir_choosing(self):
		self.index = 0
		self.new_playlist = True
		directory = QFileDialog.getExistingDirectory(None, "Open Directory", "/", QFileDialog.ShowDirsOnly)
		if directory:
			os.chdir(directory)
			self.tableWidget.setRowCount(0)
			self.playlist = []
			filters = QDir.Files
			nameFilters = ["*.mp3", "*.MP3", "*.Mp3", "*.mP3"]
			qDirIterator = QDirIterator(directory, nameFilters, filters, QDirIterator.Subdirectories)
			while qDirIterator.hasNext():
				qDirIterator.next()
				fileInfo = qDirIterator.fileInfo()
				fdir = fileInfo.absoluteDir().absolutePath()
				song = qDirIterator.filePath()
				self.playlist.append(song)
				try:
					song_tags = TinyTag.get(song)
				except:
					print("Corrupted file:\n", len(self.playlist),
						  song, "\nCan't get the tags")
					self.add_corrupted_files(song)
				else:
					self.add_items_to_list(song_tags, song)
			self.playlist_action()
Example #18
0
def countFiles(self, folder):
    files = []

    if self.subfolderLevel > 0:
        try:
            path = glob.glob('%s/%s' % (folder, '*/' * self.subfolderLevel))[0]
            self.pathToDisplay = path
        except:
            return 0
    else:
        path = folder

    it = QDirIterator(path, (QDir.Files | QDir.NoSymLinks),
                      self.countRecursivity)
    while it.hasNext():
        files.append(it.next())

    count = len(files)
    return count
Example #19
0
def main():
    mainView = "qrc:///main.qml"
    application = QGuiApplication(sys.argv)

    qmlRegisterType(ElHamalEncryptor, 'elhamal', 1, 0, 'Encryptor')
    qmlRegisterType(ElHamalDecryptor, 'elhamal', 1, 0, 'Decryptor')
    qmlRegisterType(ElHamalKeysGenerator, 'elhamal', 1, 0, 'KeysGenerator')

    qInstallMessageHandler(handleStatusChange)

    it = QDirIterator(":", QDirIterator.Subdirectories)
    while it.hasNext():
        print(it.next())

    view = QQuickView()
    view.setResizeMode(QQuickView.SizeViewToRootObject)
    view.setSource(QUrl(mainView))

    sys.exit(application.exec_())
Example #20
0
 def hasChildren(self, parent):
     """Overridden to only show the expand arrow when there are subfolders."""
     if parent.flags() & Qt.ItemFlag.ItemNeverHasChildren:
         return False
     elif (self.filePath(parent)):
         return QDirIterator(
             self.filePath(parent),
             self.filter() | QDir.Filter.NoDotAndDotDot,
             QDirIterator.IteratorFlag.NoIteratorFlags).hasNext()
     return QFileSystemModel.hasChildren(self, parent)
Example #21
0
 def UItranslations(self):
     """ Get list of available ui translations
     """
     # iterate over resource file to find available translations
     fltr = QDir.Dirs | QDir.Files | QDir.Hidden
     iterator = QDirIterator(':', fltr, QDirIterator.Subdirectories)
     while iterator.hasNext():
         filePath = iterator.next()
         if '/translations/ts/' in filePath:
             fileName  = os.path.basename(str(filePath[1:]))
             locale = fileName.replace('lector_','').replace('.qm', '')
             if locale:
                 self.ui.cbLang.addItem(locale)
     locale = settings.get('ui:lang')
     if not locale:
         locale = QLocale.system().name()
     currentIndex = self.ui.cbLang.findText(locale)
     if currentIndex <= -1:
         currentIndex = self.ui.cbLang.findText('en_GB')
     self.ui.cbLang.setCurrentIndex(currentIndex)
Example #22
0
 def UItranslations(self):
     """ Get list of available ui translations
     """
     # iterate over resource file to find available translations
     fltr = QDir.Dirs | QDir.Files | QDir.Hidden
     iterator = QDirIterator(':', fltr, QDirIterator.Subdirectories)
     while iterator.hasNext():
         filePath = iterator.next()
         if '/translations/ts/' in filePath:
             fileName = os.path.basename(str(filePath[1:]))
             locale = fileName.replace('lector_', '').replace('.qm', '')
             if locale:
                 self.ui.cbLang.addItem(locale)
     locale = settings.get('ui:lang')
     if not locale:
         locale = QLocale.system().name()
     currentIndex = self.ui.cbLang.findText(locale)
     if currentIndex <= -1:
         currentIndex = self.ui.cbLang.findText('en_GB')
     self.ui.cbLang.setCurrentIndex(currentIndex)
Example #23
0
    def openDataDir(self):
        dialog = QFileDialog(self)

        dialog.setFileMode(QFileDialog.Directory)
        dialog.setOption(QFileDialog.ReadOnly)

        if dialog.exec():
            datadir = dialog.selectedFiles()[0]

            classesdir = YOSO.classesDir(datadir)
            classesdir_it = QDirIterator(classesdir, YOSO.IMAGE_FILE_TEMPLATES,
                                         QDir.Files)
            classes = []
            while classesdir_it.hasNext():
                class_image = classesdir_it.next()
                match = YOSO.CLASSES_RE.match(basename(class_image))
                if match != None:
                    class_num = int(match.group('cls'))
                    class_name = match.group('name')
                    class_object = Class(class_num, class_name,
                                         QPixmap(class_image))
                    classes.append(class_object)
            classes.sort(key=lambda c: c.number)

            classes_model = ClassListModel(classes)
            self._classes_view.setModel(classes_model)
            self._workspace.setModel(classes_model)
            self._classes_view.setEnabled(len(classes) > 0)
            selMod = self._classes_view.selectionModel()
            selMod.currentChanged.connect(self._workspace.setDefaultClass)
            selMod.setCurrentIndex(classes_model.index(0, 0),
                                   QItemSelectionModel.Select)

            self._top_images_dir = YOSO.imagesDir(datadir)
            self._top_labels_dir = YOSO.labelsDir(datadir)

            imagedir_it = QDirIterator(self._top_images_dir,
                                       QDir.AllDirs | QDir.NoDotAndDotDot,
                                       QDirIterator.Subdirectories)
            self._image_dirs_combo_box.clear()
            self._image_dirs_combo_box.addItem(self._top_images_dir)
            while imagedir_it.hasNext():
                img_dir = imagedir_it.next()
                self._image_dirs_combo_box.addItem(img_dir)
                lbl_dir = img_dir.replace(self._top_images_dir,
                                          self._top_labels_dir)
                try:
                    makedirs(lbl_dir)
                except OSError as ex:
                    if ex.errno != errno.EEXIST:
                        raise
Example #24
0
    def watch_project_dir(self):
        files = self.file_watch.files()
        directories = self.file_watch.directories()

        if len(files):
            self.file_watch.removePaths(files)

        if len(directories):
            self.file_watch.removePaths(directories)

        files = self.build_file_watch.files()
        directories = self.build_file_watch.directories()

        if len(files):
            self.build_file_watch.removePaths(files)

        if len(directories):
            self.build_file_watch.removePaths(directories)

        files = []
        it = QDirIterator(self.project.source_dir, QDirIterator.Subdirectories)
        while it.hasNext():
            files.append(it.next())

        self.file_watch.addPaths(files)

        files = []
        it = QDirIterator(self.project.build_dir, QDirIterator.Subdirectories)
        while it.hasNext():
            files.append(it.next())

        self.build_file_watch.addPaths(files)
Example #25
0
 def loadAvailableLanguages(self):
     self.mLanguages.clear()
     nameFilters = QStringList()
     nameFilters.append("tiled_*.qm")
     iterator = QDirIterator(self.mTranslationsDir, nameFilters,
                             QDir.Files | QDir.Readable)
     while (iterator.hasNext()):
         iterator.next()
         baseName = iterator.fileInfo().completeBaseName()
         # Cut off "tiled_" from the start
         self.mLanguages.append(baseName[6:])
Example #26
0
    def scanFolder(self, path):
        self._tempSongs = {}

        filters = QDir.Files
        nameFilters = [
            "*.wav", "*.wma", "*.mp2", "*.mp3", "*.mp4", "*.m4a", "*.flac",
            "*.ogg"
        ]
        qDirIterator = QDirIterator(path, nameFilters, filters,
                                    QDirIterator.Subdirectories)
        while qDirIterator.hasNext():
            qDirIterator.next()
            fileInfo = qDirIterator.fileInfo()
            fdir = fileInfo.absoluteDir().absolutePath()
            fpath = qDirIterator.filePath()
            fsize = fileInfo.size() / (1024 * 1024)
            time.sleep(0.05)
            if fsize >= 1:
                self.scanfileChanged.emit(fpath)
                self.tipMessageChanged.emit(fpath)
        self.tipMessageChanged.emit('')
        self.scanfileFinished.emit()
Example #27
0
    def scanFolder(self, path):
        self._tempSongs = {}

        filters = QDir.Files
        nameFilters = ["*.wav", "*.wma", "*.mp2", "*.mp3", "*.mp4", "*.m4a",
                       "*.flac", "*.ogg"]
        qDirIterator = QDirIterator(path, nameFilters, filters,
                                    QDirIterator.Subdirectories)
        while qDirIterator.hasNext():
            qDirIterator.next()
            fileInfo = qDirIterator.fileInfo()
            fdir = fileInfo.absoluteDir().absolutePath()
            fpath = qDirIterator.filePath()
            fsize = fileInfo.size() / (1024 * 1024)
            time.sleep(0.05)
            if fsize >= 1:
                self.scanfileChanged.emit(fpath)
                self.tipMessageChanged.emit(fpath)
        self.tipMessageChanged.emit('')
        self.scanfileFinished.emit()
Example #28
0
    def folderIterator(self):
        folderChosen = QFileDialog.getExistingDirectory(self, '打开音频文件夹', '.')
        if folderChosen != None:
            it = QDirIterator(folderChosen)
            it.next()
            while it.hasNext():
                if it.fileInfo().isDir() == False and it.filePath() != '.':
                    fInfo = it.fileInfo()
                    print(it.filePath(), fInfo.suffix())
                    if fInfo.suffix() in ('mp3', 'ogg', 'wav', 'm4a'):
                        print('added file', fInfo.fileName())
                        self.listWid.addItem(fInfo.fileName())
                        self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(it.filePath())))
                it.next()
            if it.fileInfo().isDir() == False and it.filePath() != '.':
                fInfo = it.fileInfo()
                print(it.filePath(), fInfo.suffix())
                if fInfo.suffix() in ('mp3', 'ogg', 'wav', 'm4a'):
                    print('added file', fInfo.fileName())
                    self.listWid.addItem(fInfo.fileName())
                    self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(it.filePath())))

            # 设置ListItem高度
            for x in range(self.listWid.count()):
                self.listWid.item(x).setSizeHint(QSize(100, 30))
Example #29
0
def folderIterator(self):
    folderChosen = QFileDialog.getOpenFileName(None, 'Open Music Folder', '~',
                                               'All Files(*.*)')
    if folderChosen != None:
        it = QDirIterator(folderChosen)
        it.next()
        while it.hasNext():
            if it.fileInfo().isDir() == False and it.filePath() != '.':
                fInfo = it.fileInfo()
                if fInfo.suffix() in ('mp3', 'mid', 'wav', 'flac'):
                    self.playlist.append(
                        QMediaContent(QUrl.fromLocalFile(it.filePath())))
            it.next()
        if it.fileInfo().isDir() == False and it.filePath() != '.':
            fInfo = it.fileInfo()
            if fInfo.suffix() in ('mp3', 'mid', 'wav', 'flac'):
                self.playlist.append(
                    QMediaContent(QUrl.fromLocalFile(it.filePath())))
Example #30
0
    def addSongToPlaylist(self, piosenka):

        if self.folder != None:
            #piosenka = input("Podaj nazwe: ")
            it = QDirIterator(self.folder)
            it.next()
            while it.hasNext():
                if it.fileInfo().isDir() == False and it.filePath() != '.':
                    fInfo = it.fileInfo()
                    if fInfo.suffix() in ('mp3', 'ogg', 'wav', 'm4a'):
                        if it.fileName() == piosenka:
                            self.playlist.addMedia(
                                QMediaContent(QUrl.fromLocalFile(
                                    it.filePath())))
                            self.listView.addItem(it.fileName())
                it.next()
            if it.fileInfo().isDir() == False and it.filePath() != '.':
                fInfo = it.fileInfo()
                if fInfo.suffix() in ('mp3', 'ogg', 'wav', 'm4a'):
                    if it.fileName() == piosenka:
                        self.playlist.addMedia(
                            QMediaContent(QUrl.fromLocalFile(it.filePath())))
                        self.listView.addItem(it.fileName())
Example #31
0
# Parsec Cloud (https://parsec.cloud) Copyright (c) AGPLv3 2016-2021 Scille SAS

try:
    from parsec.core.gui._resources_rc import *  # noqa
except ImportError as exc:
    raise ModuleNotFoundError(
        """PyQt resources bundle hasn't been generated.
You must install the parsec package or run `python setup.py generate_pyqt_resources_bundle`
"""
    ) from exc


if __name__ == "__main__":
    from PyQt5.QtCore import QDirIterator

    it = QDirIterator(":", QDirIterator.Subdirectories)
    while it.hasNext():
        print(it.next())
Example #32
0
 def on_execute_clicked(self):
     self.Log.clear()
     it = QDirIterator(self.currentDir, QDirIterator.NoIteratorFlags)
     while it.hasNext():
         self.Log.addItem(it.next())
     self.Path.setText(self.currentDir.absolutePath())
Example #33
0
 def add_files(self):
     folder_Chosen = QFileDialog\
         .getExistingDirectory(self,
                               'Open Music Folder',
                               expanduser('~'))
     if folder_Chosen is not None:
         it = QDirIterator(folder_Chosen)
         it.next()
         while it.hasNext():
             if it.fileInfo().isDir() == False\
                     and it.filePath() != '.':
                 fInfo = it.fileInfo()
                 print(it.filePath(), fInfo.suffix())
                 if fInfo.suffix() in ('mp3', 'ogg', 'wav'):
                     print('added file ', fInfo.fileName())
                     self.currentPlaylist. \
                         addMedia(QMediaContent(
                         QUrl.fromLocalFile(it.filePath())))
             it.next()
Example #34
0
class Window(QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        if getattr(sys, 'frozen', False):
            bundle_dir = os.path.abspath(sys.executable + "/../../../")
        else:
            bundle_dir = os.path.os.path.abspath(__file__)

        self.workingDir = os.path.dirname(bundle_dir)
        # print(self.workingDir)
        # print(os.path.abspath(bundle_dir + "/../../"))

        # Initialize user settings
        self.searchRecursivity = QDirIterator.Subdirectories
        self.countRecursivity = QDirIterator.NoIteratorFlags
        self.dirFilters = (QDir.Dirs | QDir.NoDotAndDotDot)
        # to swap size and count in file view
        self.dirView = True
        self.subfolderLevel = 0

        # Row 0
        directoryLabel = QLabel("In folder:")
        self.directoryComboBox = self.createComboBox(self.workingDir)
        browseButton = self.createButton("&Browse...", self.browse)

        # Row 1
        filterLabel = QLabel("Filter:")
        self.filterComboBox = self.createComboBox('*')
        self.typeComboBox = QComboBox()
        self.typeComboBox.addItem("All")
        self.typeComboBox.addItem("Folders")
        self.typeComboBox.addItem("Files")
        self.typeComboBox.setCurrentIndex(1)
        self.typeComboBox.currentIndexChanged.connect(self.changeType)
        self.checkBox = QCheckBox("Subfolders")
        self.checkBox.toggle()
        self.checkBox.stateChanged.connect(self.changeSearchRecursivity)
        self.findButton = self.createButton("&Find", self.find)

        # Row 2

        self.depthLabel = QLabel("Count files in subfolder level")
        self.folderDepthSpinBox = QSpinBox()
        self.folderDepthSpinBox.valueChanged.connect(self.changeFolderDepth)
        self.checkBox_2 = QCheckBox("Count all files")
        self.checkBox_2.stateChanged.connect(self.changeCountRecursivity)

        # Row 3 Table
        self.createFilesTable()

        # Row 5
        self.filesFoundLabel = QLabel()
        saveButton = self.createButton("&Save", self.saveSheet)

        # Not implemented, for full text search
        self.textComboBox = self.createComboBox()
        textLabel = QLabel("Containing text:")

        mainLayout = QGridLayout()

        mainLayout.addWidget(directoryLabel, 0, 0, 1, 1)
        mainLayout.addWidget(self.directoryComboBox, 0, 1, 1, 5)

        # Row 1
        mainLayout.addWidget(filterLabel, 1, 0, 1, 1)
        mainLayout.addWidget(self.filterComboBox, 1, 1, 1, 5)
        mainLayout.addWidget(self.typeComboBox, 1, 6, 1, 1)
        mainLayout.addWidget(self.findButton, 1, 7, 1, 1)

        # Row 0
        mainLayout.addWidget(self.checkBox, 0, 6, 1, 1)
        mainLayout.addWidget(browseButton, 0, 7, 1, 1)

        # Row 2
        mainLayout.addWidget(self.depthLabel, 2, 4, 1, 1, Qt.AlignRight)
        mainLayout.addWidget(self.folderDepthSpinBox, 2, 5, 1, 1)
        mainLayout.addWidget(self.checkBox_2, 2, 6, 1, 2)

        # Table
        mainLayout.addWidget(self.filesTable, 4, 0, 1, 8)

        # Row 5
        mainLayout.addWidget(self.filesFoundLabel, 5, 0, 1, 4)

        mainLayout.addWidget(saveButton, 5, 7, 1, 1)

        self.setLayout(mainLayout)

        self.setWindowTitle("bdrc-audit 0.1")
        self.resize(520, 440)
        # self.resize(442, 440)

    def changeCountRecursivity(self, state):
        if state == Qt.Checked:
            self.countRecursivity = QDirIterator.Subdirectories
        else:
            self.countRecursivity = QDirIterator.NoIteratorFlags

    def changeFolderDepth(self, value):
        self.subfolderLevel = value

    def changeType(self, typeIndex):
        if typeIndex == 0:
            self.dirFilters = (QDir.AllEntries | QDir.NoSymLinks
                               | QDir.NoDotAndDotDot)
            self.dirView = False
            self.filesTable.setHorizontalHeaderLabels(("Item Path", "Size"))
            self.subfolderLevel = 0
            self.depthLabel.hide()
            self.folderDepthSpinBox.hide()

        elif typeIndex == 1:
            self.dirFilters = (QDir.Dirs | QDir.NoDotAndDotDot)
            self.dirView = True
            self.filesTable.setHorizontalHeaderLabels(
                ("Folder Path", "File Count"))
            self.depthLabel.show()
            self.folderDepthSpinBox.show()

        elif typeIndex == 2:
            self.dirFilters = (QDir.Files | QDir.NoSymLinks)
            self.dirView = False
            self.filesTable.setHorizontalHeaderLabels(("File Path", "Size"))
            self.subfolderLevel = 0
            self.depthLabel.hide()
            self.folderDepthSpinBox.hide()

    def changeSearchRecursivity(self, state):
        if state == Qt.Checked:
            self.searchRecursivity = QDirIterator.Subdirectories
        else:
            self.searchRecursivity = QDirIterator.NoIteratorFlags

    def browse(self):
        directory = QFileDialog.getExistingDirectory(self, "Find files",
                                                     self.workingDir)

        if directory:
            if self.directoryComboBox.findText(directory) == -1:
                self.directoryComboBox.addItem(directory)

            self.directoryComboBox.setCurrentIndex(
                self.directoryComboBox.findText(directory))

    @staticmethod
    def updateComboBox(comboBox):
        if comboBox.findText(comboBox.currentText()) == -1:
            comboBox.addItem(comboBox.currentText())

    def find(self):
        self.filesTable.setRowCount(0)
        self.path = self.directoryComboBox.currentText()
        fileName = self.filterComboBox.currentText()
        files = []

        if not fileName:
            fileName = "*"
        fileName = fileName.split(", ")

        # not used, kept for full text search
        text = self.textComboBox.currentText()

        self.updateComboBox(self.directoryComboBox)
        self.updateComboBox(self.filterComboBox)
        self.updateComboBox(self.textComboBox)

        self.currentDir = QDir(self.path)

        self.it = QDirIterator(self.path, fileName, self.dirFilters,
                               self.searchRecursivity)
        while self.it.hasNext():
            files.append(self.it.next())

        # For full text search, not used
        if text:
            files = self.findFiles(files, text)

        self.showFiles(files)

    # For full text search, not used
    def findFiles(self, files, text):
        progressDialog = QProgressDialog(self)

        progressDialog.setCancelButtonText("&Cancel")
        progressDialog.setRange(0, files.count())
        progressDialog.setWindowTitle("Find Files")

        foundFiles = []

        for i in range(files.count()):
            progressDialog.setValue(i)
            progressDialog.setLabelText("Searching file number %d of %d..." %
                                        (i, files.count()))
            QApplication.processEvents()

            if progressDialog.wasCanceled():
                break

            inFile = QFile(self.currentDir.absoluteFilePath(files[i]))

            if inFile.open(QIODevice.ReadOnly):
                stream = QTextStream(inFile)
                while not stream.atEnd():
                    if progressDialog.wasCanceled():
                        break
                    line = stream.readLine()
                    if text in line:
                        foundFiles.append(files[i])
                        break

        progressDialog.close()

        return foundFiles

    def showFiles(self, files):
        for fn in files:
            # file = QFile(self.currentDir.relativeFilePath(fn))
            # May change in countfile()
            self.pathToDisplay = fn
            # print(QFileInfo(file).baseName)

            if os.path.isdir(fn):
                size = count.countFiles(self, fn)
                if self.dirView:
                    sizeItem = QTableWidgetItem("%d" % size)
                else:
                    sizeItem = QTableWidgetItem("%d files" % size)
            else:
                size = QFileInfo(fn).size()
                sizeItem = QTableWidgetItem("%d KB" % (int(
                    (size + 1023) / 1024)))

            head = '.'
            if self.path.endswith('/'):
                head = './'

            fileNameItem = QTableWidgetItem(
                self.pathToDisplay.replace(self.path, head))
            fileNameItem.setFlags(fileNameItem.flags() ^ Qt.ItemIsEditable)

            sizeItem.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight)
            sizeItem.setFlags(sizeItem.flags() ^ Qt.ItemIsEditable)

            row = self.filesTable.rowCount()
            self.filesTable.insertRow(row)
            self.filesTable.setItem(row, 0, fileNameItem)
            self.filesTable.setItem(row, 1, sizeItem)

            # if self.pathToDisplay == fn and size == 0:
            #     self.filesTable.item(row, 0).setBackground(QColor(211,211,211))

        self.filesFoundLabel.setText("%d matches. Double click to open." %
                                     len(files))

    def createButton(self, text, member):
        button = QPushButton(text)
        button.clicked.connect(member)
        return button

    def createComboBox(self, text=""):
        comboBox = QComboBox()
        comboBox.setEditable(True)
        comboBox.addItem(text)
        comboBox.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        return comboBox

    def createFilesTable(self):
        self.filesTable = QTableWidget(0, 2)
        self.filesTable.setSelectionBehavior(QAbstractItemView.SelectRows)

        self.filesTable.setHorizontalHeaderLabels(
            ("Folder Path", "File Count"))
        self.filesTable.horizontalHeader().setSectionResizeMode(
            0, QHeaderView.Stretch)
        self.filesTable.verticalHeader().hide()
        self.filesTable.setShowGrid(False)

        self.filesTable.setSortingEnabled(True)
        self.filesTable.sortByColumn(0, Qt.AscendingOrder)

        self.filesTable.cellActivated.connect(self.openFileOfItem)

    def saveSheet(self):
        import os
        import csv
        path = QFileDialog.getSaveFileName(self, 'Save CSV', self.workingDir,
                                           'CSV(*.csv)')
        if path[0] != '':
            with open(path[0], 'w') as csv_file:
                writer = csv.writer(csv_file, dialect='excel')
                for row in range(self.filesTable.rowCount()):
                    row_data = []
                    for column in range(self.filesTable.columnCount()):
                        item = self.filesTable.item(row, column)
                        if item is not None:
                            row_data.append(item.text())
                        else:
                            row_data.append('')
                    row_data[0] = self.path + row_data[0][1:]
                    writer.writerow(row_data)
            QMessageBox.information(
                self, "Export Successful",
                "Your search result has been exported as a csv.")

    def openFileOfItem(self, row, column):
        item = self.filesTable.item(row, 0)

        # Complete links to make them click
        tail = item.text()[1:]
        if self.path.endswith('/'):
            tail = item.text()[2:]
        path = self.path + tail
        print(path)
        QDesktopServices.openUrl(
            QUrl.fromLocalFile(self.currentDir.absoluteFilePath(path)))
Example #35
0
 def folderIterator(self):
     folderChosen = QFileDialog.getExistingDirectory(
         self, 'Open Music Folder', '~')
     if folderChosen != None:
         it = QDirIterator(folderChosen)
         it.next()
         while it.hasNext():
             if it.fileInfo().isDir() == False and it.filePath() != '.':
                 fInfo = it.fileInfo()
                 if fInfo.suffix() in ('mp3', 'ogg', 'wav', 'm4a'):
                     self.playlist.addMedia(
                         QMediaContent(QUrl.fromLocalFile(it.filePath())))
             it.next()
         if it.fileInfo().isDir() == False and it.filePath() != '.':
             fInfo = it.fileInfo()
             if fInfo.suffix() in ('mp3', 'ogg', 'wav', 'm4a'):
                 self.playlist.addMedia(
                     QMediaContent(QUrl.fromLocalFile(it.filePath())))
    def getDir(self):
        """list all files and subdirectories for a given dir with regex."""
        msg = self.asyncRead()
        if msg:
            path = msg["path"]

            dirselect = False
            if "dirSelect" in msg:
                dirselect = msg["dirSelect"]

            if path == "":
                path = "/home"
            path = os.path.normpath(path)

            filters = ["*"]
            if "filter" in msg:
                filters = msg["filter"]
            dirIter = QDirIterator(path)
            data = list()
            while dirIter.hasNext():
                dirIter.next()
                if dirIter.fileName() in [".", ".."]:
                    continue

                if not dirIter.fileInfo().isDir():
                    if dirselect:
                        continue
                    match = False
                    for fi in filters:
                        reg = QRegExp(fi)
                        reg.setPatternSyntax(QRegExp.Wildcard)
                        if reg.exactMatch(dirIter.fileName()):
                            match = True
                            break
                    if not match:
                        continue

                elem = dict()
                elem["name"] = dirIter.fileName()
                elem["path"] = dirIter.filePath()

                inf = dirIter.fileInfo()  # type: QFileInfo
                elem["isDir"] = inf.isDir()

                last = inf.lastModified()  # type: QDateTime
                elem["lastChange"] = last.toString("yyyy.MM.dd - HH:MM")

                if inf.isDir():
                    elem["fileSize"] = ""
                else:
                    elem["fileSize"] = self._sizeHumanReadableStr(inf.size())

                data.append(elem)

            data = sorted(data,
                          key=lambda di: (not di["isDir"], di["name"].lower()))

            msg["data"] = data
            logging.debug("There is/are %i element/s in %s", len(data), path)
            self.send(msg)