Skip to content

Commit 1b5ce46

Browse files
committed
feat: load all tracks
1 parent 070f1a7 commit 1b5ce46

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

example/src/TrackList.tsx

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,45 @@ import type { Track } from '../../src/NativeMusicLibrary';
1414

1515
export default function TrackList() {
1616
const [tracks, setTracks] = useState<Track[]>([]);
17+
const [loading, setLoading] = useState(false);
1718

1819
const getAllTracks = async () => {
1920
try {
20-
const results = await getTracksAsync();
21-
setTracks(results.items);
22-
Alert.alert('Success', `Found ${results.totalCount} tracks`);
21+
setLoading(true);
22+
const startTime = Date.now();
23+
const results = await loadAllTracks();
24+
const endTime = Date.now();
25+
26+
setTracks(results);
27+
Alert.alert(
28+
'Success',
29+
`Found ${results.length} tracks in ${endTime - startTime}ms`
30+
);
2331
} catch (e) {
2432
console.error(e, 'error');
2533
Alert.alert('Error', 'Failed to fetch tracks');
34+
} finally {
35+
setLoading(false);
36+
}
37+
};
38+
39+
const loadAllTracks = async () => {
40+
let allTracks: Track[] = [];
41+
let hasMore = true;
42+
let cursor;
43+
44+
while (hasMore) {
45+
const result = await getTracksAsync({
46+
first: 100,
47+
after: cursor,
48+
});
49+
50+
allTracks = [...allTracks, ...result.items];
51+
hasMore = result.hasNextPage;
52+
cursor = result.endCursor;
2653
}
54+
55+
return allTracks;
2756
};
2857

2958
const formatDuration = (totalSeconds: number) => {
@@ -51,7 +80,11 @@ export default function TrackList() {
5180
<>
5281
<View style={globalStyles.buttonContainer}>
5382
<View style={globalStyles.buttonSpacer} />
54-
<Button title="get the first 20 tracks" onPress={getAllTracks} />
83+
<Button
84+
title={`${loading ? 'loading...' : ''} get all tracks`}
85+
onPress={getAllTracks}
86+
disabled={loading}
87+
/>
5588
</View>
5689

5790
{tracks.length && (

0 commit comments

Comments
 (0)