3.2.0: el orden mira la forma de las carpetas, no solo su nombre

Medido sobre una carpeta de cliente real (8.207 archivos, 920 GB) antes de tocar nada:

- «Por nombrar» solo pregunta por lo que el plan llega a ver y no sabe resolver; ya no por las
  carpetas de la app ni por lo de dentro de la papelera. Lo aprendido vale por el nombre entero.
- Una carpeta es una grabación por lo que tiene dentro: una pieza montada no se desarma, y lo
  que no es rodaje no acaba en 00_Grabacion\OTROS. Se conserva el nombre de cada sesión.
- Una carpeta que guarda meses o años dentro se abre y cada cosa va a su mes; si la pieza ya
  existe allí, se junta con ella.
- Repaso de lo ya ordenado: lo que está en un mes que no es el de su rodaje vuelve al suyo.
- El año de un clip de Blackmagic sale de los demás clips de su tarjeta y día; un rodaje que
  pasa de medianoche cuenta como uno.
- Un clip convertido sigue siendo de su cámara, y el convertidor no repite lo que ya convirtió.
- «Exportados» junto a «_Exportados» y «_Papelera» junto a «_Para borrar» se juntan.
- «Hacer de una vez» solo mueve lo marcado; lo dudoso que queda no cuenta como pendiente.
- El inventario lleva la versión de las reglas: uno anterior pide escanear otra vez.

Pruebas: prueba_orden.py (nueva, 19 casos), probar.py 19, prueba_funcional.py 26,
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 16:33:45 -05:00
padre 45ece8f2e7
commit c419d5d943
Se han modificado 8 ficheros con 1334 adiciones y 184 borrados

Ver fichero

@@ -182,7 +182,10 @@ def filas_elegidas(plan_filas, dec):
if dec.get("limpieza", "papelera") == "papelera":
out.append(f)
elif c in ("GRABACION", "CELULAR", "FOTOS"):
if dec.get("material", "ordenar") == "ordenar":
# solo lo marcado: antes entraba todo el material aunque el plan lo diera por dudoso (el mes
# sacado de la fecha de modificación de un archivo que no es de cámara), y «hacer lo seguro»
# movía justo lo que el plan decía que había que mirar
if dec.get("material", "ordenar") == "ordenar" and f["marcado"]:
out.append(f)
else:
m = dec.get("carpetas", "seguras")
@@ -222,7 +225,10 @@ def ejecutar(raiz, dec, plan_filas=None, en_hilo=False):
st = O.stock_a_papelera(raiz, rutas)
res["lotes"].append(st.get("lote"))
res["stock"] = st.get("movimientos", 0)
plan_filas = [f for f in plan_filas if f["cubeta"] != "STOCK"]
# las filas de stock cuyo material acaba de irse entero ya no tienen qué mover; las demás
# siguen valiendo (antes se quitaban todas, y una carpeta «Recursos» que no era de Envato
# se quedaba sin ordenar hasta la siguiente pasada)
plan_filas = [f for f in plan_filas if f["cubeta"] != "STOCK" or os.path.exists(f["origen"])]
elegidas = filas_elegidas(plan_filas, dec)
if elegidas:
_prog("ordenar", 0, len(elegidas), "moviendo carpetas y archivos")