3.3.0: lo que entra nuevo ya entra ordenado

Las cuatro funciones que eligió Munka tras la 3.2.0:

- Nueva pieza: crea «NN- Título» en su mes con el número que toca y sus subcarpetas; si la
  pieza ya existe, lo dice. Se deshace mientras siga vacía.
- Bandeja de entrada: lo que se deje en _Entrada se reparte por mes, día de rodaje y cámara.
  «Traer material» copia una tarjeta comprobando cada archivo (se vuelve a leer y se compara
  la huella), conserva la fecha del rodaje y no toca el origen.
- Versiones del mismo clip: dos clips de cámara que se llaman igual, duran lo mismo y tienen
  la misma forma son el mismo clip; se queda el de más imagen y el otro va a Duplicados.
- Orden automático, apagado de fábrica: una tarea del Programador de tareas de Windows lanza
  «automatico», que lee todas las carpetas y hace solo lo seguro. No toca una carpeta que no
  se pueda leer entera ni una cuyo plan mueva más de 3.000 archivos, y si el programa ya está
  abierto se lo pide a él. Desinstalar quita la tarea.

De paso: una ruta que empieza por guion bajo ya no pierde el guion al ir a la papelera.

Pruebas: prueba_orden.py 24, probar.py 19, prueba_funcional.py 29, prueba_ventana.py 18
desde el código y 17 con el paquete.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Este commit está contenido en:
Labstream
2026-10-04 17:05:57 -05:00
padre c419d5d943
commit 477857db45
Se han modificado 11 ficheros con 1344 adiciones y 54 borrados

Ver fichero

@@ -25,6 +25,7 @@ import ctypes
import shutil
import winreg
import sqlite3
import subprocess
from ctypes import wintypes as W
import ventana as V
@@ -35,8 +36,10 @@ DESCRIPCION = "OrganiLAB · ordena y aligera el material de video"
# «equipo» es esa carpeta (sus programas, su menú Inicio y su Escritorio) y la línea de Aplicaciones va a
# una clave aparte del registro. Lo usa prueba_ventana.py.
ENSAYO = os.environ.get("ORGANILAB_ENSAYO", "")
CLAVE = r"Software\OrganiLAB-ensayo\Alta" if ENSAYO else r"Software\Microsoft\Windows\CurrentVersion\Uninstall\OrganiLAB"
CLAVE_DE_VERDAD = r"Software\Microsoft\Windows\CurrentVersion\Uninstall\OrganiLAB"
CLAVE = r"Software\OrganiLAB-ensayo\Alta" if ENSAYO else CLAVE_DE_VERDAD
MARCA_MUDANZA = "instalado-en.txt" # en la carpeta de origen: adónde se instaló lo que había aquí
TAREA_AUTOMATICO = "OrganiLAB - orden automatico" # la tarea de Windows del orden automático (organizador.TAREA_WINDOWS)
INVENTARIO = "inventario.sqlite"
NO_VIAJA = {"actualizacion", "__pycache__", MARCA_MUDANZA} # del primer nivel: lo que es de paso
NO_VIAJA_DATOS = {"sesion.json", "ventana"} # de datos\: la sesión abierta y el perfil del motor, que se rehace solo
@@ -347,6 +350,15 @@ def desinstalar(base=None):
winreg.DeleteKey(winreg.HKEY_CURRENT_USER, CLAVE)
except OSError:
pass
# si estaba encendido el orden automático, su tarea de Windows se va con el programa: si no,
# seguiría intentando abrir cada noche algo que ya no está. Solo cuando se desinstala de verdad:
# las pruebas trabajan contra una clave de ensayo y no deben tocar la tarea de nadie.
if not ENSAYO and CLAVE == CLAVE_DE_VERDAD:
try:
subprocess.run(["schtasks", "/Delete", "/F", "/TN", TAREA_AUTOMATICO], capture_output=True, timeout=30,
creationflags=getattr(subprocess, "CREATE_NO_WINDOW", 0))
except (OSError, subprocess.SubprocessError):
pass
return {"accesos": quitados}