diff --git a/modules/scanner.py b/modules/scanner.py index 7e86203..a33a55f 100644 --- a/modules/scanner.py +++ b/modules/scanner.py @@ -1,7 +1,7 @@ # scanner.py # Funções para ler diretórios e listar ficheiros from pathlib import Path - +from tqdm import tqdm from modules.utils import gerar_assinatura_SHA256_ficheiro @@ -21,19 +21,28 @@ def listar_ficheiros( if not caminho_origem.is_dir(): raise NotADirectoryError( f"Erro: o caminho '{origem}' não é um directório.") - # criar lista de ficheiros - ficheiros = [item for item in caminho_origem.rglob("*") if item.is_file()] - # filtro de ocultos - if not incluir_ocultos: - ficheiros = [f for f in ficheiros if not f.name.startswith(".")] - # filtro de extensoes + # se for passado filtro de extensoes, processar lista de extensoes para + # que cada extensão tenha o formato '.xxx' if extensoes: extensoes = [ ext.lower() if ext.startswith(".") else f".{ext.lower()}" for ext in extensoes ] - ficheiros = [f for f in ficheiros if f.suffix.lower() in extensoes] - return [str(f) for f in ficheiros] + # criar lista de ficheiros + ficheiros = [] + for item in tqdm( + caminho_origem.rglob("*"), desc="A listar ficheiros", unit="ficheiro" + ): + if item.is_file(): + # filtro de ficheiros ocultos + if not incluir_ocultos and item.name.startswith("."): + continue + # filtro de extensoes + if extensoes and item.suffix.lower() not in extensoes: + continue + ficheiros.append(str(item)) + + return ficheiros def listar_ficheiros_unicos( @@ -51,22 +60,29 @@ def listar_ficheiros_unicos( if not caminho_origem.is_dir(): raise NotADirectoryError( f"Erro: o caminho '{origem}' não é um directório.") - # criar lista de ficheiros - ficheiros = [item for item in caminho_origem.rglob("*") if item.is_file()] - # filtro de ocultos - if not incluir_ocultos: - ficheiros = [f for f in ficheiros if not f.name.startswith(".")] - # filtro de extensoes + # se for passado filtro de extensoes, processar lista de extensoes para + # que cada extensão tenha o formato '.xxx' if extensoes: extensoes = [ ext.lower() if ext.startswith(".") else f".{ext.lower()}" for ext in extensoes ] - ficheiros = [f for f in ficheiros if f.suffix.lower() in extensoes] - # criar dicionario com assinaturas de ficheiros listados - assinatura_para_caminhos = {} - for ficheiro in ficheiros: - assinatura = gerar_assinatura_SHA256_ficheiro(str(ficheiro)) - assinatura_para_caminhos.setdefault( - assinatura, []).append(str(ficheiro)) - return assinatura_para_caminhos + + # dicionario de ficheiros com assinatura + ficheiros_por_assinatura: dict[str, list[str]] = {} + + for item in tqdm( + caminho_origem.rglob("*"), desc="A listar ficheiros únicos", unit="ficheiro" + ): + if item.is_file(): + # filtro ficheiros ocultos + if not incluir_ocultos and item.name.startswith("."): + continue + # filtro extenseos + if extensoes and item.suffix.lower() not in extensoes: + continue + assinatura = gerar_assinatura_SHA256_ficheiro(str(item)) + ficheiros_por_assinatura.setdefault( + assinatura, []).append(str(item)) + + return ficheiros_por_assinatura