From 09867d366ae6502e571c8cb2c4eebda57cf7e315 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 30 Dec 2024 15:01:55 -0500 Subject: [PATCH] =?UTF-8?q?Implementa=20gesti=C3=B3n=20de=20=C3=ADndices?= =?UTF-8?q?=20existentes=20en=20la=20clase=20Application=20y=20agrega=20m?= =?UTF-8?q?=C3=A9todo=20para=20confirmar=20eliminaci=C3=B3n.=20Utiliza=20s?= =?UTF-8?q?end2trash=20para=20eliminar=20=C3=ADndices=20de=20forma=20segur?= =?UTF-8?q?a.=20Actualiza=20requirements.txt=20para=20incluir=20la=20nueva?= =?UTF-8?q?=20dependencia.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gui.py | 46 +++++++++++++++++++++++++++++++++++----------- requirements.txt | 1 + 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/gui.py b/gui.py index bac51c3..c56a9a0 100644 --- a/gui.py +++ b/gui.py @@ -16,6 +16,7 @@ import logging import asyncio import csv +import send2trash class Application(ttk.Frame): @@ -507,15 +508,11 @@ def obtener_rutas(self): # Crear una instancia del analizador de carpetas analyzer = FolderAnalyzer({}, None) - # Buscar y gestionar índices existentes - indices = analyzer.buscar_indices_electronicos(folder_selected) - if indices: - indices_eliminados = self.confirmar_eliminar_indices(indices) - if not indices_eliminados: - self._restablecer_variables_clase() - self.update_progressbar_status("") - return # Detiene ejecución si se encontraron índices y no se eliminaron - + # Llamar al nuevo método para gestionar índices existentes + continuar = self.gestionar_indices_existentes(folder_selected, analyzer) + if not continuar: + return # Detiene ejecución si se encontraron índices y no se eliminaron + self.expediente = folder_selected estructura_directorios = analyzer.construir_estructura(folder_selected) if not estructura_directorios: @@ -550,6 +547,7 @@ def obtener_rutas(self): self.update_progressbar_status("Listo para procesar") elif self.selected_value == "3" and profundidad_maxima == 5: self.profundidad = 5 + lista_cui, lista_subcarpetas, self.carpetas_omitidas = ( analyzer.obtener_lista_rutas_subcarpetas( estructura_directorios, 5, None @@ -582,6 +580,27 @@ def obtener_rutas(self): f"La estructura de los siguientes directorios no coincide con la OPCIÓN seleccionada: {rutas_invalidas}" ) + def gestionar_indices_existentes(self, folder_selected, analyzer): + """ + Busca y gestiona índices existentes. + + Args: + folder_selected (str): Ruta de la carpeta seleccionada. + analyzer (FolderAnalyzer): Instancia del analizador de carpetas. + + Returns: + bool: True si se deben continuar las operaciones, False si se deben detener. + """ + # Buscar y gestionar índices existentes + indices = analyzer.buscar_indices_electronicos(folder_selected) + if indices: + indices_eliminados = self.confirmar_eliminar_indices(indices) + if not indices_eliminados: + self._restablecer_variables_clase() + self.update_progressbar_status("") + return False # Detiene ejecución si se encontraron índices y no se eliminaron + return True # Continúa ejecución si no se encontraron índices o si se eliminaron + def confirmar_eliminar_indices(self, indices): """ Confirma con el usuario si desea eliminar los índices encontrados. @@ -590,11 +609,16 @@ def confirmar_eliminar_indices(self, indices): cantidad = len(indices) mensaje = f"Se encontraron {cantidad} índice{'s' if cantidad > 1 else ''} electrónico{'s' if cantidad > 1 else ''} que impide el procesamiento" if tk.messagebox.askyesno("Índices Encontrados", f"{mensaje}. ¿Desea eliminarlos?"): + self.text_widget.insert(tk.END, f"\n*******************\n✅ Índices eliminados:\n") for indice in indices: try: - os.remove(indice) + componentes = indice.split(os.sep)[-4:] + ruta_relativa = os.path.join(*componentes) + send2trash.send2trash(indice) + self.text_widget.insert(tk.END, f" 🔹 {ruta_relativa}\n") except Exception as e: self.logger.error(f"Error eliminando índice {indice}: {str(e)}") + self.text_widget.see(tk.END) return True else: self.text_widget.insert(tk.END, f"\n*******************\n❕ {mensaje}:\n") @@ -827,10 +851,10 @@ def handle_directory_analysis( ): # Habilitar el envío de un mensaje con las carpetas que no cumplen con la estructura + self.update_progressbar_status("") self._restablecer_variables_clase() - return self._mostrar_carpeta_seleccionada(folder_selected) diff --git a/requirements.txt b/requirements.txt index bfe6dba..502ba60 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,3 +18,4 @@ idna==3.10 requests==2.32.3 urllib3==2.2.3 pillow==11.0.0 +send2trash==1.8.3 \ No newline at end of file