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