1 | |
2 |
|
3 | import { |
4 | getState, |
5 | setState, |
6 | } from "windmill-client@1"; |
7 |
|
8 | |
9 | * **IMPORTANT:** This does not return listenings on the first run. |
10 | * |
11 | * You can read more about the Listenings History API at |
12 | * https://docs.funkwhale.audio/swagger/#/User%20activity/get_api_v1_history_listenings |
13 | */ |
14 | type Funkwhale = { |
15 | baseUrl: string; |
16 | token: string; |
17 | }; |
18 | export async function main( |
19 | auth: Funkwhale, |
20 | query?: string, |
21 | scope = "all", |
22 | page_size = 10, |
23 | ) { |
24 | const previousState = await getState(); |
25 | const url = new URL("/api/v1/history/listenings", auth.baseUrl); |
26 | const params = { query, scope, page_size }; |
27 | Object.entries(params).forEach(([key, value]) => { |
28 | value && url.searchParams.append(key, encodeURIComponent(value)); |
29 | }); |
30 | const response = await fetch(url, { |
31 | headers: { |
32 | Authorization: `Bearer ${auth.token}`, |
33 | }, |
34 | }); |
35 |
|
36 | const data = await response.json(); |
37 | data.results.reverse(); |
38 |
|
39 | const newListenings = []; |
40 | let latestId; |
41 | for (const listening of data.results) { |
42 | if (latestId === undefined || listening.id > latestId) { |
43 | latestId = listening.id; |
44 | } |
45 | if ( |
46 | previousState?.latestId !== undefined && |
47 | listening.id <= previousState.latestId |
48 | ) { |
49 | continue; |
50 | } |
51 | newListenings.push(listening); |
52 | } |
53 |
|
54 | if (latestId !== undefined) { |
55 | await setState({ |
56 | latestId, |
57 | }); |
58 | } |
59 | return newListenings; |
60 | } |
61 |
|