import os from PyQt6.QtGui import QPixmap from _file_stuff import is_file from BitMover_ui import MainWindow from _media_file import MediaFile basedir = os.path.dirname(__file__) class FindFiles(MainWindow): def __init__(self): super(FindFiles,self).__init__() self.search_types = None self.event = self.get_event() self.src_dir = self.config['folders']['source']['base'] self.dst_dir = self.config['folders']['destination']['base'] self.file_types = self.config['file_types'] self.file_total = 0 self.file_list = {} def get_search_types(self): self.search_types = [] if self.checkBox_search_for_images.isChecked(): self.search_types.append('image') if self.checkBox_search_for_video.isChecked(): self.search_types.append('video') if self.checkBox_search_for_audio.isChecked(): self.search_types.append('audio') return self.search_types def get_t_files(self): self.file_list.clear() self.img_preview.setPixmap(QPixmap(os.path.join(basedir, 'assets', 'preview_placeholder.jpg'))) for folder, subfolders, filename in os.walk(self.src_dir): for f_type in self.search_types: for ext in self.file_types[f_type]: for file in filename: if file.lower().endswith(ext): current_file = os.path.join(folder, file) if is_file(current_file): self.file_total += int(1) else: print(f"Skipping {current_file} as it does not look like a real file.") def t_find_files(self, progress_callback, found_file, total_file_count): file_count = int(0) self.search_types = self.get_search_types() self.get_t_files() if len(self.search_types) > 0: for folder, subfolders, filename in os.walk(self.src_dir): for f_type in self.search_types: for ext in self.file_types[f_type]: for file in filename: if file.lower().endswith(ext): current_file = os.path.join(folder, file) if is_file(current_file): file_count += int(1) self.process_file(current_file) found_file.emit(current_file) else: print(f"Skipping {current_file} as it does not look like a real file.") total_file_count.emit(file_count) progress_callback.emit(round((file_count / self.file_total) * 100, 0)) else: print("Nothing to search for.") return self.file_list def process_file(self, p): """ gather information and add to dictionary """ media_file = MediaFile(p) i = media_file.source_path_hash self.file_list[i] = media_file.media_meta()