84 lines
3.4 KiB
Python
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() |