Skip to content

Commit

Permalink
utils: Extract random metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
evanpurkhiser committed Nov 23, 2020
1 parent 7e76046 commit 498673b
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 37 deletions.
45 changes: 45 additions & 0 deletions src/utils/randomMetadata.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import {Track} from 'prolink-connect/lib/types';

import {PlayedTrack} from 'src/shared/store';
import exampleMetadata from 'src/utils/exampleMetadata';

export async function fetchRandomArtwork() {
try {
const imageResp = await fetch('https://picsum.photos/160/160');
const imageBuffer = await imageResp.arrayBuffer();
return Buffer.from(imageBuffer);
} catch {
return undefined;
}
}

type Options = {
artwork?: boolean;
};

export async function makeRandomTrack({artwork}: Options = {}) {
const metadata = exampleMetadata[Math.floor(Math.random() * exampleMetadata.length)];

const track = {
id: Date.now(),
title: metadata.title,
comment: metadata.comment,
fileName: 'example.mp3',
filePath: './example.mp3',
duration: 120,
artist: {id: 0, name: metadata.artist} as any,
album: {id: 0, name: metadata.album} as any,
genre: {id: 0, name: metadata.genre} as any,
label: {id: 0, name: metadata.label} as any,
key: {id: 0, name: metadata.key} as any,
} as Track;

const played = new PlayedTrack(new Date(), track);

// Do not always include artwork, it is random afterall
if (!artwork === false && (artwork === true || Math.random() > 0.3)) {
played.artwork = await fetchRandomArtwork();
}

return played;
}
39 changes: 2 additions & 37 deletions src/utils/useRandomHistory.tsx
Original file line number Diff line number Diff line change
@@ -1,42 +1,7 @@
import * as React from 'react';
import {Track} from 'prolink-connect/lib/types';

import {PlayedTrack} from 'src/shared/store';
import exampleMetadata from './exampleMetadata';

async function fetchRandomArtwork() {
try {
const imageResp = await fetch('https://picsum.photos/160/160');
const imageBuffer = await imageResp.arrayBuffer();
return Buffer.from(imageBuffer);
} catch {
return undefined;
}
}

const generateEntry = async () => {
const metadata = exampleMetadata[Math.floor(Math.random() * exampleMetadata.length)];

const track = {
id: Date.now(),
title: metadata.title,
comment: metadata.comment,
artist: {id: 0, name: metadata.artist} as any,
album: {id: 0, name: metadata.album} as any,
genre: {id: 0, name: metadata.genre} as any,
label: {id: 0, name: metadata.label} as any,
key: {id: 0, name: metadata.key} as any,
} as Track;

const played = new PlayedTrack(new Date(), track);

// Do not always include artwork, it is random afterall
if (Math.random() > 0.3) {
played.artwork = await fetchRandomArtwork();
}

return played;
};
import {makeRandomTrack} from './randomMetadata';

type Options = {
/**
Expand All @@ -62,7 +27,7 @@ const useRandomHistory = ({cutoff, updateInterval}: Options) => {
let lastHistory = history;

while (isUpdating) {
lastHistory = [...lastHistory, await generateEntry()].slice(-1 * cutoff);
lastHistory = [...lastHistory, await makeRandomTrack()].slice(-1 * cutoff);
if (isUpdating) {
setHistory(lastHistory);
await new Promise(r => setTimeout(r, updateInterval));
Expand Down

0 comments on commit 498673b

Please sign in to comment.