Skip to content

Commit 29dd28d

Browse files
authored
[MOO-1800] react-native-sound migration (#302)
2 parents 3036273 + 62d06d8 commit 29dd28d

4 files changed

Lines changed: 54 additions & 26 deletions

File tree

packages/jsActions/mobile-resources-native/CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
- We migrated from react-native-sound to react-native-track-player.
910
- We updated react-native-permissions to 5.4.2.
10-
1111
- We removed react-native-schedule-exact-alarm-permission since it's no longer required.
12-
1312
- Updated react-native from version 0.75.4 to 0.77.3.
1413
- We migrated from react-native-file-viewer to react-native-file-viewer-turbo for new architecture compatibility
1514
- File viewer now uses modal to display content

packages/jsActions/mobile-resources-native/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"react-native-image-picker": "7.2.3",
4040
"react-native-localize": "3.2.1",
4141
"react-native-permissions": "5.4.2",
42-
"react-native-sound": "0.11.0",
42+
"react-native-track-player": "4.1.2",
4343
"url-parse": "^1.4.7"
4444
},
4545
"devDependencies": {

packages/jsActions/mobile-resources-native/src/platform/PlaySound.ts

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// - the code between BEGIN USER CODE and END USER CODE
66
// - the code between BEGIN EXTRA CODE and END EXTRA CODE
77
// Other code you write will be lost the next time you deploy the project.
8-
import Sound from "react-native-sound";
8+
import TrackPlayer, { State, Event } from "react-native-track-player";
99

1010
// BEGIN EXTRA CODE
1111
// END EXTRA CODE
@@ -19,7 +19,7 @@ import Sound from "react-native-sound";
1919
*/
2020
export async function PlaySound(audioFile?: mendix.lib.MxObject): Promise<void> {
2121
// BEGIN USER CODE
22-
// Documentation https://github.com/zmxv/react-native-sound
22+
// Documentation https://rntp.dev
2323

2424
if (!audioFile) {
2525
return Promise.reject(new Error("Input parameter 'Audio file' is required"));
@@ -34,19 +34,39 @@ export async function PlaySound(audioFile?: mendix.lib.MxObject): Promise<void>
3434
const changedDate = audioFile.get("changedDate") as number;
3535
const url = mx.data.getDocumentUrl(guid, changedDate);
3636

37-
const audio = new Sound(url, undefined, error => {
38-
if (error) {
39-
return Promise.reject(new Error(error));
37+
try {
38+
// Initialize the player if it hasn't been set up yet
39+
const state = await TrackPlayer.getPlaybackState();
40+
if (state.state === State.None) {
41+
await TrackPlayer.setupPlayer({
42+
maxCacheSize: 1024
43+
});
4044
}
4145

42-
audio.play(success => {
43-
audio.release();
44-
if (success) {
45-
return Promise.resolve();
46-
}
47-
return Promise.reject(new Error("Playback failed due to an audio encoding error"));
46+
await TrackPlayer.reset();
47+
await TrackPlayer.add({
48+
id: guid,
49+
url,
50+
title: `Audio ${guid}`,
51+
artist: "Mendix App"
4852
});
49-
});
53+
54+
await TrackPlayer.play();
55+
56+
return new Promise<void>((resolve, reject) => {
57+
const subscription = TrackPlayer.addEventListener(Event.PlaybackState, event => {
58+
if (event.state === State.Stopped || event.state === State.Ended) {
59+
subscription.remove();
60+
resolve();
61+
} else if (event.state === State.Error) {
62+
subscription.remove();
63+
reject(new Error(event.error.message || "Playback error"));
64+
}
65+
});
66+
});
67+
} catch (error) {
68+
return Promise.reject(new Error(`Failed to play audio: ${error}`));
69+
}
5070

5171
// END USER CODE
5272
}

pnpm-lock.yaml

Lines changed: 20 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)