Files
twblue/CAMBIOS.md

229 lines
7.5 KiB
Markdown
Raw Normal View History

2026-02-01 19:49:49 +01:00
# Integración de Bluesky en TWBlue
Este documento describe la implementación completa de soporte para Bluesky (AT Protocol) en TWBlue.
## Resumen
Se ha añadido soporte completo para la red social Bluesky, siguiendo la arquitectura MVC existente de TWBlue y manteniendo paridad de características con la implementación de Mastodon.
## Dependencias
- **atproto**: SDK oficial de Python para AT Protocol (Bluesky)
- Las dependencias existentes de TWBlue (wxPython, arrow, configobj, etc.)
## Estructura de Archivos
### Sesión (`src/sessions/blueski/`)
| Archivo | Descripción |
|---------|-------------|
| `__init__.py` | Inicialización del módulo |
| `session.py` | Clase principal de sesión Bluesky con autenticación, API y gestión de cuenta |
| `compose.py` | Funciones de composición para formatear datos de API en cadenas legibles |
| `streaming.py` | Sistema de polling para actualizaciones en tiempo real |
| `utils.py` | Utilidades auxiliares (detección de medios, etc.) |
### Controladores de Buffers (`src/controller/buffers/blueski/`)
| Archivo | Descripción |
|---------|-------------|
| `__init__.py` | Registro de tipos de buffer |
| `base.py` | Buffer base con funcionalidad común (acciones, menús, eventos) |
| `timeline.py` | Buffers de línea de tiempo (Home, Following, Notifications, etc.) |
| `user.py` | Buffers de usuarios (Followers, Following, Blocks) |
| `chat.py` | Buffers de mensajes directos |
### Controladores (`src/controller/blueski/`)
| Archivo | Descripción |
|---------|-------------|
| `__init__.py` | Inicialización del módulo |
| `handler.py` | Handler principal que crea buffers y gestiona acciones |
| `messages.py` | Visor de posts con detalles completos |
| `userActions.py` | Diálogo de acciones de usuario (seguir, silenciar, bloquear) |
| `userList.py` | Gestión de listas de usuarios |
| `settings.py` | Configuración de cuenta |
| `templateEditor.py` | Editor de plantillas |
### Interfaz de Usuario (`src/wxUI/`)
#### Paneles (`src/wxUI/buffers/blueski/panels.py`)
- `HomePanel`: Panel de línea de tiempo con botones Post, Repost, Reply, Like, Chat
- `NotificationPanel`: Panel de notificaciones (hereda de HomePanel)
- `UserPanel`: Panel de lista de usuarios con botones Post, Actions, Message
- `ChatPanel`: Panel de lista de conversaciones
- `ChatMessagePanel`: Panel de mensajes de chat individuales
#### Diálogos (`src/wxUI/dialogs/blueski/`)
| Archivo | Descripción |
|---------|-------------|
| `postDialogs.py` | Diálogo de composición de posts y visor de posts |
| `configuration.py` | Diálogo de configuración de cuenta |
| `menus.py` | Menús contextuales |
| `userActions.py` | Diálogo de acciones de usuario |
| `showUserProfile.py` | Diálogo de perfil de usuario |
### Configuración (`src/blueski.defaults`)
Archivo de configuración por defecto con secciones:
- `[blueski]`: Credenciales (handle, app_password, did, session_string)
- `[general]`: Tiempos relativos, posts por llamada, orden de timelines
- `[sound]`: Configuración de audio
- `[other_buffers]`: Timelines adicionales, búsquedas guardadas
- `[mysc]`: Idioma de corrector ortográfico
- `[reporting]`: Reportes de braille/voz
- `[templates]`: Plantillas de visualización
## Características Implementadas
### Autenticación
- Login con handle y App Password de Bluesky
- Persistencia de sesión mediante session_string
- Migración automática de configuración legacy
### Buffers Disponibles
1. **Home (Following)**: Timeline cronológico inverso de cuentas seguidas
2. **Discover**: Feed algorítmico de descubrimiento
3. **Mentions**: Menciones, respuestas y citas
4. **Notifications**: Todas las notificaciones (likes, reposts, follows, etc.)
5. **Sent**: Posts enviados por el usuario
6. **Likes**: Posts marcados como favoritos
7. **Followers**: Lista de seguidores
8. **Following**: Lista de seguidos
9. **Blocked Users**: Usuarios bloqueados
10. **Chats**: Mensajes directos
11. **Timelines de Usuario**: Timelines personalizados por usuario
12. **Búsquedas**: Búsquedas guardadas
### Acciones de Posts
- Publicar nuevo post (con imágenes, CW, idioma)
- Responder a posts
- Repostear
- Dar like
- Eliminar posts propios
- Ver conversación/hilo completo
- Copiar enlace al portapapeles
- Ver detalles del post (likes, reposts, descripción de imágenes)
### Acciones de Usuario
- Seguir/Dejar de seguir
- Silenciar/Desilenciar
- Bloquear/Desbloquear
- Ver perfil
- Ver timeline de usuario
- Ver seguidores/seguidos de usuario
- Enviar mensaje directo
### Mensajes Directos
- Lista de conversaciones
- Ver mensajes de una conversación
- Enviar mensajes
### Sistema de Actualización
- Polling periódico para notificaciones (configurable, mínimo 30 segundos)
- Publicación de eventos via pub/sub para consistencia con Mastodon
### Accesibilidad
- Lectura automática de nuevos elementos
- Indicadores de sonido para audio/video e imágenes
- Tiempos relativos actualizados al enfocar
- Soporte completo de lector de pantalla
## Formato de Visualización
El formato de posts y notificaciones se ha igualado al de Mastodon:
### Posts
```
Usuario (@handle), Texto del post, Fecha, Bluesky
```
Para reposts:
```
Reposteador (@handle), Reposted from @original: Texto, Fecha, Bluesky
```
### Notificaciones
```
Usuario (@handle), {usuario} ha añadido a favoritos: {texto}, Fecha
```
### Usuarios
```
Nombre (@handle). X seguidores, Y siguiendo, Z posts. Se unió fecha
```
## Sonidos
| Acción | Sonido |
|--------|--------|
| Nuevo post en timeline | `tweet_received.ogg` |
| Nueva notificación | `notification_received.ogg` |
| Nueva mención | `mention_received.ogg` |
| Nuevo DM | `dm_received.ogg` |
| Post enviado | `tweet_send.ogg` |
| Respuesta enviada | `reply_send.ogg` |
| Repost | `retweet_send.ogg` |
| Like | `favourite.ogg` |
| DM enviado | `dm_sent.ogg` |
| Actualización de seguidores | `update_followers.ogg` |
| Búsqueda/Conversación | `search_updated.ogg` |
## Notas Técnicas
### Diferencias con Mastodon
- Bluesky usa AT Protocol en lugar de ActivityPub
- Autenticación mediante App Password en lugar de OAuth2
- No hay "Firehose" streaming real; se usa polling
- URIs en formato `at://did:plc:xxx/app.bsky.feed.post/rkey`
- Facets para menciones y enlaces en lugar de HTML
### Manejo de Errores
- Logging consistente con `log.error()` para errores esperados
- Mensajes de error traducibles para el usuario
### Configuración
- Valores por defecto en `blueski.defaults`
- Acceso a configuración via `self.session.settings`
- Helper `get_max_items()` para obtener límite de posts
## Pruebas
Tests ubicados en `src/test/sessions/blueski/`:
- `test_blueski_session.py`: Tests de la sesión de Bluesky
## Traducciones
Todos los strings de interfaz usan la función `_()` para internacionalización:
- Títulos de buffers
- Acciones de menú
- Mensajes de confirmación
- Mensajes de error
- Formatos de notificación
## Archivos Modificados (Fuera de blueski/)
Para integrar Bluesky en TWBlue, también se modificaron:
- `src/controller/mainController.py`: Registro de handlers de sesión
- `src/sessionmanager/`: Soporte para tipo de sesión "blueski"
- `src/requirements.txt`: Dependencia atproto
## Uso
1. En TWBlue, ir a Sesión > Nueva cuenta
2. Seleccionar "Bluesky"
3. Introducir handle (ej: `usuario.bsky.social`)
4. Introducir App Password (desde Configuración > App Passwords en bsky.app)
5. Los buffers se crearán automáticamente
## Limitaciones Conocidas
- No hay streaming en tiempo real (se usa polling)
- Las listas de Bluesky no están implementadas aún
- Los starter packs no están soportados
- La moderación de contenido es básica (solo CW)