SocialRSS Accessible Suite. Novedades de la versión 1.0.18.


TELEGRAM DRIVE: TU NUBE PERSONAL DENTRO DE TELEGRAM

- Si ya tienes abierta la ventana de Telegram Drive y la abres otra vez desde el menú, ahora se TRAE AL FRENTE la que ya tenías (aunque estuviera minimizada, oculta o detrás de la ventana principal), en vez de abrir otra vacía. Solo se abre una nueva si de verdad habías cerrado la anterior.

- NUEVO: Telegram Drive, un explorador de archivos accesible que convierte tu cuenta de Telegram en una nube personal (como Google Drive, OneDrive o MEGA) usando un CANAL PRIVADO como almacén. El canal se llama "SocialRSS Telegram Drive", es privado y solo tuyo (no aparece en búsquedas). Es un canal de DIFUSIÓN: solo tú (su propietario) publicas en él a través de la aplicación, así que es de solo lectura para cualquier otra persona; nadie más puede colar archivos. Se abre desde el menú Telegram → "Telegram Drive (tu nube personal)...".
- DESCRIPCIÓN OPCIONAL: al crear una carpeta o al subir archivos puedes añadir, si quieres, una descripción; también se puede cambiar después ("Cambiar la descripción...") y se ve en las Propiedades. La descripción viaja en el índice, así que se conserva al reconstruir la nube.
- Los ajustes de la nube están en su PROPIA subsección dentro de Preferencias → Servicios → Telegram → "Telegram Drive (nube personal)" (un nodo aparte en el árbol, no mezclados con el resto de Telegram).
- El TÍTULO de la ventana muestra ahora tu ubicación (la ruta o la papelera), y la nube tiene una BARRA DE ESTADO útil (ubicación, elementos a la vista, marcados, transferencias en curso y tamaño total) que puedes leer con Ctrl+Mayús+B, igual que en la ventana principal.
- MARCAR VARIOS: marca elementos con la BARRA ESPACIADORA para operar sobre varios a la vez; el estado aparece en una columna "Marcado" que dice "Sí" o "No" (así, al recorrer las columnas con las flechas, el lector te dice de verdad si está marcado; antes solo leía "Marcado" y no se distinguía). Las operaciones actúan sobre lo marcado (o sobre el elemento con foco si no marcas nada). Ctrl+A marca todo y hay "Desmarcar todo".
- Arreglado que, DURANTE una subida o descarga, el lector repetía sin parar el elemento con foco (tanto en la lista principal de la nube como en la ventana de Transferencias): ahora la lista solo se reconstruye cuando cambia su contenido, ese refresco de fondo NO relee tu elemento (actualización silenciosa como en la ventana principal) y el progreso de las transferencias se actualiza en el sitio sin mover el foco. Verás el porcentaje cambiar visualmente y podrás leerlo yendo a la columna Progreso con las flechas, pero el lector no habla en cada actualización.
- CANCELAR una transferencia ahora es INMEDIATO: antes cancelar tardaba y no surtía efecto hasta que el archivo terminaba de subir; ahora la subida o descarga en curso se aborta al instante, se limpia lo temporal y no queda ningún archivo a medias.
- El aviso "no hay ningún canal para reconstruir" ya no se registra como un error con traza en el log (es una situación esperada; solo se muestra el mensaje al usuario).
- COLA DE TRANSFERENCIAS más robusta: si una transferencia fallaba de forma inesperada, el trabajador de fondo podía morir y dejar TODO lo demás en "Pendiente" sin subir. Ahora un fallo puntual no tumba la cola (se marca esa transferencia como fallida y se sigue con las demás), y si el trabajador se cae, se RELANZA solo en cuanto se consulta la lista (autocuración). Además, reabrir la ventana de la nube mientras algo sube ya NO reinicia a "Pendiente" lo que estaba en curso. La cola registra ahora en el log cuándo empieza y termina cada subida/descarga (antes no dejaba rastro para diagnosticar).
- REANUDAR AL VOLVER A ABRIR: las transferencias que quedaron pendientes al cerrar SocialRSS se reanudan al volver a abrir la nube, siempre que el archivo de origen siga existiendo; las subidas cuyo archivo ya no está se marcan como fallidas con un aviso claro (no se quedan colgadas para siempre).
- TRANSFERENCIAS SIMULTÁNEAS DE VERDAD: antes, aunque en Preferencias pusieras varias subidas a la vez, la nube subía SIEMPRE de una en una (la cola usaba un solo trabajador y, además, la librería de Telegram limita las transferencias en paralelo a 1 por defecto). Ahora suben/bajan varias a la vez de verdad: se eleva el techo del cliente de Telegram y la cola lanza tantos trabajadores como pidas. La opción de Preferencias → Servicios → Telegram → Telegram Drive admite ahora hasta 10 simultáneas (1 = una a una; un número muy alto puede dar problemas de red o esperas de Telegram).
- REANUDAR SUBIDAS GRANDES DESDE DONDE IBAN: un archivo grande se parte y se sube por trozos. Antes, si cerrabas la app o la ventana a media subida, al reintentar empezaba DE CERO (y dejaba trozos sueltos en el canal). Ahora se REANUDA: comprueba qué partes ya están subidas y solo sube las que faltan. Si el archivo de origen cambió, descarta lo anterior (y limpia sus trozos del canal) y empieza de nuevo. Al cancelar tú una subida, sus trozos ya subidos se borran del canal para no dejar basura.
- UN SOLO ÍNDICE EN EL CANAL: antes, cada subida dejaba un "socialrss_drive_index.json" nuevo y no borraba el anterior, así que se acumulaban a montones. Ahora al exportar el índice se borra el anterior (queda SOLO el más reciente, con toda la información para reconstruir tu nube), y ya no se sube uno por cada archivo, sino uno al terminar la tanda de subidas. Para limpiar los que ya se acumularon, usa menú Nube → "Revisar y reparar el canal...": detecta los índices viejos sobrantes y los borra (deja solo el vigente).
- BORRADO EN EL CANAL ARREGLADO: al eliminar de la papelera o vaciarla, los archivos ahora se borran DE VERDAD del canal de Telegram. El fallo: tras reiniciar la app, la librería de Telegram no reconocía el canal por su identificador (daba "Peer id invalid") y el borrado fallaba en silencio, quedaba pendiente y no se completaba. Ahora se "reconoce" el canal antes de cada operación (borrar, subir, descargar, revisar), así que los borrados llegan al canal y las eliminaciones que quedaron pendientes se completan al volver a abrir la nube. Para limpiar restos de sesiones anteriores (subidas cortadas, etc.), usa menú Nube → "Revisar y reparar el canal...".
- LIMPIAR TRANSFERENCIAS EN LOTE: en la ventana de Transferencias, el botón nuevo "Limpiar terminadas..." quita de la lista de golpe las completadas, las fallidas, las canceladas o todas las terminadas (eliges con botones accesibles). Nunca toca las que están en curso.
- PURGA AVANZADA DEL CANAL (menú Nube → "Listar TODO el canal (purga avanzada)..."): para quien sabe lo que hace. Lista TODOS los documentos del canal con casillas accesibles (indica cuáles son archivos de tu nube, cuáles están sueltos y cuáles son índices json —viejos o el vigente—). Marcas los que quieras y los borra DIRECTAMENTE del canal, SIN pasar por la papelera y sin recuperación. Un botón marca de golpe todo lo que no pertenece a ningún archivo (sueltos e índices sobrantes), respetando tus archivos y el índice vigente. Pensado para purgar restos (json acumulados, archivos colgados, partes sueltas). Avisa dos veces; si no sabes lo que haces, no lo uses.
- REVISAR Y REPARAR EL CANAL (menú Nube → "Revisar y reparar el canal..."): compara lo que hay en el canal con tu índice y te dice qué no cuadra. Puede BORRAR del canal los documentos huérfanos (los que no le corresponden a ningún archivo tuyo, p. ej. restos de subidas cortadas) y QUITAR del índice los archivos rotos (a los que les falta alguna parte en el canal y no se podrían descargar enteros). No borra nada sin preguntarte.
- COLUMNAS PERSONALIZABLES: la lista de la nube tiene columnas Marcado, Nombre, Tipo, Tamaño, Modificado, DESCRIPCIÓN y Estado. Puedes personalizar QUÉ columnas se muestran, en qué orden y cómo las lee el lector desde el editor de plantillas (Herramientas → Plantillas → Telegram → "Telegram Drive (nube)").
- Puedes ELIMINAR TODA LA NUBE (menú Nube → "Eliminar Telegram Drive por completo..."): borra el canal privado con TODOS los archivos y el índice local. Avisa dos veces porque es irreversible.
- Arreglado un CONFLICTO DE TECLAS: Ctrl+Mayús+B (leer la barra de estado) dejaba de funcionar con XMPP activo porque el menú de XMPP "Buscar contacto o grupo" usaba ese mismo atajo y lo tapaba (abría la búsqueda en vez de leer la barra). Esa búsqueda de XMPP pasa a estar solo en el menú y Ctrl+Mayús+B vuelve a leer la barra de estado en todas partes.
- Explorador completo: crea carpetas y subcarpetas, cambia nombres, mueve, copia y pega, navega hacia dentro y hacia atrás/adelante, busca por nombre, ordena (las carpetas siempre antes que los archivos) y consulta las propiedades de cada elemento. Todo con lista accesible por columnas (Nombre, Tipo, Tamaño, Modificado, Estado), etiquetas comprensibles para el lector y foco estable (las novedades no te mueven el foco ni te hacen releer).
- Subida y descarga en SEGUNDO PLANO: puedes seguir usando SocialRSS mientras suben o bajan tus archivos. Sube archivos sueltos o carpetas enteras conservando su estructura; descarga archivos o carpetas completas. Una ventana de Transferencias muestra el progreso en vivo y permite cancelar, reintentar y quitar de la lista.
- ARCHIVOS GRANDES: los que superan el límite de Telegram (2 GB cuenta normal, 4 GB con Premium) se parten solos en trozos, se suben por partes sin cargar el archivo entero en memoria y se reconstruyen al descargar, verificando el contenido (SHA-256) al final; si algo no cuadra, el archivo dañado se descarta.
- SIN DUPLICAR CONTENIDO: si subes un archivo cuyo contenido ya está en la nube (aunque tenga otro nombre), no se vuelven a subir sus datos: se reutiliza el que ya había. Y si repites un nombre en una carpeta, se te pregunta qué hacer (Reemplazar, Conservar ambos, Omitir), con opción de "aplicar a todos"; nunca se sobrescribe nada en silencio.
- PAPELERA de verdad: enviar a la papelera no borra; puedes restaurar a la ubicación original, vaciar la papelera o eliminar definitivamente (esto sí quita los mensajes del canal). Hay retención configurable: lo que lleve más de X días en la papelera se limpia solo al abrir la nube (30 días por defecto; 0 = nunca).
- RECUPERABLE: además de la base local, la nube guarda en el canal un índice versionado. Si reinstalas, borras la base o usas la cuenta en otro equipo, puedes reconstruir toda tu nube desde el canal (menú Nube → "Reconstruir el índice desde el canal..."). Si la app perdió el id del canal, ahora lo LOCALIZA sola por su título entre tus chats; y si no hay ningún canal de Telegram Drive que reconstruir, te lo dice con un mensaje claro (antes se quedaba en una nube vacía sin avisar). Las subidas se registran de forma atómica: una subida a medias nunca cuenta como archivo válido.
- Atajos completos (todos con su entrada de menú): Intro abre carpeta o descarga archivo, Retroceso sube de nivel, Alt+Izquierda/Derecha van atrás/adelante, Ctrl+Mayús+R actualiza, Ctrl+Mayús+N crea carpeta, Ctrl+U sube archivos, Ctrl+Mayús+U sube una carpeta, Ctrl+D descarga, Ctrl+F busca, Ctrl+F2 cambia el nombre, Supr envía a la papelera, Mayús+Supr elimina definitivamente, Ctrl+X/C/V/A para cortar/copiar/pegar/seleccionar todo y Alt+Intro muestra las propiedades.
- Opciones en Preferencias → Servicios → Telegram (sección "Telegram Drive"): carpeta de descargas, transferencias simultáneas, política ante nombres repetidos, días de retención de la papelera, confirmar antes de enviar a la papelera, limpiar temporales y cada cuántos segundos anunciar el progreso.
- Nota sobre cifrado: la arquitectura queda preparada para cifrar el contenido en el futuro, pero de momento está DESACTIVADO a propósito: no se incluye una implementación de cifrado que no sea segura.


TIEMPO REAL RECUPERADO (arreglo del atasco general)

- Arreglado un atasco que frenaba TODA la aplicación: la moderación de Bluesky podía consultar el servidor por CADA publicación mientras se guardaba una página, reteniendo la escritura de la base de datos entera. Mientras duraba, el Inicio de Mastodon no entraba en tiempo real, los artículos RSS llegaban tarde (también a la bandeja de entrada) y lo publicado tardaba en aparecer. Ahora las preferencias de moderación se consultan UNA vez por página (con caché de una hora, también si la consulta falla) y siempre fuera de la escritura.
- Arreglado "El sistema está ocupado actualizando. Espere un momento." que no se iba nunca: si una actualización se descartaba por estar ya otra igual en marcha, quien la pidió no se enteraba y el aviso de "ocupado" se quedaba clavado (y el buffer dejaba de refrescarse solo hasta pulsar Ctrl+Shift+R). Ahora se avisa con suavidad ("Esa actualización ya está en curso") y el ciclo de actualización continúa con normalidad. El mismo aviso amable aparece si intentas conectar dos veces seguidas una red (IRC, Matrix, XMPP), lanzar dos operaciones de copia de seguridad o publicar dos veces el mismo post de Bluesky: nada de mensajes de error alarmantes por algo que ya estaba en marcha.
- Lo que publicas o respondes en Mastodon aparece AL INSTANTE también en tu Inicio (y los mensajes directos en su buffer), sin esperar al streaming ni al siguiente sondeo, como hace TWBlue. Si el streaming lo trae después, no se duplica.
- RSS: el intervalo de actualización automática admite ahora desde 1 MINUTO (antes el mínimo real era 5), para quien quiere sus noticias casi al momento. Se ajusta en Preferencias → Servicios → RSS.


RSS A FONDO (auditoría RSS de julio de 2026)

- SEPARACIÓN REAL ENTRE CUENTAS RSS: las carpetas/categorías, las alertas por palabra clave, las búsquedas guardadas, el historial y las estadísticas de lectura y la lista de descargas de podcast pertenecen ahora a CADA cuenta (antes se compartían entre todas: una acción en una cuenta podía tocar datos de otra, y las estadísticas contaban artículos ajenos). La migración es automática y conserva todo (las carpetas usadas por varias cuentas se duplican para cada una).
- SONDEO INTELIGENTE (scheduler por vencimiento): la actualización automática ya no descarga TODOS los feeds en cada ciclo. Cada feed tiene su próxima actualización programada: respeta su intervalo propio ("Ajustes de este feed"), se ADAPTA solo (un feed que lleva días sin publicar se consulta menos, y vuelve al ritmo normal en cuanto publica) y se dispersan las descargas para evitar ráfagas de conexiones. El refresco manual (Ctrl+Shift+R) se salta la programación y fuerza todos, como siempre.
- SALUD DE LOS FEEDS: los feeds que fallan aplican un retroceso creciente (30 minutos, 1 h, 2 h... hasta 24 h) en vez de reintentarse para siempre al mismo ritmo. Un feed retirado por el servidor (410) se pausa solo y te avisa; uno no encontrado (404) pasa a comprobarse una vez al día; uno protegido (401/403) lo indica claramente. Todo se registra por feed (último intento, último éxito, fallos seguidos).
- Los reintentos de descarga solo se aplican a errores TRANSITORIOS (conexión, 429, errores del servidor) respetando el tiempo de espera que pida el servidor; un error permanente (404, 410, sin permiso) ya no se reintenta en bucle. Todas las descargas tienen límite de tamaño (un feed roto o malicioso no puede llenar la memoria) y los episodios de podcast se descargan a un archivo temporal que solo se renombra al terminar (un corte de red ya no deja un episodio a medias con el nombre definitivo).
- El TEXTO COMPLETO de los artículos se descarga ahora en una cola aparte con su propio ritmo: los artículos aparecen AL MOMENTO con su resumen y el cuerpo completo llega solo en segundo plano (antes cada página retenía el sondeo y una ronda podía tardar minutos).
- Los artículos EDITADOS en el origen se actualizan: si el editor corrige el título, el cuerpo o el audio de un episodio manteniendo el identificador, la copia local se actualiza (tu estado de leído/favorito/leer más tarde se conserva). Antes un artículo conocido no se volvía a mirar jamás.
- El parser alternativo rápido (fastfeedparser) ya no pierde las FECHAS ni los ADJUNTOS de podcast cuando entra como respaldo: todo pasa por un contrato único de parseo, venga del parser que venga. Y feedparser se actualiza a 6.0.12 (corrige un fallo con Python 3.10+).
- La búsqueda local de RSS filtra por TU CUENTA antes de aplicar el límite (coincidencias de otras cuentas podían consumir el cupo y esconder resultados tuyos) y ordena por relevancia real; si el índice no está disponible, cae a una búsqueda simple en vez de no devolver nada.
- La exportación de artículos a HTML/Markdown va SANEADA: un feed malicioso ya no puede colar scripts o atributos peligrosos en el archivo exportado, y los enlaces raros (javascript:...) se omiten. Y al exportar VARIOS artículos ahora eliges con CASILLAS accesibles cuáles quieres (vienen todos marcados; desmarca los que no), igual que la vista previa de OPML y el listado de Sonidos.
- IMÁGENES REMOTAS bajo tu control (privacidad): por defecto el visor de artículos ya NO carga imágenes de los servidores de los feeds (se sustituyen por su texto alternativo, mejor para el lector de pantalla, y se evitan los píxeles de seguimiento). Casilla nueva en Preferencias → Servicios → RSS para quien las quiera; el ajuste "sin imágenes" por feed ahora funciona de verdad.
- OPML COMPLETO: la importación conserva las carpetas ANIDADAS (antes se aplanaban) y la exportación escribe la jerarquía completa (OPML 2.0), con límites de tamaño y profundidad contra archivos rotos. Los duplicados se detectan por URL normalizada: la variante con barra final o parámetros de seguimiento (utm...) ya no duplica la suscripción.
- Los vídeos importados con el catálogo completo de YouTube se guardan ahora con su cuenta (antes quedaban invisibles para los buffers) y por lotes en una transacción (mucho más rápido).
- Las reglas automáticas se cargan y COMPILAN una vez por ciclo (antes se recargaban de la base y recompilaban por CADA artículo), y una expresión regular inválida ya no puede romper la evaluación. Los contadores del árbol RSS se calculan con dos consultas agrupadas en vez de una por feed y por carpeta.


ARREGLOS REPORTADOS POR USUARIOS

- ENCONTRADO Y ARREGLADO el bloqueo del arranque ("Cargando buffers (No responde)", Alt+Tab y teclas del sistema sin reaccionar con el lector durante la carga): el volcado de pila del nuevo vigilante lo cazó con exactitud. Al arrancar, un intento anterior de conexión del streaming de Mastodon, al descubrir que ya había otro más nuevo, cerraba sus conexiones de red DENTRO del candado del streaming; cerrar una conexión de streaming espera a la red y puede tardar SEGUNDOS, y el hilo de la interfaz (que pide ese mismo candado al navegar) se quedaba congelado 8-19 segundos. Ahora esas conexiones sobrantes se cierran fuera del candado y en un hilo aparte (la misma regla que ya se aplicaba al detener el streaming). La interfaz, el lector y las teclas del sistema quedan libres durante toda la carga.
- Remate del mismo fallo (el lector aún encolaba teclas DURANTE el diálogo de carga, sin congelaciones): el hilo de la interfaz pasa a prioridad "por encima de lo normal" (el lector consulta la ventana con llamadas síncronas: con la interfaz por encima y el fondo por debajo, el lector siempre gana el turno), los repintados que dispara el STREAMING en tiempo real también se posponen mientras el diálogo de carga está delante (las novedades quedan en la base y se pintan al cerrar), y el vigilante registra ahora también los retrasos finos (a partir de 0,75 s) para ver la distribución del lag en los reportes.
- El diálogo "Cargando buffers" tiene ahora FOCO de verdad (en su barra de progreso): no tenía ningún control enfocable y el foco quedaba indefinido durante toda la carga, lo que dejaba a NVDA sin responder a varios gestos hasta volver a la ventana principal (fallo reportado).
- Y "Cargando buffers" YA NO ES MODAL: el bucle modal de los diálogos en Windows retiene el primer plano e impedía cambiar a OTRA aplicación con Alt+Tab durante toda la carga (fallo reportado: Windows, Win+D y los escritorios funcionaban, pero Alt+Tab no; es una limitación conocida de los diálogos modales en Windows). Ahora el diálogo se muestra sin modalidad y lo que se DESHABILITA es la ventana principal (el efecto para el usuario es el mismo: no se puede navegar antes de tiempo), con lo que Alt+Tab queda libre para irte a Word, TWBlue o donde quieras mientras carga.
- XMPP: añadir una cuenta esperaba como mucho 45 segundos la negociación completa con el servidor; con servidores lentos (reportado con conversations.im) el alta se declaraba fallida ("revisa el JID") cuando la conexión estaba a punto de completarse. Ahora se esperan hasta 90 segundos y, si aun así no llega, el mensaje deja claro que el servidor va lento y que no es culpa del usuario ni de sus credenciales.

- Arreglado: publicaciones de OTRAS redes se colaban en los buffers de RSS (p. ej. un post de Bluesky con su etiqueta de origen dentro de "No leídos"). Al salir de la BANDEJA DE ENTRADA hacia un buffer de RSS, el sondeo de la bandeja seguía creyendo que la bandeja estaba activa e insertaba sus filas encima de la lista nueva. Ahora el buffer de RSS fija su modo al cargar y la bandeja comprueba dos veces que sigue siendo el buffer activo antes de insertar nada.
- INTERFAZ INVISIBLE: al abrir un compositor o un diálogo (publicar, publicación cruzada, menú contextual, lector de artículos, preferencias, centro de notificaciones...) desde el modo invisible, la ventana se mostraba para el diálogo y SE QUEDABA en primer plano al cerrarlo, obligando a ocultarla a mano (fallo reportado). Ahora la ventana solo se presta mientras el diálogo está abierto: al cerrarse, si estabas en modo invisible, se vuelve a ocultar sola.
- Arranque más fluido: el vaciado de las cachés "no conservar entre sesiones" (Mastodon, Bluesky, X y RSS) se hacía en el hilo de la interfaz durante "Cargando buffers" y, con miles de filas, la ventana podía quedar "No responde" unos segundos. Ahora se hace en segundo plano (las descargas siguen esperando a que termine, para no pisarse).
- Vigilante de congelaciones: si el hilo de la interfaz queda bloqueado más de 3 segundos (la ventana aparece como "No responde"), queda registrado en el log CUÁNDO y CUÁNTO duró — y además se vuelca la PILA del hilo bloqueado en ese mismo instante (la última línea señala la función culpable) junto a una línea por cada otro hilo con lo que estaba ejecutando. Los reportes de cuelgues llegan con el diagnóstico dentro.
- Arreglado: la columna nueva del detector de contenido repetido (body_hash) no llegaba a las bases que ya estaban en la versión 11 de esquema, y el ciclo RSS entero fallaba con "no such column: body_hash" (99 errores por ronda, fallo reportado). Migración 12 que la reaplica de forma segura.
- Carga inicial mucho más ligera para el sistema y el lector: mientras "Cargando buffers" está delante ya NO se repinta nada por cada carga que termina (la lista de Bluesky se redibujaba por cada buffer descargado y el árbol entero se reconstruía POR CADA cuenta de Telegram, generando ráfagas de trabajo y de eventos para NVDA que nadie veía; el equipo entero se notaba pastoso y hasta Alt+Tab respondía tarde, fallo reportado). Ahora se repinta UNA sola vez al cerrarse el diálogo, con el árbol y el buffer activo ya al día.
- El extractor de texto completo (readability) inundaba el registro con MILES de líneas de depuración (7.300+ en una sesión, el 92% del archivo) y ese volumen ralentizaba el equipo justo durante la carga: silenciado a avisos, como el resto de librerías ruidosas. Además, el texto completo ya NO se descarga para los artículos que entran YA LEÍDOS (los re-importados tras el vaciado "no conservar entre sesiones"): tras un vaciado eran cientos de páginas descargadas y analizadas en balde. Y su trabajador pasa a modo FONDO total de Windows (baja también la prioridad de disco, no solo de CPU).
- El sondeo RSS quema MUCHA menos CPU (medido: ~230 parseos completos de XML cada 2 minutos con el intervalo a 1 minuto y 99 feeds; el lector de pantalla y hasta Alt+Tab se resentían):
  · Si el servidor no da ETag pero devuelve el MISMO contenido, se detecta por hash y el parseo (lo caro) se salta por completo.
  · El ritmo por feed es ADAPTATIVO de verdad: los feeds que publicaron en la última hora van a tu intervalo (1 minuto si así lo tienes); los que llevan más de 1 hora sin publicar esperan al menos 5 minutos; más de 6 horas, 15 minutos; y días, hasta 24 h. En cuanto un feed publica, vuelve solo al ritmo rápido. El refresco manual (Ctrl+Shift+R) sigue forzando todos al momento.


RSS: PODCASTS, ETIQUETAS Y SINCRONIZACIÓN (fases B, C y D de la auditoría)

- COLA DE DESCARGAS DE PODCAST de verdad (menú RSS → "Descargas de podcast..."): al descargar un episodio se añade a una cola con la que puedes PAUSAR, REANUDAR (continúa por donde iba, no reempieza) y CANCELAR cada descarga, ver su progreso y estado en vivo, y saber cuáles ya escuchaste. Con límite de espacio de la carpeta de podcasts. Un episodio grande ya no bloquea nada: la descarga va en segundo plano con prioridad baja.
- PODCAST 2.0: los episodios traen ahora su DURACIÓN, si son de contenido explícito, su temporada y número, la imagen del episodio y, cuando el podcast los ofrece, enlaces a la TRANSCRIPCIÓN, los CAPÍTULOS, la página de APOYO y las personas del episodio. Y un artículo puede tener VARIOS adjuntos (antes solo se guardaba el primero de audio): todos quedan disponibles.
- ETIQUETAS: además de su carpeta, un feed o un artículo puede llevar VARIAS etiquetas. Se gestionan en menú RSS → "Etiquetas...", se asignan desde el menú contextual del feed ("Etiquetas del feed...") o del artículo ("Etiquetas del artículo..."), y las reglas automáticas pueden etiquetar artículos solos (acción "Etiquetar" en las reglas avanzadas). Cada etiqueta aparece en el árbol como un buffer que reúne todo lo etiquetado.
- GALERÍA DE IMÁGENES accesible (menú del artículo → "Imágenes del artículo..."): la lista de imágenes con su texto alternativo, para abrirlas en el navegador, copiar su dirección o describirlas con IA bajo petición (solo entonces se descarga la imagen, respetando el bloqueo por privacidad).
- SINCRONIZACIÓN con un servidor (menú RSS → "Sincronización con servidor..."): conecta la cuenta RSS con FreshRSS, Inoreader, BazQux, The Old Reader (protocolo Google Reader) o Miniflux para compartir tus feeds y lo leído/destacado entre dispositivos. El servidor aporta las suscripciones y el estado; los artículos los sigue bajando la app. Tus credenciales se guardan cifradas y la sincronización se repite sola con su propio intervalo.
- RESUMEN de artículos sin leer (menú RSS → "Resumen de artículos sin leer..."): un digest de tus pendientes agrupados por temas, con IA si tienes un proveedor configurado, o una lista de titulares si no.
- FEEDS MUDADOS: si un feed se traslada a otra dirección de forma permanente (redirección 301/308), la app lo detecta y actualiza su dirección sola (tras confirmarlo en dos comprobaciones, para no cambiar por un desvío temporal), y te avisa.
- Se mantiene feedparser como parser principal: se rodó fastfeedparser (más rápido) contra un corpus de compatibilidad y se comprobó que pierde los metadatos de Podcast 2.0 e iTunes, así que sigue como respaldo para no perder esa información.


RSS: FUNCIONES NUEVAS (fase de producto de la auditoría)

- CARPETAS INTELIGENTES: carpetas que se llenan solas según los criterios que elijas con controles normales (estado de lectura, destacados, leer más tarde, con audio/vídeo, un feed o carpeta concretos, antigüedad y texto contenido). Se crean en menú RSS → "Carpetas inteligentes..." y aparecen como un buffer más del árbol de cada cuenta. Los criterios se guardan de forma estructurada (nunca SQL libre).
- CENTRO DE SALUD de los feeds (menú RSS → "Salud de los feeds..."): el estado real de cada feed —correcto, fallando o en pausa, con su último éxito, el error, cuántos fallos seguidos lleva y cuándo es el próximo intento—, y acciones directas: actualizar ahora (saltándose la programación), pausar o reactivar, copiar los detalles para reportar, y "Reintentar todos los rotos" de una vez (reactiva también los pausados por un 410).
- SIGUIENTE / ANTERIOR NO LEÍDO: Ctrl+K salta al siguiente artículo sin leer de la lista y Ctrl+Mayús+K al anterior, conservando todo lo demás como está (personalizables en el editor de teclas, sección RSS).
- REGLAS AVANZADAS (botón "Regla avanzada..." en Reglas y Filtros): hasta tres condiciones combinadas con "todas (Y)" o "cualquiera (O)", varias acciones a la vez (leído, destacar, leer más tarde, sonido, aviso por voz), ámbito por feed o carpeta concretos, prioridad de evaluación y "detener" (si coincide, no se evalúan las siguientes). Las expresiones regulares se validan al guardar. Y el botón "Probar reglas" hace una SIMULACIÓN contra tus últimos artículos guardados sin aplicar ninguna acción, mostrando qué coincidiría con cada regla.
- IMPORTAR OPML CON VISTA PREVIA: antes de escribir nada se analiza el archivo y se muestra qué feeds son nuevos (marcados), cuáles ya tienes (por URL normalizada) y cuáles no valen, con su carpeta de destino; importas solo lo que marques.
- EXPORTAR ARTÍCULOS POR LOTES (menú RSS → "Exportar artículos..."): la vista actual, todos los destacados o todo lo de leer más tarde, a una carpeta, un archivo por artículo en texto, HTML o Markdown (siempre saneado), con progreso.
- JSON FEED 1.0/1.1: se admite el formato moderno de feeds en JSON (además de RSS y Atom), tanto al añadir un feed como en las actualizaciones, con sus fechas, autores y adjuntos de podcast.


PARA PROBADORES

- Prueba de regresión nueva (tests/test_auditoria_2026_07.py): una tarea descartada por estar duplicada debe avisar SIEMPRE a su callback (test_task_manager_duplicada_avisa_al_callback).
- Batería RSS nueva (tests/test_rss_auditoria.py, 21 pruebas, sin red): aislamiento por cuenta, contrato de parseo, scheduler y retroceso, búsqueda por cuenta, exportación saneada, OPML jerárquico, URLs normalizadas, reglas compiladas y avanzadas (Y/O, ámbito, detener, simulación), carpetas inteligentes, salud de feeds, vista previa de OPML y JSON Feed. La batería completa queda en 122 pruebas.
- Las migraciones de la base (versiones 10 y 11) se ensayaron contra una COPIA de una base real (99 feeds, 984 artículos): categorías conservadas por cuenta, integridad OK e idempotentes.
- Análisis técnico del incidente de tiempo real en adjuntos/analisis/AUDITORIA_RSS_SOCIALRSS_2026-07-11.md; auditoría RSS completa en adjuntos/AUDITORIA_RSS_SOCIALRSS_2026-07-11.md y su estado de implementación en adjuntos/AUDITORIA_RSS_IMPLEMENTADA_2026-07-11.md.
