- instalar.py: instalar un paquete lo copia a la carpeta de programas del
usuario (%LOCALAPPDATA%\Programs\OrganiLAB) con sus datos y su ffmpeg, lo da
de alta desde ahí y lo vuelve a abrir desde su sitio. Del origen no se borra
nada: queda instalado-en.txt, que además hace que abrir esa copia abra la
instalada. Un destino ocupado no se pisa, y si ya hay un OrganiLAB instalado
lo dice en vez de poner otro encima.
- static/index.html: vista «Manual», con cada función del programa, qué hace
y cómo lo hace (41 entradas, un apartado por pestaña).
- organizador.py: ServidorLocal pide el puerto en exclusiva. Con «reutilizar
dirección», en Windows dos copias escuchaban a la vez en el mismo puerto y
se contestaban la una por la otra sin que nada fallara a la vista.
- Pruebas: probar.py 19, prueba_funcional.py 26 de 26, prueba_ventana.py 18
desde el código y 17 con el paquete, incluida la instalación entera en un
equipo de ensayo (ORGANILAB_ENSAYO) que no toca el Windows de verdad.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- ventana.py: la ventana es un marco Win32 propio con WebView2 dentro,
manejado por COM con ctypes. Fuera pywebview, pythonnet y clr_loader y
sus binarios sin firmar. Identidad en la barra de tareas, una sola copia
abierta por carpeta de datos, selector de carpetas de Windows, rutas
completas al soltar, avance en la barra de tareas, memoria de posición,
aviso al cerrar con trabajo en marcha, y nada de navegador (menú, F5,
zoom, permisos). Si el motor se cae, se monta de nuevo solo.
- arranque.py y empaquetar.py: el paquete ya no lleva binario propio.
OrganizadorLabstream.exe es pythonw.exe (firmado por la PSF) con otro
nombre y arranca el programa desde sitecustomize; abre con Smart App
Control encendido. Fuera PyInstaller. Al empaquetar se comprueba la firma
de cada binario con Windows y se arranca el motor del paquete.
- instalar.py: accesos directos en Inicio y Escritorio con la identidad de
la ventana, y la línea en Configuración › Aplicaciones. Se ofrece una vez,
la primera que se abre un paquete en un equipo.
- Dos copias sobre los mismos datos ya no se pisan: la segunda trae la
ventana al frente (antes abría el navegador y daba por huérfanas las
conversiones en marcha de la primera). Si el puerto 8765 está ocupado
por otro programa, se toma uno libre.
- Por consola, el paquete ya no consulta si hay versión nueva con las
actualizaciones automáticas apagadas.
- Pruebas: probar.py 17, prueba_funcional.py 26 de 26 y prueba_ventana.py
(nueva), que abre la ventana de verdad: 17 comprobaciones desde el código
y 8 arrancando el paquete por su .exe.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>