Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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
- Al iniciar:
ConfigManager.load()restaura perfiles desdeconfig.json(con migración automática de v1 → v2). - El usuario selecciona o crea un perfil en
ProfileBar. - Configura 4 rutas (ES-DE origen/destino, ROMs origen/destino) y selecciona los sistemas.
- Al pulsar "Sync Now": hilo daemon →
_sync_threadenapp.py. - Por cada sistema: 3 fases usando
SyncEngine.sync_folder(). - Al cambiar de perfil: se guarda el estado actual en el perfil activo antes de cargar el nuevo.
- 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.