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)
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()
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)
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))
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 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
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 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()
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
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
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)
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()
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()
def folder_iterator(self): folder_chosen = QFileDialog.getExistingDirectory(self, '打开文件夹', '~') if folder_chosen is not None: it = QDirIterator(folder_chosen) it.next() while it.hasNext(): if (not it.fileInfo().isDir()) and it.filePath() != '.': f_info = it.fileInfo() if f_info.suffix() in ('mp3', 'ogg', 'wav', 'm4a'): self.playlist.addMedia( QMediaContent(QUrl.fromLocalFile(it.filePath()))) it.next() if (not it.fileInfo().isDir()) and it.filePath() != '.': f_info = it.fileInfo() if f_info.suffix() in ('mp3', 'ogg', 'wav', 'm4a'): self.playlist.addMedia( QMediaContent(QUrl.fromLocalFile(it.filePath())))
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()
def import_emojis(): import emoji emojis = [] iterator = QDirIterator(":/emoji/", QDirIterator.Subdirectories) while iterator.hasNext(): emoji = iterator.next() emojis.append(emoji[8:13]) return emojis
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())))
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()
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()
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()
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)
def addSongToPlaylist(self, piosenka): if self.folder != None: 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())
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()
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)
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)
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
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_())
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)
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)
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)))
# 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())
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())
def read_render_settings(self) -> None: """Read render settings and update gui elements on Render tab""" # Get the list of all markdown files in the project directory dir_iter = QDirIterator(self.ProjectManager.root_path, QDir.Files, QDirIterator.Subdirectories) filepaths = [] while dir_iter.hasNext(): filepath = dir_iter.next() if filepath.endswith(".md"): # Get relative path: filepath = filepath[len(self.ProjectManager.root_path) + 1:] filepaths.append(filepath) # Get the list of files which should be rendered according to the current project settings files_to_render = self.ProjectManager.get_setting_value( "Files to render") # Populate widgets with filepaths for filepath in filepaths: if filepath not in files_to_render: item = QListWidgetItem(filepath) self.ui.AllFilesListWidget.addItem(item) for filepath in files_to_render: if filepath not in filepaths: item = QListWidgetItem(filepath + " (File not found!)") item.setForeground(Qt.red) else: item = QListWidgetItem(filepath) self.ui.FilesToRenderListWidget.addItem(item) # Populate CssStyleCombobox self.ui.CssStyleCombobox.addItem("None") styles = self.SettingsManager.get_setting_value("Render/Css_styles") for identifier, style_info in styles.items(): self.ui.CssStyleCombobox.addItem(style_info["name"], userData=identifier) current_style_identifier = self.ProjectManager.get_setting_value( "Css_style") index = self.ui.CssStyleCombobox.findData(current_style_identifier) if index == -1: index = 0 self.ui.CssStyleCombobox.setCurrentIndex(index) # Populate CslStyleCombobox self.ui.CslStyleCombobox.addItem("Default") styles = self.SettingsManager.get_setting_value("Render/Csl_styles") for identifier, style_info in styles.items(): self.ui.CslStyleCombobox.addItem(style_info["name"], userData=identifier) current_csl_identifier = self.ProjectManager.get_setting_value( "Csl_style") index = self.ui.CslStyleCombobox.findData(current_csl_identifier) if index == -1: index = 0 self.ui.CslStyleCombobox.setCurrentIndex(index) # Populate formats combobox formats = self.SettingsManager.get_setting_value("Render/Formats") for identifier, format_info in formats.items(): self.ui.OutputFormatCombobox.addItem(format_info["name"], userData=identifier) current_output_format_identifier = self.ProjectManager.get_setting_value( "Render to") index = self.ui.OutputFormatCombobox.findData( current_output_format_identifier) self.ui.OutputFormatCombobox.setCurrentIndex(index) # Populate PandocCommandLineEdit self.ui.PandocCommandTextBrowser.setText( self.ProjectManager.get_setting_value("Pandoc_command_full")) self.ui.ManualPandocArgsLineEdit.setText( self.ProjectManager.get_setting_value("Pandoc_command_manual"))