feat: add an authenticated keepalive, to keep the UI session alive while playing songs
This commit is contained in:
parent
18c7397709
commit
b5dadf55f4
|
@ -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
|
||||||
|
|
|
@ -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 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue