[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.

refactor(storybook): More re-organizing

FoxxMD (Jun 30, 2026, 10:47 PM UTC) 9d105173 3e7bbab5

+44 -43
+9 -9
src/stories/ActivityDetails.stories.tsx src/stories/plays/ActivityDetails.stories.tsx
··· 1 - import preview from "../../.storybook/preview.js"; 1 + import preview from "../../../.storybook/preview.js"; 2 2 import React from 'react'; 3 3 4 4 import { fn } from 'storybook/test'; 5 5 import { Container } from '@chakra-ui/react'; 6 - import { ActivityTimeline } from "../client/components/ActivityTimeline"; 7 - import {Provider} from "../client/components/Provider"; 8 - import { generateJsonPlays } from "../core/PlayTestUtils.js"; 9 - import { generatePlayApiCommonDetailed } from "../core/tests/utils/apiFixtures.js"; 10 - import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../core/tests/utils/fixtures.js"; 11 - import { asJsonPlayObject } from '../core/PlayMarshalUtils.js'; 12 - import { ActivityDetails } from "../client/components/ActivityDetail.js"; 6 + import { ActivityTimeline } from "../../client/components/ActivityTimeline.js"; 7 + import {Provider} from "../../client/components/Provider.js"; 8 + import { generateJsonPlays } from "../../core/PlayTestUtils.js"; 9 + import { generatePlayApiCommonDetailed } from "../../core/tests/utils/apiFixtures.js"; 10 + import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../../core/tests/utils/fixtures.js"; 11 + import { asJsonPlayObject } from '../../core/PlayMarshalUtils.js'; 12 + import { ActivityDetails } from "../../client/components/ActivityDetail.js"; 13 13 14 14 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 15 15 const meta = preview.meta({ 16 - title: 'Examples/ActivityDetails', 16 + title: 'Plays/Details', 17 17 component: ActivityDetails, 18 18 parameters: { 19 19 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+5 -5
src/stories/Logs.stories.tsx src/stories/logs/Logs.stories.tsx
··· 1 - import preview from "../../.storybook/preview.js"; 1 + import preview from "../../../.storybook/preview.js"; 2 2 import React from 'react'; 3 3 4 4 import { Container, Box } from '@chakra-ui/react'; 5 - import { Logs } from "../client/components/LogsNext"; 6 - import {Provider} from "../client/components/Provider"; 7 - import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../core/tests/utils/apiFixtures.js"; 5 + import { Logs } from "../../client/components/LogsNext.js"; 6 + import {Provider} from "../../client/components/Provider.js"; 7 + import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; 8 8 9 9 const traceMessage = "[2026-06-16 13:02:42.674 -0400] \u001b[90mTRACE\u001b[39m : \u001b[36m\u001b[90m[App]\u001b[36m \u001b[90m[Scrobblers]\u001b[36m \u001b[90m[Koito - koito]\u001b[36m \u001b[90m[Now Playing]\u001b[36m Not updating, previous matches current update --BUT-- time since last update (194s) is less than max threshold 238.121s\u001b[39m"; 10 10 const debugMessage = "[2026-06-16 13:03:20.150 -0400] \u001b[34mDEBUG\u001b[39m : \u001b[36m\u001b[90m[App]\u001b[36m \u001b[90m[Sources]\u001b[36m \u001b[90m[Spotify - default]\u001b[36m Temporarily decreasing polling interval to 1.00s due to Player c98a8fb80e-foxx-arch-SingleUser reporting track duration remaining (2.01s) less than normal interval (10.00s)\u001b[39m"; ··· 16 16 17 17 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 18 18 const meta = preview.meta({ 19 - title: 'Examples/Logs', 19 + title: 'Logs/Log Lines', 20 20 component: Logs, 21 21 parameters: { 22 22 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+6 -6
src/stories/LogsFetchable.stories.tsx src/stories/logs/LogsFetchable.stories.tsx
··· 1 - import preview from "../../.storybook/preview.js"; 1 + import preview from "../../../.storybook/preview.js"; 2 2 import React from 'react'; 3 3 import { http, HttpResponse, delay } from 'msw'; 4 4 5 5 import { Container, Box } from '@chakra-ui/react'; 6 - import { Logs, LogsFetchable } from "../client/components/LogsNext"; 7 - import {Provider} from "../client/components/Provider"; 8 - import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../core/tests/utils/apiFixtures.js"; 9 - import { RightHeaderFloatingLogs } from "../client/components/AppHeader.js"; 6 + import { Logs, LogsFetchable } from "../../client/components/LogsNext.js"; 7 + import {Provider} from "../../client/components/Provider.js"; 8 + import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; 9 + import { RightHeaderFloatingLogs } from "../../client/components/AppHeader.js"; 10 10 11 11 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 12 12 const meta = preview.meta({ 13 - title: 'Examples/Logs Window', 13 + title: 'Logs/Floating Panel', 14 14 component: RightHeaderFloatingLogs, 15 15 parameters: { 16 16 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+9 -9
src/stories/Player.stories.tsx src/stories/component/Player.stories.tsx
··· 1 - import preview from "../../.storybook/preview.js"; 1 + import preview from "../../../.storybook/preview.js"; 2 2 import React from 'react'; 3 3 import { http, HttpResponse, delay, sse } from 'msw'; 4 4 5 5 import { Container } from '@chakra-ui/react'; 6 - import { ChakraPlayer, ChakraPlayerFetchable } from "../client/components/chakraPlayer/Player"; 7 - import {Provider} from "../client/components/Provider"; 8 - import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../core/tests/utils/apiFixtures.js"; 9 - import { MsSseEvent } from "../core/Api.js"; 6 + import { ChakraPlayer, ChakraPlayerFetchable } from "../../client/components/chakraPlayer/Player.js"; 7 + import {Provider} from "../../client/components/Provider.js"; 8 + import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; 9 + import { MsSseEvent } from "../../core/Api.js"; 10 10 import { SSEProvider } from "@flamefrontend/sse-runtime-react"; 11 - import { sseProviderOptions } from "../client/AppNext.js"; 11 + import { sseProviderOptions } from "../../client/AppNext.js"; 12 12 import dayjs from "dayjs"; 13 - import { asJsonPlayObject } from "../core/PlayMarshalUtils.js"; 14 - import { generatePlay } from "../core/PlayTestUtils.js"; 13 + import { asJsonPlayObject } from "../../core/PlayMarshalUtils.js"; 14 + import { generatePlay } from "../../core/PlayTestUtils.js"; 15 15 16 16 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 17 17 const meta = preview.meta({ 18 - title: 'Examples/Player', 18 + title: 'Component/Player', 19 19 component: ChakraPlayer, 20 20 parameters: { 21 21 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/activities/ActivityList.stories.tsx src/stories/plays/ActivityList.stories.tsx
··· 24 24 25 25 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 26 26 const meta = preview.meta({ 27 - title: 'Activities/List', 27 + title: 'Plays/List', 28 28 component: ActivityList, 29 29 parameters: { 30 30 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/activities/ActivityListSkeleton.stories.tsx src/stories/plays/ActivityListSkeleton.stories.tsx
··· 10 10 11 11 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 12 12 const meta = preview.meta({ 13 - title: 'Activities/List Skeleton', 13 + title: 'Plays/List Skeleton', 14 14 component: ActivitySummarySkeleton 15 15 , 16 16 parameters: {
+1 -1
src/stories/activities/ListFilters.stories.tsx src/stories/plays/ListFilters.stories.tsx
··· 11 11 12 12 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 13 13 const meta = preview.meta({ 14 - title: 'Activities/List Filters/Play State', 14 + title: 'Plays/List Filters/Play State', 15 15 component: PlayStateFilter, 16 16 parameters: { 17 17 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/activities/listFilters/PlayDateRange.stories.tsx src/stories/plays/listFilters/PlayDateRange.stories.tsx
··· 9 9 10 10 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 11 11 const meta = preview.meta({ 12 - title: 'Activities/List Filters/Play Date Range', 12 + title: 'Plays/List Filters/Play Date Range', 13 13 component: PlayDateRangeFilter, 14 14 parameters: { 15 15 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/activities/listFilters/PlayPhrase.stories.tsx src/stories/plays/listFilters/PlayPhrase.stories.tsx
··· 9 9 10 10 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 11 11 const meta = preview.meta({ 12 - title: 'Activities/List Filters/Phrase', 12 + title: 'Plays/List Filters/Phrase', 13 13 component: PhraseFilter, 14 14 parameters: { 15 15 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/staticComponents/ErrorAlert.stories.tsx src/stories/miscComponents/ErrorAlert.stories.tsx
··· 32 32 }; 33 33 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 34 34 const meta = preview.type<{args: PropsAndCustomArgs}>().meta({ 35 - title: 'Static Components/Error Alert', 35 + title: 'Misc Components/Error Alert', 36 36 component: ErrorAlert, 37 37 parameters: { 38 38 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/staticComponents/MobileNavbar.stories.tsx src/stories/miscComponents/MobileNavbar.stories.tsx
··· 8 8 9 9 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 10 10 const meta = preview.meta({ 11 - title: 'Static Components/Mobile Sidebar', 11 + title: 'Misc Components/Mobile Sidebar', 12 12 component: MobileSidebarNav, 13 13 parameters: { 14 14 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/staticComponents/NavbarItems.stories.tsx src/stories/miscComponents/NavbarItems.stories.tsx
··· 9 9 10 10 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 11 11 const meta = preview.meta({ 12 - title: 'Static Components/Navbar Items', 12 + title: 'Misc Components/Navbar Items', 13 13 component: SideNavItems, 14 14 parameters: { 15 15 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/staticComponents/PlayInfo.stories.tsx src/stories/plays/PlayInfo.stories.tsx
··· 18 18 }; 19 19 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 20 20 const meta = preview.type<{args: PropsAndCustomArgs}>().meta({ 21 - title: 'Static Components/Play Info', 21 + title: 'Plays/Play Info', 22 22 component: PlayData, 23 23 parameters: { 24 24 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/timelines/ActivityTimeline.stories.tsx src/stories/plays/ActivityTimeline.stories.tsx
··· 12 12 13 13 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 14 14 const meta = preview.meta({ 15 - title: 'Timelines/Play', 15 + title: 'Plays/Timeline', 16 16 component: ActivityTimeline, 17 17 parameters: { 18 18 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+1 -1
src/stories/timelines/TransformSteps.stories.tsx src/stories/plays/TransformSteps.stories.tsx
··· 11 11 12 12 // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export 13 13 const meta = preview.meta({ 14 - title: 'Timelines/Play Transform Steps', 14 + title: 'Plays/Transform Timeline', 15 15 component: TransformSteps, 16 16 parameters: { 17 17 // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
+4 -3
src/stories/tsconfig.json
··· 17 17 ], 18 18 }, 19 19 "include": [ 20 - "*.stories.ts", 20 + "*.stories.tsx", 21 + "**/*.stories.tsx", 21 22 "*.tsx", 22 - "..src/client/**/*.tsx", 23 - "..src/backend/tests/**/*.ts" 23 + "../src/client/**/*.tsx", 24 + "../src/backend/tests/**/*.ts" 24 25 ], 25 26 "exclude": [ 26 27 "node_modules"