feat(track): icon-based status badges, detect locally-cached tracks
Docker Build & Publish / build (push) Has been cancelled
Docker Build & Publish / push (push) Has been cancelled
Docker Build & Publish / Prune old image versions (push) Has been cancelled

Replace the labelled availability/metadata badges in track rows with
small icon+tooltip indicators (cloud/hard-drives/warning/etc, derived
from TrackAvailability and MetadataStatus).

Add a `connection` slice fed by a single status poller (Sidebar) so
other components can cheaply check backend reachability. TrackRow uses
this plus the offline audio cache to show "Local" instead of a stale
"On server" when the backend is down but the track is already cached.
This commit is contained in:
Senko-san
2026-06-13 18:00:48 +03:00
parent df8c67b368
commit 8ae447e08d
9 changed files with 174 additions and 9 deletions
+2
View File
@@ -1,6 +1,7 @@
import { configureStore } from '@reduxjs/toolkit';
import { api } from '../api';
import authReducer from './slices/auth';
import connectionReducer from './slices/connection';
import playerReducer from './slices/player';
import queueReducer from './slices/queue';
import uiReducer from './slices/ui';
@@ -11,6 +12,7 @@ export const store = configureStore({
reducer: {
[api.reducerPath]: api.reducer,
auth: authReducer,
connection: connectionReducer,
player: playerReducer,
queue: queueReducer,
ui: uiReducer,
+28
View File
@@ -0,0 +1,28 @@
import { createSlice, type PayloadAction } from '@reduxjs/toolkit';
export type ConnectionStatus =
| 'connected'
| 'connecting'
| 'disconnected'
| 'error';
export interface ConnectionState {
status: ConnectionStatus;
}
export const connectionInitialState: ConnectionState = {
status: 'connecting',
};
export const connectionSlice = createSlice({
name: 'connection',
initialState: connectionInitialState,
reducers: {
setConnectionStatus(state, action: PayloadAction<ConnectionStatus>) {
state.status = action.payload;
},
},
});
export const { setConnectionStatus } = connectionSlice.actions;
export default connectionSlice.reducer;