feat: add an authenticated keepalive, to keep the UI session alive while playing songs

This commit is contained in:
Deluan 2020-02-05 13:16:11 -05:00
parent 18c7397709
commit b5dadf55f4
2 changed files with 7 additions and 4 deletions

View File

@ -32,9 +32,6 @@ func (app *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
func (app *Router) routes() http.Handler { func (app *Router) routes() http.Handler {
r := chi.NewRouter() r := chi.NewRouter()
// Basic unauthenticated ping
r.Get("/ping", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`{"response":"pong"}`)) })
r.Post("/login", Login(app.ds)) r.Post("/login", Login(app.ds))
r.Post("/createAdmin", CreateAdmin(app.ds)) r.Post("/createAdmin", CreateAdmin(app.ds))
@ -45,6 +42,9 @@ func (app *Router) routes() http.Handler {
app.R(r, "/song", model.MediaFile{}) app.R(r, "/song", model.MediaFile{})
app.R(r, "/album", model.Album{}) app.R(r, "/album", model.Album{})
app.R(r, "/artist", model.Artist{}) app.R(r, "/artist", model.Artist{})
// Keepalive endpoint to be used to keep the session valid (ex: while playing songs)
r.Get("/keepalive/*", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`{"response":"ok"}`)) })
}) })
// Serve UI app assets // Serve UI app assets

View File

@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import { fetchUtils, useAuthState } from 'react-admin' import { fetchUtils, useAuthState, useDataProvider } from 'react-admin'
import ReactJkMusicPlayer from 'react-jinke-music-player' import ReactJkMusicPlayer from 'react-jinke-music-player'
import 'react-jinke-music-player/assets/index.css' import 'react-jinke-music-player/assets/index.css'
import { markScrobbled, syncQueue } from './queue' import { markScrobbled, syncQueue } from './queue'
@ -38,6 +38,7 @@ const addQueueToOptions = (queue) => {
} }
const Player = () => { const Player = () => {
const dataProvider = useDataProvider()
const dispatch = useDispatch() const dispatch = useDispatch()
const queue = useSelector((state) => state.queue) const queue = useSelector((state) => state.queue)
const options = addQueueToOptions(queue) const options = addQueueToOptions(queue)
@ -68,6 +69,8 @@ const Player = () => {
fetchUtils.fetchJson( fetchUtils.fetchJson(
`/rest/scrobble?u=admin&p=enc:73756e6461&f=json&v=1.8.0&c=NavidromeUI&id=${info.id}&submission=false` `/rest/scrobble?u=admin&p=enc:73756e6461&f=json&v=1.8.0&c=NavidromeUI&id=${info.id}&submission=false`
) )
//
dataProvider.getOne('keepalive', { id: info.id })
} }
} }