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

@@ -169,7 +169,15 @@ class Windows(unittest.TestCase):
# quitarlo desde otra copia del programa no toca lo de esta; desde esta, sí
self.assertEqual(instalar.desinstalar(tmp)["accesos"], [])
self.assertTrue(instalar.instalado_aqui(base))
self.assertEqual(instalar.desinstalar(base)["accesos"], [inicio])
# desinstalar de verdad quita también la tarea del orden automático; contra la clave de ensayo
# no debe ni intentarlo: aquí se comprueba que no llama al Programador de tareas
llamadas, correr = [], instalar.subprocess.run
instalar.subprocess.run = lambda *a, **k: llamadas.append(a)
try:
self.assertEqual(instalar.desinstalar(base)["accesos"], [inicio])
finally:
instalar.subprocess.run = correr
self.assertEqual(llamadas, [])
self.assertIsNone(instalar.instalado())
finally:
for clave in (instalar.CLAVE, r"Software\OrganiLAB-ensayo"):