Files
pocketsync/CLAUDE.md
T
2026-02-21 19:22:08 +01:00

3.2 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Comandos

Ejecutar la aplicación:

python pocketsync.py

No hay proceso de build, instalación de dependencias, ni tests automatizados. Todo depende de la librería estándar de Python 3 y del comando robocopy de Windows.

Arquitectura

Aplicación de escritorio en Python/Tkinter para sincronizar archivos de emulación retro (ES-DE y ROMs) hacia almacenamiento externo usando Robocopy. Soporta múltiples perfiles nombrados (uno por consola/dispositivo).

Estructura de archivos

pocketsync.py           # Entry point (~20 líneas)
config.json             # Config v2 con perfiles
CLAUDE.md

core/
    __init__.py
    config.py           # Profile dataclass + ConfigManager (load/save/migrate v1→v2)
    sync_engine.py      # ABC SyncEngine
    robocopy_engine.py  # RobocopySyncEngine (subprocess + parsing)

ui/
    __init__.py
    app.py              # PocketSyncApp — orquestación y loop de sync
    profile_bar.py      # Widget: dropdown de perfiles + New/Rename/Delete
    path_panel.py       # Widget: los 2 selectores de ruta (ES-DE + ROMs)
    system_list.py      # Widget: listbox de sistemas + Select All/None
    status_bar.py       # Widget: barra de estado (sistema/fase/archivo)
    summary_panel.py    # Widget: área de texto de resumen
    styles.py           # Constantes visuales (colores, fuentes)

Entry point: pocketsync.py — instancia ConfigManager y PocketSyncApp.

Persistencia: config.json (versión 2) guarda todos los perfiles. Si existe un config v1 (plano), se migra automáticamente a un perfil "Default" al primer arranque.

Esquema config.json (v2)

{
    "version": 2,
    "active_profile": "Default",
    "profiles": [
        {
            "name": "Default",
            "esde_src": "...",
            "roms_src": "...",
            "esde_dst": "...",
            "roms_dst": "...",
            "selected": ["arcade", "nes"]
        }
    ]
}

Flujo de la aplicación

  1. Al iniciar: ConfigManager.load() restaura perfiles desde config.json (con migración automática de v1 → v2).
  2. El usuario selecciona o crea un perfil en ProfileBar.
  3. Configura 4 rutas (ES-DE origen/destino, ROMs origen/destino) y selecciona los sistemas.
  4. Al pulsar "Sync Now": hilo daemon → _sync_thread en app.py.
  5. Por cada sistema: 3 fases usando SyncEngine.sync_folder().
  6. Al cambiar de perfil: se guarda el estado actual en el perfil activo antes de cargar el nuevo.
  7. Al cerrar: ConfigManager.save() persiste todos los perfiles.

Flags de Robocopy usados

  • /MIR — modo espejo (sincroniza origen → destino)
  • /NP — sin porcentaje de progreso en la salida

Threading

Las operaciones de copia corren en un hilo daemon separado para no bloquear la UI. Las actualizaciones de widgets se hacen desde ese hilo directamente.

Extensibilidad de backends

core/sync_engine.py define la ABC SyncEngine. RobocopySyncEngine es la implementación concreta. Para añadir rsync u otro backend: crear un nuevo archivo en core/ que implemente la misma interfaz.

Plataforma

Windows 10/11 obligatorio (depende de robocopy). Python 3.6+, sin dependencias externas.