diff --git a/server/app/app.go b/server/app/app.go index 638d8883b..6343d01ec 100644 --- a/server/app/app.go +++ b/server/app/app.go @@ -32,9 +32,6 @@ func (app *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (app *Router) routes() http.Handler { 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("/createAdmin", CreateAdmin(app.ds)) @@ -45,6 +42,9 @@ func (app *Router) routes() http.Handler { app.R(r, "/song", model.MediaFile{}) app.R(r, "/album", model.Album{}) 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 diff --git a/ui/src/player/Player.js b/ui/src/player/Player.js index 412bab22f..3c80239ce 100644 --- a/ui/src/player/Player.js +++ b/ui/src/player/Player.js @@ -1,6 +1,6 @@ import React from 'react' 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 'react-jinke-music-player/assets/index.css' import { markScrobbled, syncQueue } from './queue' @@ -38,6 +38,7 @@ const addQueueToOptions = (queue) => { } const Player = () => { + const dataProvider = useDataProvider() const dispatch = useDispatch() const queue = useSelector((state) => state.queue) const options = addQueueToOptions(queue) @@ -68,6 +69,8 @@ const Player = () => { fetchUtils.fetchJson( `/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 }) } }