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

Configure Feed

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

feat: implement detach functions

+61 -12
+19
src/components/input/common.js
··· 1 1 import { base64url } from "iso-base/rfc4648"; 2 2 3 3 /** 4 + * @import {Track} from "@definitions/types.d.ts" 5 + */ 6 + 7 + /** 8 + * @param {{ fileUriOrScheme: string; handleFileUri: (args: { fileURI: string; tracks: Track[] }) => Track[]; inputScheme: string; tracks: Track[] }} _ 9 + */ 10 + export function detach( 11 + { fileUriOrScheme, handleFileUri, inputScheme, tracks }, 12 + ) { 13 + if (!fileUriOrScheme.includes("://")) { 14 + // Delete everything if scheme matches 15 + if (fileUriOrScheme === inputScheme) return []; 16 + return tracks; 17 + } 18 + 19 + return handleFileUri({ fileURI: fileUriOrScheme, tracks }); 20 + } 21 + 22 + /** 4 23 * @param {string} scheme 5 24 * @param {string} groupId 6 25 */
+1 -1
src/components/input/opensubsonic/common.js
··· 2 2 import * as URI from "uri-js"; 3 3 import QS from "query-string"; 4 4 5 - import { IDB_SERVERS, SCHEME } from "./constants.js"; 5 + import { SCHEME } from "./constants.js"; 6 6 7 7 /** 8 8 * @import {Child} from "subsonic-api"
-2
src/components/input/opensubsonic/constants.js
··· 1 - export const IDB_PREFIX = "@components/input/opensubsonic"; 2 - export const IDB_SERVERS = `${IDB_PREFIX}/servers`; 3 1 export const SCHEME = "opensubsonic";
+18 -4
src/components/input/opensubsonic/worker.js
··· 2 2 import { ostiary, rpc } from "@common/worker.js"; 3 3 4 4 import { SCHEME } from "./constants.js"; 5 + import { detach as detachUtil, groupKeyHash } from "../common.js"; 5 6 import { 6 7 autoTypeToTrackKind, 7 8 buildURI, ··· 11 12 parseURI, 12 13 serverId, 13 14 } from "./common.js"; 14 - import { groupKeyHash } from "../common.js"; 15 15 16 16 /** 17 17 * @import {Child, SubsonicAPI} from "subsonic-api" ··· 42 42 /** 43 43 * @type {Actions['detach']} 44 44 */ 45 - export async function detach({ fileUriOrScheme, tracks }) { 46 - console.log("opensubsonic", fileUriOrScheme); 47 - return tracks; 45 + export async function detach(args) { 46 + return detachUtil({ 47 + ...args, 48 + 49 + inputScheme: SCHEME, 50 + handleFileUri: ({ fileURI, tracks }) => { 51 + const result = parseURI(fileURI); 52 + if (!result) return tracks; 53 + 54 + const sid = serverId(result.server); 55 + const groups = groupTracksByServer(tracks); 56 + 57 + delete groups[sid]; 58 + 59 + return Object.values(groups).map((a) => a.tracks).flat(1); 60 + }, 61 + }); 48 62 } 49 63 50 64 /**
+23 -5
src/components/input/s3/worker.js
··· 1 - import { groupKeyHash, isAudioFile } from "@components/input/common.js"; 1 + import { ostiary, rpc } from "@common/worker.js"; 2 + import { 3 + detach as detachUtil, 4 + groupKeyHash, 5 + isAudioFile, 6 + } from "@components/input/common.js"; 2 7 import { 3 8 bucketId, 4 9 buildURI, ··· 8 13 parseURI, 9 14 } from "./common.js"; 10 15 import { SCHEME } from "./constants.js"; 11 - import { ostiary, rpc } from "@common/worker.js"; 12 16 13 17 /** 14 18 * @import { InputActions as Actions, ConsultGrouping } from "@components/input/types.d.ts"; ··· 38 42 /** 39 43 * @type {Actions['detach']} 40 44 */ 41 - export async function detach({ fileUriOrScheme, tracks }) { 42 - console.log("s3", fileUriOrScheme); 43 - return tracks; 45 + export async function detach(args) { 46 + return detachUtil({ 47 + ...args, 48 + 49 + inputScheme: SCHEME, 50 + handleFileUri: ({ fileURI, tracks }) => { 51 + const result = parseURI(fileURI); 52 + if (!result) return tracks; 53 + 54 + const bid = bucketId(result.bucket); 55 + const groups = groupTracksByBucket(tracks); 56 + 57 + delete groups[bid]; 58 + 59 + return Object.values(groups).map((a) => a.tracks).flat(1); 60 + }, 61 + }); 44 62 } 45 63 46 64 /**