[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
0

Configure Feed

Select the types of activity you want to include in your feed.

Prepare for reverse proxy usage #125

Not working correctly yet but no BC for regular, non suburl, usage

FoxxMD (Jan 19, 2024, 11:40 AM EST) 280add71 b34abcab

+24 -11
+2 -1
src/backend/ioc.ts
··· 75 75 sources: () => new ScrobbleSources(items.sourceEmitter, localUrl, items.configDir), 76 76 notifiers: () => new Notifiers(items.notifierEmitter, items.clientEmitter, items.sourceEmitter), 77 77 localUrl, 78 - hasDefinedBaseUrl: baseUrl !== undefined 78 + hasDefinedBaseUrl: baseUrl !== undefined, 79 + isSubPath: u.pathname !== '/' && u.pathname.length > 0 79 80 } 80 81 }); 81 82 }
+3
src/backend/server/index.ts
··· 71 71 } 72 72 } 73 73 74 + if(process.env.USE_HASH_ROUTER === undefined) { 75 + process.env.USE_HASH_ROUTER = root.get('isSubPath'); 76 + } 74 77 ViteExpress.config({mode: isProd ? 'production' : 'development'}); 75 78 try { 76 79 ViteExpress.listen(app, port, () => {
+10 -4
src/client/App.tsx
··· 1 1 import React from 'react'; 2 - import logo from './logo.svg'; 3 - import * as ReactDOM from "react-dom/client"; 4 2 import { 5 3 createBrowserRouter, 4 + createHashRouter, RouteObject, 6 5 RouterProvider, useLocation, 7 6 } from "react-router-dom"; 8 7 import {connect, ConnectedProps, Provider} from 'react-redux' ··· 25 24 ); 26 25 } 27 26 28 - const router = createBrowserRouter([ 27 + const routes: RouteObject[] = [ 29 28 { 30 29 path: "/", 31 30 element: <Dashboard />, ··· 46 45 path: "*", 47 46 element: <NoMatch/> 48 47 } 49 - ]); 48 + ]; 49 + 50 + const genRouter = () => { 51 + const useHashRouter = __USE_HASH_ROUTER__ === 'true'; 52 + return useHashRouter ? createHashRouter(routes) : createBrowserRouter(routes); 53 + } 54 + 55 + const router = genRouter(); 50 56 51 57 const mapDispatchToProps = (dispatch) => { 52 58 return {
+1 -1
src/client/deadLetter/deadLetterDucks.ts
··· 6 6 type DeadResponse = DeadLetterScrobble<JsonPlayObject, string>[]; 7 7 export const deadApi = createApi({ 8 8 reducerPath: 'deadApi', 9 - baseQuery: fetchBaseQuery({baseUrl: '/api/'}), 9 + baseQuery: fetchBaseQuery({baseUrl: './api/'}), 10 10 tagTypes: ['DeadLetters'], 11 11 endpoints: (builder) => ({ 12 12 getDead: builder.query<DeadResponse, { name: string, type: string }>({
+1 -1
src/client/logs/logsApi.ts
··· 3 3 4 4 export const logsApi = createApi({ 5 5 reducerPath: 'logsApi', 6 - baseQuery: fetchBaseQuery({ baseUrl: '/api/' }), 6 + baseQuery: fetchBaseQuery({ baseUrl: './api/' }), 7 7 endpoints: (builder) => ({ 8 8 getLogs: builder.query<{ data: LogInfoJson[], settings: LogOutputConfig }, undefined>({ 9 9 query: () => `logs`,
+1 -1
src/client/recent/recentDucks.ts
··· 4 4 type RecentResponse = (JsonPlayObject & { index: number })[]; 5 5 export const recentApi = createApi({ 6 6 reducerPath: 'recentApi', 7 - baseQuery: fetchBaseQuery({ baseUrl: '/api/' }), 7 + baseQuery: fetchBaseQuery({ baseUrl: './api/' }), 8 8 endpoints: (builder) => ({ 9 9 getRecent: builder.query<RecentResponse, {name: string, type: string}>({ 10 10 query: (params) => `recent?name=${params.name}&type=${params.type}`,
+1 -1
src/client/scrobbled/scrobbledDucks.ts
··· 4 4 type ScrobbledResponse = (JsonPlayObject & { index: number })[]; 5 5 export const scrobbledApi = createApi({ 6 6 reducerPath: 'scrobbledApi', 7 - baseQuery: fetchBaseQuery({ baseUrl: '/api/' }), 7 + baseQuery: fetchBaseQuery({ baseUrl: './api/' }), 8 8 endpoints: (builder) => ({ 9 9 getRecent: builder.query<ScrobbledResponse, {name: string, type: string}>({ 10 10 query: (params) => `scrobbled?name=${params.name}&type=${params.type}`,
+1 -1
src/client/status/statusApi.ts
··· 3 3 4 4 export const statusApi = createApi({ 5 5 reducerPath: 'statusApi', 6 - baseQuery: fetchBaseQuery({ baseUrl: '/api/' }), 6 + baseQuery: fetchBaseQuery({ baseUrl: './api/' }), 7 7 endpoints: (builder) => ({ 8 8 getStatus: builder.query<{ sources: SourceStatusData[], clients: ClientStatusData[] }, undefined>({ 9 9 query: () => `status`,
+1
src/client/vite-env.d.ts
··· 1 1 /// <reference types="vite/client" /> 2 2 declare const __APP_VERSION__: string 3 + declare const __USE_HASH_ROUTER__: bool
+3 -1
vite.config.ts
··· 3 3 4 4 export default defineConfig(() => { 5 5 return { 6 + base: (process.env.BASE_URL ?? '/'), 6 7 plugins: [react()], 7 8 build: { 8 9 sourcemap: true 9 10 }, 10 11 define: { 11 - "__APP_VERSION__": JSON.stringify((process.env.APP_VERSION ?? 'Unknown').toString()) 12 + "__APP_VERSION__": JSON.stringify((process.env.APP_VERSION ?? 'Unknown').toString()), 13 + "__USE_HASH_ROUTER__": JSON.stringify((process.env.USE_HASH_ROUTER ?? false)) 12 14 } 13 15 }; 14 16 });