feat: add an authenticated keepalive, to keep the UI session alive while playing songs
This commit is contained in:
+3
-3
@@ -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 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user