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

88 lines
3.2 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Comandos
**Ejecutar la aplicación:**
```bash
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)
```json
{
"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.