forked from
tokono.ma/diffuse
A music player that connects to your cloud/distributed storage.
1import foundation from "~/common/foundation.js";
2import { effect } from "~/common/signal.js";
3
4import { NAME as AUDIO_METADATA_NAME } from "~/components/artwork/audio-metadata/element.js";
5import { NAME as INPUT_NAME } from "~/components/artwork/input/element.js";
6import { NAME as LAST_FM_NAME } from "~/components/artwork/last.fm/element.js";
7import { NAME as MUSICBRAINZ_NAME } from "~/components/artwork/musicbrainz/element.js";
8
9/**
10 * @import ArtworkConfigurator from "~/components/configurator/artwork/element.js"
11 * @import InputOrchestrator from "~/components/configurator/input/element.js"
12 */
13
14/**
15 * Setup DOM elements when needed.
16 */
17effect(() => {
18 const artwork = foundation.signals.configurator.artwork();
19 const input = foundation.signals.configurator.input();
20 if (!artwork || !input) return;
21
22 inputArtwork(artwork, input);
23 audioMetadata(artwork, input);
24 musicBrainz(artwork);
25 lastFm(artwork);
26});
27
28////////////////////////////////////////////
29// INPUT
30////////////////////////////////////////////
31
32/**
33 * @param {ArtworkConfigurator} artwork
34 * @param {InputOrchestrator} input
35 */
36export function inputArtwork(artwork, input) {
37 const el = document.createElement(INPUT_NAME);
38 el.setAttribute("input-selector", input.selector);
39 artwork.prepend(el);
40}
41
42////////////////////////////////////////////
43// AUDIO METADATA
44////////////////////////////////////////////
45
46/**
47 * @param {ArtworkConfigurator} artwork
48 * @param {InputOrchestrator} input
49 */
50export function audioMetadata(artwork, input) {
51 const el = document.createElement(AUDIO_METADATA_NAME);
52 el.setAttribute("input-selector", input.selector);
53 artwork.append(el);
54}
55
56////////////////////////////////////////////
57// LAST.FM
58////////////////////////////////////////////
59
60/**
61 * @param {ArtworkConfigurator} artwork
62 */
63export function lastFm(artwork) {
64 artwork.append(document.createElement(LAST_FM_NAME));
65}
66
67////////////////////////////////////////////
68// MUSICBRAINZ
69////////////////////////////////////////////
70
71/**
72 * @param {ArtworkConfigurator} artwork
73 */
74export function musicBrainz(artwork) {
75 artwork.append(document.createElement(MUSICBRAINZ_NAME));
76}