diff --git a/src/components/Controls.svelte b/src/components/Controls.svelte index 48d8a59..9071ee5 100644 --- a/src/components/Controls.svelte +++ b/src/components/Controls.svelte @@ -29,17 +29,16 @@ diff --git a/src/components/Queue.svelte b/src/components/Queue.svelte index 30dae0e..de34f03 100644 --- a/src/components/Queue.svelte +++ b/src/components/Queue.svelte @@ -28,9 +28,15 @@ diff --git a/src/components/Radio.svelte b/src/components/Radio.svelte index 62f7a0a..04bacf3 100644 --- a/src/components/Radio.svelte +++ b/src/components/Radio.svelte @@ -17,15 +17,121 @@ \ No newline at end of file diff --git a/src/components/icons/controls/PlayPause.svelte b/src/components/icons/controls/PlayPause.svelte index 9efa443..a8d1a59 100644 --- a/src/components/icons/controls/PlayPause.svelte +++ b/src/components/icons/controls/PlayPause.svelte @@ -9,9 +9,9 @@ \ No newline at end of file diff --git a/src/services/mastodon.js b/src/services/mastodon.js index d72311b..c2b5484 100644 --- a/src/services/mastodon.js +++ b/src/services/mastodon.js @@ -18,6 +18,10 @@ export const fetchStatus = (domain, id) => fetch(`https://${domain}/api/v1/statu .then(response => response.json()) .then(status => processStatus(domain, status)) +export async function* statusIterator({ domain, id }) { + yield await fetchStatus(domain, id) +} + // Observable<{ domain : string, hashtag : string, status : Status}> export const hashtagStreamingObservable = (domain, hashtag) => { return new Observable(observer => { diff --git a/src/services/radio.js b/src/services/radio.js index 31de42c..e2afc9e 100644 --- a/src/services/radio.js +++ b/src/services/radio.js @@ -1,9 +1,9 @@ -import { asyncPrepend } from 'iter-tools' -import { hashtagsIterator } from '/services/mastodon.js' +import { asyncConcat } from 'iter-tools' +import { hashtagsIterator, statusIterator } from '/services/mastodon.js' import { tracksIterator } from '/services/misc.js' export const radioIterator = (domain, hashtags, cache) => tracksIterator(hashtagsIterator(domain, hashtags), cache) -export const radioShareIterator = (track, domain, hashtags, cache) => - tracksIterator(asyncPrepend(track, hashtagsIterator(domain, hashtags)), cache) \ No newline at end of file +export const radioShareIterator = (refererCredentials, domain, hashtags, cache) => + tracksIterator(asyncConcat(statusIterator(refererCredentials), hashtagsIterator(domain, hashtags)), cache) \ No newline at end of file diff --git a/src/store.js b/src/store.js deleted file mode 100644 index 3a59b68..0000000 --- a/src/store.js +++ /dev/null @@ -1,90 +0,0 @@ -import { get, writable, derived, scan, wait, startWith, writableLocalStorage } from '/services/store.js' -import { radioIterator, radioShareIterator } from '/services/radio.js' -import DeepSet from '/services/deep-set.js' -import { distinct } from './services/store' - - -const cache = new DeepSet() - -export const domain = writableLocalStorage('domain', 'eldritch.cafe') - -export const hashtags = writableLocalStorage('hashtags', [ - 'np', - 'nowplaying', - 'tootradio', - 'pouetradio' -]) - -export const paused = writable(true) -export const muted = writableLocalStorage('muted', false) -export const volume = writableLocalStorage('volume', 100) - -export const current = writable(null) -export const enqueueing = writable(false) - - -export const iterator = derived([domain, hashtags], ([$domain, $hashtags], set) => { - const iterator = radioIterator($domain, $hashtags, cache) - set(iterator) - - return () => { - iterator.return() - } -}, null) - - -export const next = derived([iterator, current], ([$iterator, $current]) => ({ $iterator, $current })) - .pipe(scan(($nextPromise, { $iterator, $current }) => { - return $nextPromise.then($next => { - if ($next == null || $next === $current) { - enqueueing.set(true) - return $iterator.next().then(({ done, value }) => { - enqueueing.set(false) - return value - }) - } else { - return $nextPromise - } - }) - }, Promise.resolve(null))) - .pipe(wait(x => x)) - // distinct but with strict check - .pipe(distinct()) - .pipe(startWith(null)) - - -export const queue = next - .pipe(scan((a, x) => x == null ? a : [...a, x], [])) - - -export const loading = writable(false) - -const index = derived([queue, current], ([$queue, $current]) => { - const i = $queue.indexOf($current) - return i === -1 ? null : i -}) - -export const canPrevious = derived([queue, index], ([$queue, $index]) => $index !== null && $index > 0) -export const canNext = derived([queue, index], ([$queue, $index]) => $index !== null && $index < $queue.length - 1) - - -export const select = track => { - console.log(`Select ${track.title}`) - current.set(track) -} - -export const selectPrevious = () => { - if (get(canPrevious)) { - const $queue = get(queue) - const $index = get(index) - select($queue[$index - 1]) - } -} - -export const selectNext = () => { - if (get(canNext)) { - const $queue = get(queue) - const $index = get(index) - select($queue[$index + 1]) - } -} \ No newline at end of file