2.6.2: arranque en blanco

- Una instalación nueva no trae carpetas de fábrica: CONFIG_DEFECTO
  arrancaba con David Reyes, Danney y Camilo apuntando a Z:, W: y N:.
  raices viene vacía; el diccionario de clientes y discos sigue de serie
  porque es conocimiento, no estado.
- Al abrir no se entra sola en ninguna carpeta: la primera opción del
  desplegable está vacía y la portada enseña «Tus carpetas» con su último
  escaneo, para entrar con un clic.
- Un config.json ilegible se aparta en config.json.roto-<fecha> en vez de
  sustituirse por los valores de fábrica en silencio.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Este commit está contenido en:
Labstream
2026-09-25 08:10:36 -05:00
padre bcaa80df12
commit 2daffc175a
Se han modificado 5 ficheros con 86 adiciones y 20 borrados

Ver fichero

@@ -37,7 +37,7 @@ import actualizador
asistente.O = sys.modules[__name__]
actualizador.O = sys.modules[__name__]
VERSION = "2.6.1"
VERSION = "2.6.2"
CONGELADO = getattr(sys, "frozen", False)
SIN_VENTANA = getattr(subprocess, "CREATE_NO_WINDOW", 0) # ffmpeg/ffprobe/net sin abrir consolas negras # empaquetado como .exe con PyInstaller
@@ -58,11 +58,10 @@ LOCK = threading.RLock()
# ==========================================================================
CONFIG_DEFECTO = {
"raices": [
{"ruta": r"Z:\Dermatologas\David Reyes", "cliente": "David Reyes", "tipo": "contenido"},
{"ruta": r"W:\Danney", "cliente": "Danney Gómez", "tipo": "contenido"},
{"ruta": "N:\\", "cliente": "Camilo Ortega", "tipo": "pauta"},
],
# ninguna carpeta puesta de fábrica: la primera vez el programa abre en blanco y las carpetas
# entran cuando alguien las suelta. Lo que sí viene de serie es el diccionario de clientes y
# discos del estudio, que es conocimiento, no estado.
"raices": [],
"clientes": {
"David Reyes": {"tipo": "contenido", "alias": ["DR. DAVID REYES", "David Reyes", "Davids", "Dr David Reyes"]},
"Danney Gómez": {"tipo": "contenido", "alias": ["Danney", "DRA. DANNEY GOMEZ", "Dra_Danney", "Dra Danney", "Skincenter"]},
@@ -203,7 +202,18 @@ def cargar_json(ruta, defecto):
try:
with open(ruta, "r", encoding="utf-8") as f:
return json.load(f)
except (OSError, ValueError):
except OSError:
return json.loads(json.dumps(defecto))
except ValueError as ex:
# el archivo existe pero no se puede leer (una edición a mano con una coma de más, un corte a
# medias). Antes se sustituía por los valores de fábrica y se guardaba encima: las carpetas
# registradas y los clientes desaparecían sin decir nada. Ahora se aparta con copia.
copia = f"{ruta}.roto-{time.strftime('%Y%m%d-%H%M%S')}"
try:
shutil.copy2(ruta, copia)
except OSError:
copia = "(no se pudo copiar)"
print(f"AVISO: {os.path.basename(ruta)} no se pudo leer ({ex}); se apartó en {copia} y se parte de cero.")
return json.loads(json.dumps(defecto))