BitMover/_find_files.py

84 lines
3.4 KiB
Python

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()