55 lines
2.3 KiB
JavaScript
55 lines
2.3 KiB
JavaScript
|
import {writable} from 'svelte/store'
|
||
|
import {PRIORITY} from './http-queue'
|
||
|
import createScoreSaberApiQueue from './scoresaber/api-queue'
|
||
|
import createScoreSaberPageQueue from './scoresaber/page-queue'
|
||
|
import createBeatMapsApiQueue from './beatmaps/api-queue'
|
||
|
import createBeatSaviorApiQueue from './beatsavior/api-queue'
|
||
|
import createTwitchApiQueue from './twitch/api-queue'
|
||
|
import createAccSaberApiQueue from './accsaber/api-queue'
|
||
|
|
||
|
export const getResponseBody = response => response ? response.body : null;
|
||
|
export const isResponseCached = response => !!(response && response.cached)
|
||
|
export const updateResponseBody = (response, body) => response ? {...response, body} : null;
|
||
|
|
||
|
const initQueue = queue => {
|
||
|
let queueState = {
|
||
|
size: 0,
|
||
|
pending: 0,
|
||
|
rateLimit: {waiting: 0, remaining: null, limit: null, resetAt: null},
|
||
|
progress: {num: 0, count: 0, progress: 1},
|
||
|
};
|
||
|
|
||
|
const {subscribe, set} = writable(queueState);
|
||
|
|
||
|
queue.on('change', ({size, pending}) => {
|
||
|
const {rateLimit: {waiting}} = queueState;
|
||
|
const {remaining, limit, resetAt} = queue.getRateLimit();
|
||
|
queueState = {...queueState, size, pending, rateLimit: {waiting, remaining, limit, resetAt}};
|
||
|
set(queueState);
|
||
|
});
|
||
|
queue.on('progress', ({progress, num, count}) => {
|
||
|
const {rateLimit: {waiting}} = queueState;
|
||
|
const {remaining, limit, resetAt} = queue.getRateLimit();
|
||
|
queueState = {...queueState, progress: {num, count, progress}, rateLimit: {waiting, remaining, limit, resetAt}}
|
||
|
set(queueState);
|
||
|
});
|
||
|
queue.on('waiting', ({waiting, remaining, limit, resetAt}) => {
|
||
|
queueState = {...queueState, rateLimit: {waiting, remaining, limit, resetAt}}
|
||
|
set(queueState);
|
||
|
})
|
||
|
|
||
|
return {
|
||
|
subscribe,
|
||
|
...queue,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default {
|
||
|
SCORESABER_API: initQueue(createScoreSaberApiQueue({concurrency: 3, timeout: 95000})),
|
||
|
SCORESABER_PAGE: initQueue(createScoreSaberPageQueue({concurrency: 3, timeout: 30000})),
|
||
|
BEATMAPS: initQueue(createBeatMapsApiQueue({concurrency: 1, timeout: 10000, intervalCap: 10, interval: 1000})),
|
||
|
BEATSAVIOR: initQueue(createBeatSaviorApiQueue({concurrency: 1, timeout: 10000, intervalCap: 60, interval: 60000})),
|
||
|
TWITCH: initQueue(createTwitchApiQueue({concurrency: 8, timeout: 8000, intervalCap: 800, interval: 60000})),
|
||
|
ACCSABER: initQueue(createAccSaberApiQueue({concurrency: 2, timeout: 10000})),
|
||
|
PRIORITY,
|
||
|
}
|