A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

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

chore: reorganise

+88 -88
+1 -1
deno.jsonc
··· 34 34 35 35 // Paths 36 36 "@common/": "./src/common/", 37 - "@component/": "./src/component/", 37 + "@components/": "./src/components/", 38 38 39 39 // Build 40 40 "@std/fs": "jsr:@std/fs@^1.0.19",
+1 -1
src/common/index.js
··· 1 1 // import * as Uint8 from "uint8arrays"; 2 2 3 3 /** 4 - * @import {Track} from "@component/core/types.d.ts" 4 + * @import {Track} from "@components/core/types.d.ts" 5 5 */ 6 6 7 7 /**
src/component/configurator/common.js src/components/configurator/common.js
+1 -1
src/component/configurator/input/worker.js src/components/configurator/input/worker.js
··· 5 5 import { use } from "@common/worker.js"; 6 6 7 7 /** 8 - * @import { GroupConsult, InputActions as Actions, Track } from "@component/core/types.d.ts"; 8 + * @import { GroupConsult, InputActions as Actions, Track } from "@components/core/types.d.ts"; 9 9 */ 10 10 11 11 ////////////////////////////////////////////
src/component/core/types.d.ts src/components/core/types.d.ts
src/component/engine/audio/element.js src/components/engine/audio/element.js
src/component/engine/audio/types.d.ts src/components/engine/audio/types.d.ts
+1 -1
src/component/engine/queue/element.js src/components/engine/queue/element.js
··· 19 19 20 20 // Setup worker 21 21 const name = `diffuse/engine/queue/${this.group}`; 22 - const url = "/component/engine/queue/worker.js"; 22 + const url = "/components/engine/queue/worker.js"; 23 23 24 24 let port; 25 25
+1 -1
src/component/engine/queue/types.d.ts src/components/engine/queue/types.d.ts
··· 1 - import type { Track, TrackStats, TrackTags } from "@component/core/types.d.ts"; 1 + import type { Track, TrackStats, TrackTags } from "@components/core/types.d.ts"; 2 2 import type { SignalReader } from "@common/signal.d.ts"; 3 3 4 4 export type Actions = {
+1 -1
src/component/engine/queue/worker.js src/components/engine/queue/worker.js
··· 4 4 5 5 /** 6 6 * @import {Actions, Item} from "./types.d.ts" 7 - * @import {Track} from "@component/core/types.d.ts" 7 + * @import {Track} from "@components/core/types.d.ts" 8 8 */ 9 9 10 10 const QUEUE_SIZE = 25;
src/component/input/common.js src/components/input/common.js
+1 -1
src/component/input/opensubsonic/common.js src/components/input/opensubsonic/common.js
··· 8 8 /** 9 9 * @import {Child} from "subsonic-api" 10 10 * @import {Server} from "./types.d.ts"; 11 - * @import {Track} from "@component/core/types.d.ts"; 11 + * @import {Track} from "@components/core/types.d.ts"; 12 12 */ 13 13 14 14 /**
+1 -1
src/component/input/opensubsonic/constants.js src/components/input/opensubsonic/constants.js
··· 1 - export const IDB_PREFIX = "@component/input/opensubsonic"; 1 + export const IDB_PREFIX = "@components/input/opensubsonic"; 2 2 export const IDB_SERVERS = `${IDB_PREFIX}/servers`; 3 3 export const SCHEME = "opensubsonic";
+2 -2
src/component/input/opensubsonic/element.js src/components/input/opensubsonic/element.js
··· 2 2 import { use } from "@common/worker.js"; 3 3 4 4 /** 5 - * @import {InputActions} from "@component/core/types.d.ts" 5 + * @import {InputActions} from "@components/core/types.d.ts" 6 6 */ 7 7 8 8 //////////////////////////////////////////// ··· 18 18 19 19 // Setup worker 20 20 const name = `diffuse/input/opensubsonic/${this.group}`; 21 - const url = "/component/input/opensubsonic/worker.js"; 21 + const url = "/components/input/opensubsonic/worker.js"; 22 22 const worker = new Worker(url, { name, type: "module" }); 23 23 24 24 // Worker proxy
src/component/input/opensubsonic/types.d.ts src/components/input/opensubsonic/types.d.ts
+1 -1
src/component/input/opensubsonic/worker.js src/components/input/opensubsonic/worker.js
··· 19 19 20 20 /** 21 21 * @import {Child, SubsonicAPI} from "subsonic-api" 22 - * @import {ConsultGrouping, InputActions as Actions, Track} from "@component/core/types.d.ts"; 22 + * @import {ConsultGrouping, InputActions as Actions, Track} from "@components/core/types.d.ts"; 23 23 * @import {Server} from "./types.d.ts" 24 24 */ 25 25
+1 -1
src/component/input/s3/common.js src/components/input/s3/common.js
··· 6 6 import { ENCODINGS, IDB_BUCKETS, SCHEME } from "./constants.js"; 7 7 8 8 /** 9 - * @import { Track } from "@component/core/types.d.ts"; 9 + * @import { Track } from "@components/core/types.d.ts"; 10 10 * @import { Bucket } from "./types.d.ts"; 11 11 */ 12 12
+1 -1
src/component/input/s3/constants.js src/components/input/s3/constants.js
··· 1 - export const IDB_PREFIX = "@component/input/s3"; 1 + export const IDB_PREFIX = "@components/input/s3"; 2 2 export const IDB_BUCKETS = `${IDB_PREFIX}/buckets`; 3 3 export const SCHEME = "s3"; 4 4
src/component/input/s3/types.d.ts src/components/input/s3/types.d.ts
+2 -2
src/component/input/s3/worker.js src/components/input/s3/worker.js
··· 1 - import { isAudioFile } from "@component/input/common.js"; 1 + import { isAudioFile } from "@components/input/common.js"; 2 2 import { 3 3 bucketId, 4 4 bucketsFromTracks, ··· 12 12 import { SCHEME } from "./constants.js"; 13 13 14 14 /** 15 - * @import { InputActions as Actions, Track } from "@component/core/types.d.ts"; 15 + * @import { InputActions as Actions, Track } from "@components/core/types.d.ts"; 16 16 * @import { Bucket } from "./types.d.ts" 17 17 */ 18 18
+2 -2
src/component/orchestrator/process-tracks/element.js src/components/orchestrator/process-tracks/element.js
··· 4 4 import { signal } from "@common/signal.js"; 5 5 6 6 /** 7 - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" 7 + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" 8 8 */ 9 9 10 10 //////////////////////////////////////////// ··· 26 26 /** @type {OutputElement} */ 27 27 this.output = query(this, "output-selector"); 28 28 29 - /** @type {import("@component/processor/metadata/element.js").CLASS} */ 29 + /** @type {import("@components/processor/metadata/element.js").CLASS} */ 30 30 this.metadataProcessor = query(this, "metadata-processor-selector"); 31 31 } 32 32
+3 -3
src/component/orchestrator/queue-audio/element.js src/components/orchestrator/queue-audio/element.js
··· 2 2 import { untracked } from "@common/signal.js"; 3 3 4 4 /** 5 - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" 5 + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" 6 6 */ 7 7 8 8 //////////////////////////////////////////// ··· 23 23 /** @type {InputElement} */ 24 24 this.input = query(this, "input-selector"); 25 25 26 - /** @type {import("@component/engine/audio/element.js").CLASS} */ 26 + /** @type {import("@components/engine/audio/element.js").CLASS} */ 27 27 this.audio = query(this, "audio-engine-selector"); 28 28 29 - /** @type {import("@component/engine/queue/element.js").CLASS} */ 29 + /** @type {import("@components/engine/queue/element.js").CLASS} */ 30 30 this.queue = query(this, "queue-engine-selector"); 31 31 } 32 32
+2 -2
src/component/orchestrator/queue-tracks/element.js src/components/orchestrator/queue-tracks/element.js
··· 2 2 import { untracked } from "@common/signal.js"; 3 3 4 4 /** 5 - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" 5 + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" 6 6 */ 7 7 8 8 //////////////////////////////////////////// ··· 24 24 /** @type {OutputElement} */ 25 25 this.output = query(this, "output-selector"); 26 26 27 - /** @type {import("@component/engine/queue/element.js").CLASS} */ 27 + /** @type {import("@components/engine/queue/element.js").CLASS} */ 28 28 this.queue = query(this, "queue-engine-selector"); 29 29 } 30 30
+2 -2
src/component/orchestrator/search-tracks/element.js src/components/orchestrator/search-tracks/element.js
··· 1 1 import { DiffuseElement, query } from "@common/element.js"; 2 2 3 3 /** 4 - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" 4 + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" 5 5 */ 6 6 7 7 //////////////////////////////////////////// ··· 23 23 /** @type {OutputElement} */ 24 24 this.output = query(this, "output-selector"); 25 25 26 - /** @type {import("@component/processor/search/element.js").CLASS} */ 26 + /** @type {import("@components/processor/search/element.js").CLASS} */ 27 27 this.search = query(this, "search-processor-selector"); 28 28 } 29 29
+1 -1
src/component/output/common.js src/components/output/common.js
··· 1 1 import { effect, signal } from "@common/signal.js"; 2 2 3 3 /** 4 - * @import {OutputManager, Track} from "@component/core/types.d.ts" 4 + * @import {OutputManager, Track} from "@components/core/types.d.ts" 5 5 */ 6 6 7 7 /**
-1
src/component/output/indexed-db/constants.js
··· 1 - export const IDB_PREFIX = "@component/output/indexed-db";
+2 -2
src/component/output/indexed-db/element.js src/components/output/indexed-db/element.js
··· 3 3 import { outputManager } from "../common.js"; 4 4 5 5 /** 6 - * @import {OutputActions, OutputManager, Track} from "@component/core/types.d.ts" 6 + * @import {OutputActions, OutputManager, Track} from "@components/core/types.d.ts" 7 7 */ 8 8 9 9 //////////////////////////////////////////// ··· 19 19 20 20 // Setup worker 21 21 const name = `diffuse/output/indexed-db/${this.group}`; 22 - const url = "/component/output/indexed-db/worker.js"; 22 + const url = "/components/output/indexed-db/worker.js"; 23 23 const worker = new Worker(url, { name, type: "module" }); 24 24 25 25 // Manager
+1 -1
src/component/output/indexed-db/worker.js src/components/output/indexed-db/worker.js
··· 5 5 import { define, ostiary } from "@common/worker.js"; 6 6 7 7 /** 8 - * @import {OutputActions, Track} from "@component/core/types.d.ts"; 8 + * @import {OutputActions, Track} from "@components/core/types.d.ts"; 9 9 */ 10 10 11 11 ////////////////////////////////////////////
-2
src/component/processor/artwork/constants.js
··· 1 - export const IDB_PREFIX = "@component/processor/artwork"; 2 - export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/cache`;
src/component/processor/artwork/element.js src/components/processor/artwork/element.js
+1 -1
src/component/processor/artwork/types.d.ts src/components/processor/artwork/types.d.ts
··· 1 - import type { TrackTags } from "@component/core/types.d.ts"; 1 + import type { TrackTags } from "@components/core/types.d.ts"; 2 2 3 3 export type Actions = { 4 4 artwork(request: ArtworkRequest): Promise<Artwork[]>;
src/component/processor/artwork/worker.js src/components/processor/artwork/worker.js
+1 -1
src/component/processor/metadata/common.js src/components/processor/metadata/common.js
··· 4 4 import { tokenizer as rangeTokenizer } from "@tokenizer/range"; 5 5 6 6 /** 7 - * @import { TrackStats, TrackTags } from "@component/core/types.d.ts"; 7 + * @import { TrackStats, TrackTags } from "@components/core/types.d.ts"; 8 8 * @import { Extraction, Urls } from "./types.d.ts"; 9 9 */ 10 10
+1 -1
src/component/processor/metadata/element.js src/components/processor/metadata/element.js
··· 18 18 19 19 // Setup worker 20 20 const name = `diffuse/processor/metadata/${this.group}`; 21 - const url = "/component/processor/metadata/worker.js"; 21 + const url = "/components/processor/metadata/worker.js"; 22 22 const worker = new Worker(url, { name, type: "module" }); 23 23 24 24 // Worker proxy
+1 -1
src/component/processor/metadata/types.d.ts src/components/processor/metadata/types.d.ts
··· 1 1 import type { IPicture } from "music-metadata"; 2 - import type { TrackStats, TrackTags } from "@component/core/types.d.ts"; 2 + import type { TrackStats, TrackTags } from "@components/core/types.d.ts"; 3 3 4 4 export type Actions = { 5 5 supply: (
src/component/processor/metadata/worker.js src/components/processor/metadata/worker.js
src/component/processor/search/constants.js src/components/processor/search/constants.js
+1 -1
src/component/processor/search/element.js src/components/processor/search/element.js
··· 18 18 19 19 // Setup worker 20 20 const name = `diffuse/processor/search/${this.group}`; 21 - const url = "/component/processor/search/worker.js"; 21 + const url = "/components/processor/search/worker.js"; 22 22 23 23 let port; 24 24
+1 -1
src/component/processor/search/types.d.ts src/components/processor/search/types.d.ts
··· 1 - import type { Track } from "@component/core/types.d.ts"; 1 + import type { Track } from "@components/core/types.d.ts"; 2 2 3 3 export type Actions = { 4 4 search(term: string): Promise<Track[]>;
+1 -1
src/component/processor/search/worker.js src/components/processor/search/worker.js
··· 7 7 import { signal } from "@common/signal.js"; 8 8 9 9 /** 10 - * @import {Track} from "@component/core/types.d.ts" 10 + * @import {Track} from "@components/core/types.d.ts" 11 11 * @import {Actions} from "./types.d.ts" 12 12 */ 13 13
+1
src/components/output/indexed-db/constants.js
··· 1 + export const IDB_PREFIX = "@components/output/indexed-db";
+2
src/components/processor/artwork/constants.js
··· 1 + export const IDB_PREFIX = "@components/processor/artwork"; 2 + export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/cache`;
+13 -13
src/index.vto
··· 2 2 layout: layouts/diffuse.vto 3 3 4 4 themes: 5 - - url: "theme/blur/" 5 + - url: "themes/blur/" 6 6 title: "Blur" 7 - - url: "theme/webamp/" 7 + - url: "themes/webamp/" 8 8 title: "Webamp" 9 9 10 10 engines: 11 - - url: "component/engine/audio/element.js" 11 + - url: "components/engine/audio/element.js" 12 12 title: "Audio" 13 - - url: "component/engine/queue/element.js" 13 + - url: "components/engine/queue/element.js" 14 14 title: "Queue" 15 15 16 16 input: 17 - - url: "component/input/opensubsonic/element.js" 17 + - url: "components/input/opensubsonic/element.js" 18 18 title: "Opensubsonic" 19 - - url: "component/input/s3/element.js" 19 + - url: "components/input/s3/element.js" 20 20 title: "S3 (TODO)" 21 21 22 22 orchestrators: 23 - - url: "component/orchestrator/process-tracks/element.js" 23 + - url: "components/orchestrator/process-tracks/element.js" 24 24 title: "Process inputs into tracks" 25 - - url: "component/orchestrator/queue-audio/element.js" 25 + - url: "components/orchestrator/queue-audio/element.js" 26 26 title: "Queue ⭤ Audio" 27 - - url: "component/orchestrator/queue-tracks/element.js" 27 + - url: "components/orchestrator/queue-tracks/element.js" 28 28 title: "Queue ⭤ Tracks" 29 29 30 30 output: 31 - - url: "component/output/indexed-db/element.js" 31 + - url: "components/output/indexed-db/element.js" 32 32 title: "IndexedDB" 33 33 34 34 processors: 35 - - url: "component/processor/artwork/element.js" 35 + - url: "components/processor/artwork/element.js" 36 36 title: "Artwork" 37 - - url: "component/processor/metadata/element.js" 37 + - url: "components/processor/metadata/element.js" 38 38 title: "Metadata" 39 - - url: "component/processor/search/element.js" 39 + - url: "components/processor/search/element.js" 40 40 title: "Search" 41 41 42 42 ---
+1 -1
src/mod.ts
··· 1 - export * from "./component/engine/audio/element.js"; 1 + export * from "./components/engine/audio/element.js";
src/theme/blur/artwork-controller/_applet.astro src/themes/blur/artwork-controller/_applet.astro
src/theme/blur/index.css src/themes/blur/index.css
-26
src/theme/blur/index.js
··· 1 - import "@component/engine/audio/element.js"; 2 - import "@component/input/opensubsonic/element.js"; 3 - import "@component/orchestrator/process-tracks/element.js"; 4 - import "@component/orchestrator/queue-audio/element.js"; 5 - import "@component/orchestrator/queue-tracks/element.js"; 6 - import "@component/processor/metadata/element.js"; 7 - 8 - import * as Output from "@component/output/indexed-db/element.js"; 9 - import * as Queue from "@component/engine/queue/element.js"; 10 - 11 - import { component } from "@common/element.js"; 12 - import { effect } from "@common/signal.js"; 13 - 14 - /** 15 - * @import {Item} from "@component/engine/queue/types.d.ts" 16 - */ 17 - 18 - const output = component(Output); 19 - const queue = component(Queue); 20 - 21 - globalThis.output = output; 22 - globalThis.queue = queue; 23 - 24 - effect(() => { 25 - console.log("Active queue item:", queue.now()); 26 - });
src/theme/blur/index.vto src/themes/blur/index.vto
src/theme/blur/variables.css src/themes/blur/variables.css
src/theme/webamp/98-vars.css src/themes/webamp/98-vars.css
+2 -2
src/theme/webamp/browser/element.js src/themes/webamp/browser/element.js
··· 2 2 3 3 /** 4 4 * @import {RenderArg} from "@common/element.d.ts" 5 - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" 5 + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" 6 6 */ 7 7 8 8 class Browser extends DiffuseElement { ··· 18 18 /** @type {OutputElement} */ 19 19 this.output = query(this, "output-selector"); 20 20 21 - /** @type {import("@component/engine/queue/element.js").CLASS} */ 21 + /** @type {import("@components/engine/queue/element.js").CLASS} */ 22 22 this.queue = query(this, "queue-selector"); 23 23 24 24 /** @type {import("../webamp.js").CLASS} */
src/theme/webamp/index.css src/themes/webamp/index.css
+7 -7
src/theme/webamp/index.js src/themes/webamp/index.js
··· 1 1 import deepDiff from "@fry69/deep-diff"; 2 2 3 - // import "@component/orchestrator/process-tracks/element.js"; 4 - import "@component/orchestrator/queue-tracks/element.js"; 5 - import "@component/output/indexed-db/element.js"; 6 - import "@component/processor/metadata/element.js"; 3 + // import "@components/orchestrator/process-tracks/element.js"; 4 + import "@components/orchestrator/queue-tracks/element.js"; 5 + import "@components/output/indexed-db/element.js"; 6 + import "@components/processor/metadata/element.js"; 7 7 8 - import * as Input from "@component/input/opensubsonic/element.js"; 9 - import * as Queue from "@component/engine/queue/element.js"; 8 + import * as Input from "@components/input/opensubsonic/element.js"; 9 + import * as Queue from "@components/engine/queue/element.js"; 10 10 11 11 import { component } from "@common/element.js"; 12 12 import { effect, signal, untracked } from "@common/signal.js"; ··· 20 20 /** 21 21 * @import {URLTrack} from "webamp" 22 22 * 23 - * @import {Item} from "@component/engine/queue/types.d.ts" 23 + * @import {Item} from "@components/engine/queue/types.d.ts" 24 24 */ 25 25 26 26 const input = component(Input);
src/theme/webamp/index.vto src/themes/webamp/index.vto
+1 -1
src/theme/webamp/webamp.js src/themes/webamp/webamp.js
··· 1 1 import Webamp from "webamp/lazy"; 2 2 3 3 /** 4 - * @import {Track} from "@component/core/types.d.ts" 4 + * @import {Track} from "@components/core/types.d.ts" 5 5 */ 6 6 class WebampElement extends HTMLElement { 7 7 constructor() {
src/theme/webamp/window-manager/element.js src/themes/webamp/window-manager/element.js
src/theme/webamp/window/element.js src/themes/webamp/window/element.js
+26
src/themes/blur/index.js
··· 1 + import "@components/engine/audio/element.js"; 2 + import "@components/input/opensubsonic/element.js"; 3 + import "@components/orchestrator/process-tracks/element.js"; 4 + import "@components/orchestrator/queue-audio/element.js"; 5 + import "@components/orchestrator/queue-tracks/element.js"; 6 + import "@components/processor/metadata/element.js"; 7 + 8 + import * as Output from "@components/output/indexed-db/element.js"; 9 + import * as Queue from "@components/engine/queue/element.js"; 10 + 11 + import { component } from "@common/element.js"; 12 + import { effect } from "@common/signal.js"; 13 + 14 + /** 15 + * @import {Item} from "@components/engine/queue/types.d.ts" 16 + */ 17 + 18 + const output = component(Output); 19 + const queue = component(Queue); 20 + 21 + globalThis.output = output; 22 + globalThis.queue = queue; 23 + 24 + effect(() => { 25 + console.log("Active queue item:", queue.now()); 26 + });