Commit Graph

55 Commits

Author SHA1 Message Date
381d389b7f Revert "Revert "fix: implementar manejo correcto de modo offline""
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 8s
This reverts commit 192d8a7e79.
2025-10-17 16:10:38 -06:00
192d8a7e79 Revert "fix: implementar manejo correcto de modo offline"
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 25s
This reverts commit eedff715d4.
2025-10-17 16:08:11 -06:00
c770ae14b5 Agregar apple-touch-icon.png estándar para iOS/Safari
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 25s
2025-10-17 05:36:02 -06:00
eedff715d4 fix: implementar manejo correcto de modo offline
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 24s
Problema crítico anterior:
Cuando se perdía conexión, el sistema marcaba como "no autenticado"
y DESREGISTRABA el Service Worker, destruyendo todo el contenido
cacheado y volviendo la PWA inútil offline.

Solución implementada:

1. useAuth.ts:
   - Agregar estado isOffline con listeners de navigator.onLine
   - Detectar offline ANTES de marcar como no autenticado
   - En checkAuth: si offline, mantener último estado conocido
   - En markUnauthenticated: NO ejecutar si estamos offline
   - Nuevo authStatus: 'offline' cuando sin conexión
   - NO desregistrar SW cuando estamos offline

2. AuthIndicator.client.vue:
   - Importar isOffline del composable
   - Agregar icono WifiOff para estado offline
   - Agregar textos: "Offline" / "Sin conexión. Puedes usar contenido guardado"
   - Estilos naranja para estado offline
   - En watchers: NO llamar markUnauthenticated si offline
   - handleClick: ignorar clicks en modo offline

Ahora offline funciona correctamente:
 Mantiene último estado de autenticación conocido
 NO desregistra Service Worker
 Contenido cacheado permanece accesible
 Indicador visual claro (naranja) de modo offline
 La PWA es totalmente funcional sin conexión
2025-10-17 04:21:31 -06:00
40945dc634 feat: agregar botón de Inicio al dropdown de configuración
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 25s
Agregar botón 'Inicio' con icono Home al dropdown de los 3 puntos.
El botón navega a la página principal y cierra el menú automáticamente.

Cambios:
- Importar icono Home de lucide-vue-next
- Agregar botón de Inicio como primera opción del menú
- Implementar función goToHome() para navegación
- Estilos con hover y active states
- Icono en color accent-primary para consistencia visual
2025-10-17 04:12:47 -06:00
01f7a0fd2a fix: implementar verificación correcta de sesión con Authentik
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 24s
Problema:
La verificación de sesión usaba HEAD /api/music que no es confiable
porque:
- Los headers de Authentik solo están disponibles en el servidor
- El Service Worker puede servir respuestas cacheadas
- No había headers no-cache para evitar respuestas obsoletas

Solución:
Implementar verificación correcta basada en plantillaNuxtAuthentikProxy:

1. Nuevo endpoint /api/auth/status.get.ts
   - Lee headers de Authentik directamente desde el servidor
   - Headers no-cache para verificación en tiempo real
   - Retorna estado autenticado + info de usuario

2. Actualizar useAuth.ts
   - checkAuth() ahora usa /api/auth/status
   - fetchUserInfo() también usa el nuevo endpoint
   - Lógica simplificada y más confiable

Con esto, la verificación de sesión es precisa y en tiempo real,
consultando directamente los headers de Authentik en el servidor.
2025-10-17 04:09:28 -06:00
d9795f6752 fix: permitir reintentar canciones que fallaron previamente
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 25s
El Set failedTracks marcaba canciones como fallidas permanentemente
durante toda la sesión, sin permitir reintentarlas. Esto causaba que
canciones que fallaban por razones temporales (ej: sesión expirada)
quedaran marcadas como error incluso después de resolver el problema.

Cambios implementados:
- Limpiar estado de error al inicio de playTrack() antes de reintentar
- Agregar watcher que limpia todos los errores cuando se restablece auth
- Agregar watcher que limpia errores cuando se cargan canciones exitosamente

Con esto, las canciones con error pueden reintentarse haciendo click
nuevamente, y todos los errores se limpian automáticamente cuando
la autenticación se restablece o se cargan canciones exitosamente.
2025-10-17 03:47:23 -06:00
b46d15145f fix: evitar error CORS al expirar sesión de Authentik
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 28s
Cuando la sesión de Authentik expira, los fetch() a /api/music recibían
un redirect (302) a la página de login. Por defecto, fetch intenta seguir
el redirect pero falla por CORS porque Authentik no tiene el header
Access-Control-Allow-Origin.

La solución es usar redirect: 'error' en todos los fetch() a endpoints
protegidos, lo que convierte los redirects en errores que podemos capturar
y manejar apropiadamente. Esto coincide con la estrategia que ya usa
useAuth.ts.

Cambios:
- stores/music.ts: Agregar redirect: 'error' a fetchTracks() y cacheByName()
- pages/index.vue: Agregar redirect: 'error' a playTrack()
- Mejorar detección de errores de autenticación para incluir 'Failed to fetch'
  y errores de tipo TypeError relacionados con redirects
2025-10-17 03:40:12 -06:00
25aace816f Agregar mejoras PWA y unificar workflow a 1 job
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 40s
- Agregar id único (/?app=musica), launch_handler, handle_links y url_handlers
- Unificar workflow de 2 jobs (build + deploy) a 1 solo job
- Workaround para bug de Gitea que solo ejecuta el primer job
2025-10-17 03:26:28 -06:00
41f944f811 Implementar link handling y asociación con PWA hub
All checks were successful
build-and-deploy / build (push) Successful in 9s
build-and-deploy / deploy (push) Successful in 3s
- Agregar capture_links en manifest para mejorar experiencia PWA
- Crear archivo .well-known para asociación con inicio.nucleoriofrio.com
- Configurar Traefik para servir .well-known sin autenticación
2025-10-17 02:14:17 -06:00
7705f13297 feat: agregar páginas personalizadas de error y offline
All checks were successful
build-and-deploy / build (push) Successful in 22s
build-and-deploy / deploy (push) Successful in 3s
- Crear error.vue para manejar errores 404 y otros errores de routing
- Crear pages/offline.vue para estado offline
- Ambas páginas incluyen fondo Aurora y diseño glass morphism
- Opciones para volver al menú principal o ir a Authentik
- Agregar /offline a rutas de prerender
- Detección automática de estado de conexión en página offline
2025-10-14 01:55:13 -06:00
b8408cad96 feat: agregar manejo de errores consecutivos al cargar canciones
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
- Agregar contador de errores consecutivos
- Detener reproducción después de 2 errores consecutivos
- Mostrar toast de error cuando se alcanza el límite
- Resetear contador cuando una canción carga exitosamente
- Continuar con la siguiente canción en el primer error
2025-10-14 01:46:24 -06:00
1a5dbbbcb2 style: igualar fondo del dropdown de configuración con autenticación
All checks were successful
build-and-deploy / build (push) Successful in 22s
build-and-deploy / deploy (push) Successful in 3s
- Usar var(--bg-secondary) en lugar de rgba fijo
- Aumentar blur de 20px a 50px para consistencia
- Usar var(--border-glass) para bordes
- Ajustar border-radius de 16px a 12px
- Usar mismo box-shadow que AuthIndicator
- Reducir padding de 12px a 8px
2025-10-14 01:39:56 -06:00
aa34a98737 fix: aumentar z-index del header y dropdown
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
- Agregar z-index: 100 al app-header
- Aumentar z-index del dropdown a 10001 (mayor que AuthIndicator)
- Asegurar que el dropdown se dibuje por encima de todos los elementos
2025-10-14 01:36:34 -06:00
c082d2d27a fix: corregir overflow del dropdown en el header
All checks were successful
build-and-deploy / build (push) Successful in 22s
build-and-deploy / deploy (push) Successful in 3s
- Cambiar overflow: hidden a overflow: visible en app-header
- Aumentar z-index del dropdown de 1000 a 9999
- Permitir que el dropdown se dibuje por encima de todos los elementos
2025-10-14 01:32:37 -06:00
67d168ec6c feat: agregar menú dropdown de configuración compacto
All checks were successful
build-and-deploy / build (push) Successful in 22s
build-and-deploy / deploy (push) Successful in 3s
- Crear componente SettingsMenu.client.vue con tres puntos verticales
- Agrupar AuthIndicator y ThemeToggle en dropdown menu
- Reducir espacio en barra principal para diseño más compacto
- Agregar animaciones y transiciones suaves al dropdown
- Cerrar menú automáticamente al hacer clic fuera o presionar Escape
2025-10-14 01:22:58 -06:00
de3ffbe05f feat: agregar búsqueda de canciones y configurar hook de Gitea Actions
All checks were successful
build-and-deploy / build (push) Successful in 25s
build-and-deploy / deploy (push) Successful in 4s
- Agregar componente SearchFilter.client.vue modular y expandible
- Integrar búsqueda en MainContainer con contador de resultados
- Implementar filtrado de canciones por nombre en pages/index.vue
- Configurar hook PostToolUse para monitorear Gitea Actions
- Copiar y adaptar script monitor-gitea-action.sh para repodructor
2025-10-14 01:14:19 -06:00
182bfa74c9 Add user info header to authentication dropdown
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 2s
- Created /api/auth/userinfo endpoint to fetch user data from Authentik headers
- Added userInfo state and fetchUserInfo() function to useAuth composable
- Implemented compact user info header in dropdown with avatar, name, and email
- Avatar shows user initials with gradient background
- Styled with glassmorphism design matching app aesthetic
2025-10-12 03:26:38 -06:00
efaf33a4f4 fix: corregir endpoint de logout de Authentik
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
- Cambiar de /outpost.goauthentik.io/sign_out a endpoint correcto
- Usar flujo de invalidación por defecto de Authentik
- Endpoint: https://authentik.nucleoriofrio.com/if/flow/default-invalidation-flow/
2025-10-12 03:19:00 -06:00
d31a715974 feat: agregar dropdown de autenticación con opción de logout
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
- Dropdown aparece al hacer click cuando estás conectado
- Opciones: verificar estado y cerrar sesión
- Logout usa endpoint de Authentik (/outpost.goauthentik.io/sign_out)
- Desregistra Service Worker antes de logout
- Animación smooth del dropdown
- Flecha indicadora que rota al abrir/cerrar
- Diseño glassmorphism consistente con la app
2025-10-12 03:16:01 -06:00
cda4722a27 fix: desregistrar Service Worker al perder autenticación
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
- Desregistrar SW automáticamente cuando se detecta pérdida de auth
- Desregistrar SW antes de triggerAuth para evitar conflictos con Authentik
- Deshabilitar polling y listeners de visibility (causan errores de CORS)
- Confiar en detección reactiva de errores del musicStore
- Usar window.location.href en lugar de reload() para forzar navegación
2025-10-12 03:12:03 -06:00
fda5b2497a fix: mejorar detección de pérdida de autenticación con Authentik
All checks were successful
build-and-deploy / build (push) Successful in 24s
build-and-deploy / deploy (push) Successful in 3s
- Detectar errores "Failed to fetch" y "no response" como pérdida de auth
- Mejor logging para debugging de cambios de estado
- Manejar correctamente redirects 302 de Authentik en fetch
2025-10-12 03:06:08 -06:00
bca654dee4 vamos2
All checks were successful
build-and-deploy / build (push) Successful in 25s
build-and-deploy / deploy (push) Successful in 4s
2025-10-12 02:08:41 -06:00
98fb972a4e vamos
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
2025-10-12 00:59:50 -06:00
1f087eb6f3 indicador de conexion y logging
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 3s
2025-10-11 19:36:19 -06:00
c56f06034e seguimos
All checks were successful
build-and-deploy / build (push) Successful in 23s
build-and-deploy / deploy (push) Successful in 2s
2025-10-11 18:43:53 -06:00
811b525cfc seguimos con la seguridad
All checks were successful
build-and-deploy / build (push) Successful in 26s
build-and-deploy / deploy (push) Successful in 4s
2025-10-11 18:28:49 -06:00
d966fab4ca mejorando configuracion de seguridad
All checks were successful
build-and-deploy / build (push) Successful in 26s
build-and-deploy / deploy (push) Successful in 3s
2025-10-11 18:06:11 -06:00
100ba45f57 fix
All checks were successful
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Successful in 3s
2025-10-11 13:48:03 -06:00
36c1844cbd traefik + authentik labels
All checks were successful
build-and-deploy / build (push) Successful in 1m0s
build-and-deploy / deploy (push) Successful in 4s
2025-10-11 13:35:09 -06:00
e3e7374096 fix(runtime-config): resolver MUSIC_DIR en tiempo de ejecución y no hornearlo en build; endpoints usan env absoluto o public fallback
All checks were successful
build-and-deploy / build (push) Successful in 21s
build-and-deploy / deploy (push) Successful in 3s
2025-08-10 03:03:22 -06:00
81330de97e feat(pwa-offline): Pinia store + IndexedDB; contexto para cache/eliminación; toasts; compatibilidad PWA offline
All checks were successful
build-and-deploy / build (push) Successful in 40s
build-and-deploy / deploy (push) Successful in 4s
- Agrega @pinia/nuxt, idb y store central (stores/music.ts)
- Cacheo manual desde menú contextual y borrado (TrackContextMenu)
- Ícono verde para canciones cacheadas, sin auto-cache al reproducir
- Toasts de feedback (stores/toast.ts, ToastContainer)
- Fallback offline de listado a IndexedDB; fix MUSIC_DIR absoluto en preview/prod
- Ajustes PWA: navigateFallback '/', devOptions, workbox condicional
- Estilos y animación del context menu (tema light/dark, blur fuerte)
- Correcciones de sintaxis y posicionamiento exacto al cursor
2025-08-10 02:51:38 -06:00
ba70e0d280 mejoras de ui 3 2025-08-10 01:40:56 -06:00
bf7413b45f Fix 403 error when loading music files
- Fix path traversal security check by using absolute paths
- Remove problematic fetch override that forced JSON headers on all API requests
- Add error tracking and visual indicators for failed tracks
- Correct music directory resolution for both relative and absolute paths

The main issue was the security validation comparing relative paths incorrectly,
causing legitimate music file requests to be rejected with 403 errors.
2025-08-10 01:28:16 -06:00
d3d0811a9f mejoras de UI 2 2025-08-10 00:58:31 -06:00
493d236dc4 UI mejorada 2025-08-10 00:45:59 -06:00
2f878a857a Fix music file serving path to match Docker mount point
All checks were successful
build-and-deploy / build (push) Successful in 19s
build-and-deploy / deploy (push) Successful in 3s
2025-08-04 14:58:11 -06:00
f756457ea9 Fix music directory path to match Docker mount point
All checks were successful
build-and-deploy / build (push) Successful in 19s
build-and-deploy / deploy (push) Successful in 2s
2025-08-04 14:50:47 -06:00
c2ac2f02fd Remove music directory verification - skip check for containerized runner
All checks were successful
build-and-deploy / build (push) Successful in 19s
build-and-deploy / deploy (push) Successful in 2s
2025-08-04 14:31:16 -06:00
c2705c239b Change music directory check to verify content instead of mount point
Some checks failed
build-and-deploy / build (push) Successful in 19s
build-and-deploy / deploy (push) Failing after 1s
2025-08-04 14:28:50 -06:00
bd59e958f1 Add music directory mount verification before deployment
Some checks failed
build-and-deploy / build (push) Successful in 20s
build-and-deploy / deploy (push) Failing after 1s
2025-08-04 14:25:21 -06:00
7f9533cfcc Simplify deployment: use manual NAS mount instead of CIFS driver
All checks were successful
build-and-deploy / build (push) Successful in 19s
2025-08-04 14:23:05 -06:00
7fe30560ad Export NAS_PASSWORD directly in docker-compose command
Some checks failed
build-and-deploy / build (push) Successful in 19s
build-and-deploy / deploy (push) Failing after 1s
2025-08-04 14:12:12 -06:00
1fbcc91b08 Debug .env file content to troubleshoot NAS password issue
Some checks failed
build-and-deploy / build (push) Successful in 19s
build-and-deploy / deploy (push) Failing after 2s
2025-08-04 14:10:27 -06:00
b9db7d7c62 Add verbose output to environment file creation step
Some checks failed
build-and-deploy / build (push) Successful in 20s
build-and-deploy / deploy (push) Failing after 2s
2025-08-04 14:08:54 -06:00
c594aea78c Create .env file in CI/CD workflow for NAS authentication
Some checks failed
build-and-deploy / build (push) Successful in 20s
build-and-deploy / deploy (push) Failing after 2s
2025-08-04 14:03:59 -06:00
4417b3b42d Fix environment variables in CI/CD and remove obsolete docker-compose version
Some checks failed
build-and-deploy / build (push) Successful in 20s
build-and-deploy / deploy (push) Failing after 2s
2025-08-04 13:58:23 -06:00
fe91087875 Fix Node.js version compatibility for Nuxt 3.18.0
Some checks failed
build-and-deploy / build (push) Successful in 44s
build-and-deploy / deploy (push) Failing after 2s
2025-08-04 13:52:47 -06:00
f0ed200577 Add Docker deployment configuration and CI/CD pipeline
Some checks failed
build-and-deploy / build (push) Failing after 25s
build-and-deploy / deploy (push) Has been skipped
2025-08-04 13:51:09 -06:00
5e4256cdc5 Reduce animation intensity and remove distracting scale effects 2025-08-04 13:29:43 -06:00