@sendbird/uikit-react-native 3.11.0 → 3.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +7 -5
  2. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
  3. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  4. package/lib/commonjs/platform/createMediaService.expo.js +83 -12
  5. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
  6. package/lib/commonjs/platform/createNotificationService.native.js +31 -6
  7. package/lib/commonjs/platform/createNotificationService.native.js.map +1 -1
  8. package/lib/commonjs/platform/createPlayerService.expo.js +214 -113
  9. package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
  10. package/lib/commonjs/platform/createRecorderService.expo.js +248 -130
  11. package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -1
  12. package/lib/commonjs/utils/expoBackwardUtils.js +23 -0
  13. package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
  14. package/lib/commonjs/utils/expoPermissionGranted.js.map +1 -1
  15. package/lib/commonjs/version.js +1 -1
  16. package/lib/commonjs/version.js.map +1 -1
  17. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
  18. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  19. package/lib/module/platform/createMediaService.expo.js +82 -13
  20. package/lib/module/platform/createMediaService.expo.js.map +1 -1
  21. package/lib/module/platform/createNotificationService.native.js +32 -6
  22. package/lib/module/platform/createNotificationService.native.js.map +1 -1
  23. package/lib/module/platform/createPlayerService.expo.js +214 -113
  24. package/lib/module/platform/createPlayerService.expo.js.map +1 -1
  25. package/lib/module/platform/createRecorderService.expo.js +249 -131
  26. package/lib/module/platform/createRecorderService.expo.js.map +1 -1
  27. package/lib/module/utils/expoBackwardUtils.js +23 -0
  28. package/lib/module/utils/expoBackwardUtils.js.map +1 -1
  29. package/lib/module/utils/expoPermissionGranted.js.map +1 -1
  30. package/lib/module/version.js +1 -1
  31. package/lib/module/version.js.map +1 -1
  32. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  33. package/lib/typescript/src/platform/createMediaService.expo.d.ts +2 -2
  34. package/lib/typescript/src/platform/createNotificationService.native.d.ts +13 -1
  35. package/lib/typescript/src/platform/createPlayerService.expo.d.ts +2 -2
  36. package/lib/typescript/src/platform/createRecorderService.expo.d.ts +2 -2
  37. package/lib/typescript/src/utils/expoBackwardUtils.d.ts +10 -0
  38. package/lib/typescript/src/utils/expoPermissionGranted.d.ts +1 -1
  39. package/lib/typescript/src/version.d.ts +1 -1
  40. package/package.json +16 -5
  41. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +0 -3
  42. package/src/platform/createMediaService.expo.tsx +87 -9
  43. package/src/platform/createNotificationService.native.ts +53 -7
  44. package/src/platform/createPlayerService.expo.tsx +242 -109
  45. package/src/platform/createRecorderService.expo.tsx +267 -110
  46. package/src/utils/expoBackwardUtils.ts +29 -0
  47. package/src/utils/expoPermissionGranted.ts +3 -1
  48. package/src/version.ts +1 -1
@@ -5,137 +5,238 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _uikitUtils = require("@sendbird/uikit-utils");
8
- var _expoPermissionGranted = _interopRequireDefault(require("../utils/expoPermissionGranted"));
8
+ var _expoBackwardUtils = _interopRequireDefault(require("../utils/expoBackwardUtils"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
11
11
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
12
12
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
- const createExpoPlayerService = ({
14
- avModule
15
- }) => {
16
- const sound = new avModule.Audio.Sound();
17
- class VoicePlayer {
18
- constructor() {
19
- _defineProperty(this, "uri", void 0);
20
- _defineProperty(this, "state", 'idle');
21
- _defineProperty(this, "playbackSubscribers", new Set());
22
- _defineProperty(this, "stateSubscribers", new Set());
23
- _defineProperty(this, "setState", state => {
24
- this.state = state;
25
- this.stateSubscribers.forEach(callback => {
26
- callback(state);
27
- });
28
- });
29
- _defineProperty(this, "setListener", () => {
30
- sound.setProgressUpdateIntervalAsync(100).catch(error => {
31
- _uikitUtils.Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
32
- });
33
- sound.setOnPlaybackStatusUpdate(status => {
34
- if (status.isLoaded) {
35
- if (status.didJustFinish) {
36
- this.stop().catch(error => {
37
- _uikitUtils.Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
38
- });
39
- }
40
- if (status.isPlaying) {
41
- this.playbackSubscribers.forEach(callback => {
42
- callback({
43
- currentTime: status.positionMillis,
44
- duration: status.durationMillis ?? 0,
45
- stopped: status.didJustFinish
46
- });
47
- });
48
- }
49
- }
50
- });
13
+ class BaseAudioPlayerAdapter {
14
+ constructor() {
15
+ _defineProperty(this, "uri", void 0);
16
+ _defineProperty(this, "state", 'idle');
17
+ _defineProperty(this, "playbackSubscribers", new Set());
18
+ _defineProperty(this, "stateSubscribers", new Set());
19
+ _defineProperty(this, "setState", state => {
20
+ this.state = state;
21
+ this.stateSubscribers.forEach(callback => {
22
+ callback(state);
51
23
  });
52
- _defineProperty(this, "removeListener", () => {
53
- sound.setOnPlaybackStatusUpdate(null);
54
- });
55
- _defineProperty(this, "requestPermission", async () => {
56
- const status = await avModule.Audio.getPermissionsAsync();
57
- if ((0, _expoPermissionGranted.default)([status])) {
58
- return true;
59
- } else {
60
- const status = await avModule.Audio.requestPermissionsAsync();
61
- return (0, _expoPermissionGranted.default)([status]);
62
- }
63
- });
64
- _defineProperty(this, "addPlaybackListener", callback => {
65
- this.playbackSubscribers.add(callback);
66
- return () => {
67
- this.playbackSubscribers.delete(callback);
68
- };
69
- });
70
- _defineProperty(this, "addStateListener", callback => {
71
- this.stateSubscribers.add(callback);
72
- return () => {
73
- this.stateSubscribers.delete(callback);
74
- };
75
- });
76
- _defineProperty(this, "prepare", async uri => {
77
- this.setState('preparing');
78
- await sound.loadAsync({
79
- uri
80
- }, {
81
- shouldPlay: false
82
- }, true);
83
- this.uri = uri;
24
+ });
25
+ _defineProperty(this, "requestPermission", async () => {
26
+ return true;
27
+ });
28
+ _defineProperty(this, "addPlaybackListener", callback => {
29
+ this.playbackSubscribers.add(callback);
30
+ return () => {
31
+ this.playbackSubscribers.delete(callback);
32
+ };
33
+ });
34
+ _defineProperty(this, "addStateListener", callback => {
35
+ this.stateSubscribers.add(callback);
36
+ return () => {
37
+ this.stateSubscribers.delete(callback);
38
+ };
39
+ });
40
+ }
41
+ }
42
+ class LegacyExpoAVPlayerAdapter extends BaseAudioPlayerAdapter {
43
+ constructor(avModule) {
44
+ super();
45
+ _defineProperty(this, "sound", void 0);
46
+ _defineProperty(this, "setListener", () => {
47
+ this.sound.setProgressUpdateIntervalAsync(100).catch(error => {
48
+ _uikitUtils.Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
84
49
  });
85
- _defineProperty(this, "play", async uri => {
86
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['idle', 'stopped'])) {
87
- try {
88
- await this.prepare(uri);
89
- this.setListener();
90
- await sound.playAsync();
91
- this.setState('playing');
92
- } catch (e) {
93
- this.setState('idle');
94
- this.uri = undefined;
95
- this.removeListener();
96
- throw e;
50
+ this.sound.setOnPlaybackStatusUpdate(status => {
51
+ if (status.isLoaded) {
52
+ if (status.didJustFinish) {
53
+ this.stop().catch(error => {
54
+ _uikitUtils.Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
55
+ });
97
56
  }
98
- } else if ((0, _uikitUtils.matchesOneOf)(this.state, ['paused']) && this.uri === uri) {
99
- try {
100
- this.setListener();
101
- await sound.playAsync();
102
- this.setState('playing');
103
- } catch (e) {
104
- this.removeListener();
105
- throw e;
57
+ if (status.isPlaying) {
58
+ this.playbackSubscribers.forEach(callback => {
59
+ callback({
60
+ currentTime: status.positionMillis,
61
+ duration: status.durationMillis ?? 0,
62
+ stopped: status.didJustFinish
63
+ });
64
+ });
106
65
  }
107
66
  }
108
67
  });
109
- _defineProperty(this, "pause", async () => {
110
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing'])) {
111
- await sound.pauseAsync();
68
+ });
69
+ _defineProperty(this, "removeListener", () => {
70
+ this.sound.setOnPlaybackStatusUpdate(null);
71
+ });
72
+ _defineProperty(this, "prepare", async uri => {
73
+ this.setState('preparing');
74
+ await this.sound.loadAsync({
75
+ uri
76
+ }, {
77
+ shouldPlay: false
78
+ }, true);
79
+ this.uri = uri;
80
+ });
81
+ _defineProperty(this, "play", async uri => {
82
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['idle', 'stopped'])) {
83
+ try {
84
+ await this.prepare(uri);
85
+ this.setListener();
86
+ await this.sound.playAsync();
87
+ this.setState('playing');
88
+ } catch (e) {
89
+ this.setState('idle');
90
+ this.uri = undefined;
112
91
  this.removeListener();
113
- this.setState('paused');
92
+ throw e;
114
93
  }
115
- });
116
- _defineProperty(this, "stop", async () => {
117
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
118
- await sound.stopAsync();
119
- await sound.unloadAsync();
94
+ } else if ((0, _uikitUtils.matchesOneOf)(this.state, ['paused']) && this.uri === uri) {
95
+ try {
96
+ this.setListener();
97
+ await this.sound.playAsync();
98
+ this.setState('playing');
99
+ } catch (e) {
120
100
  this.removeListener();
121
- this.setState('stopped');
101
+ throw e;
102
+ }
103
+ }
104
+ });
105
+ _defineProperty(this, "pause", async () => {
106
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing'])) {
107
+ await this.sound.pauseAsync();
108
+ this.removeListener();
109
+ this.setState('paused');
110
+ }
111
+ });
112
+ _defineProperty(this, "stop", async () => {
113
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
114
+ await this.sound.stopAsync();
115
+ await this.sound.unloadAsync();
116
+ this.removeListener();
117
+ this.setState('stopped');
118
+ }
119
+ });
120
+ _defineProperty(this, "reset", async () => {
121
+ await this.stop();
122
+ this.setState('idle');
123
+ this.uri = undefined;
124
+ this.playbackSubscribers.clear();
125
+ this.stateSubscribers.clear();
126
+ });
127
+ _defineProperty(this, "seek", async time => {
128
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
129
+ await this.sound.playFromPositionAsync(time);
130
+ }
131
+ });
132
+ this.sound = new avModule.Audio.Sound();
133
+ }
134
+ }
135
+ class ExpoAudioPlayerAdapter extends BaseAudioPlayerAdapter {
136
+ constructor(audioModule) {
137
+ super();
138
+ _defineProperty(this, "audioModule", void 0);
139
+ _defineProperty(this, "player", null);
140
+ _defineProperty(this, "setListener", () => {
141
+ if (!this.player) return;
142
+ this.player.addListener('playbackStatusUpdate', status => {
143
+ if (status.isLoaded) {
144
+ if (status.didJustFinish) {
145
+ this.stop().catch(error => {
146
+ _uikitUtils.Logger.warn('[PlayerService.Expo] Failed to stop in playbackStatusUpdate', error);
147
+ });
148
+ }
149
+ if (status.playing) {
150
+ this.playbackSubscribers.forEach(callback => {
151
+ callback({
152
+ currentTime: status.currentTime,
153
+ duration: status.duration ?? 0,
154
+ stopped: status.didJustFinish
155
+ });
156
+ });
157
+ }
122
158
  }
123
159
  });
124
- _defineProperty(this, "reset", async () => {
125
- await this.stop();
126
- this.setState('idle');
127
- this.uri = undefined;
128
- this.playbackSubscribers.clear();
129
- this.stateSubscribers.clear();
160
+ });
161
+ _defineProperty(this, "removeListener", () => {
162
+ if (this.player) {
163
+ this.player.remove();
164
+ }
165
+ });
166
+ _defineProperty(this, "prepare", async uri => {
167
+ this.setState('preparing');
168
+ this.player = this.audioModule.createAudioPlayer(uri, {
169
+ updateInterval: 100
130
170
  });
131
- _defineProperty(this, "seek", async time => {
132
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
133
- await sound.playFromPositionAsync(time);
171
+ this.uri = uri;
172
+ });
173
+ _defineProperty(this, "play", async uri => {
174
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['idle', 'stopped'])) {
175
+ try {
176
+ var _this$player;
177
+ await this.prepare(uri);
178
+ this.setListener();
179
+ (_this$player = this.player) === null || _this$player === void 0 || _this$player.play();
180
+ this.setState('playing');
181
+ } catch (e) {
182
+ this.setState('idle');
183
+ this.uri = undefined;
184
+ this.removeListener();
185
+ throw e;
134
186
  }
135
- });
136
- }
187
+ } else if ((0, _uikitUtils.matchesOneOf)(this.state, ['paused']) && this.uri === uri) {
188
+ try {
189
+ var _this$player2;
190
+ this.setListener();
191
+ (_this$player2 = this.player) === null || _this$player2 === void 0 || _this$player2.play();
192
+ this.setState('playing');
193
+ } catch (e) {
194
+ this.removeListener();
195
+ throw e;
196
+ }
197
+ }
198
+ });
199
+ _defineProperty(this, "pause", async () => {
200
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing'])) {
201
+ var _this$player3;
202
+ (_this$player3 = this.player) === null || _this$player3 === void 0 || _this$player3.pause();
203
+ this.removeListener();
204
+ this.setState('paused');
205
+ }
206
+ });
207
+ _defineProperty(this, "stop", async () => {
208
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
209
+ var _this$player4;
210
+ (_this$player4 = this.player) === null || _this$player4 === void 0 || _this$player4.pause();
211
+ this.removeListener();
212
+ this.setState('stopped');
213
+ }
214
+ });
215
+ _defineProperty(this, "reset", async () => {
216
+ var _this$player5;
217
+ await this.stop();
218
+ (_this$player5 = this.player) === null || _this$player5 === void 0 || _this$player5.remove();
219
+ this.player = null;
220
+ this.setState('idle');
221
+ this.uri = undefined;
222
+ this.playbackSubscribers.clear();
223
+ this.stateSubscribers.clear();
224
+ });
225
+ _defineProperty(this, "seek", async time => {
226
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused']) && this.player) {
227
+ this.player.currentTime = time;
228
+ }
229
+ });
230
+ this.audioModule = audioModule;
231
+ }
232
+ }
233
+ const createExpoPlayerService = ({
234
+ avModule
235
+ }) => {
236
+ if (_expoBackwardUtils.default.expoAV.isLegacyAVModule(avModule)) {
237
+ _uikitUtils.Logger.warn('[PlayerService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-audio.');
137
238
  }
138
- return new VoicePlayer();
239
+ return _expoBackwardUtils.default.expoAV.isAudioModule(avModule) ? new ExpoAudioPlayerAdapter(avModule) : new LegacyExpoAVPlayerAdapter(avModule);
139
240
  };
140
241
  var _default = exports.default = createExpoPlayerService;
141
242
  //# sourceMappingURL=createPlayerService.expo.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_uikitUtils","require","_expoPermissionGranted","_interopRequireDefault","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","createExpoPlayerService","avModule","sound","Audio","Sound","VoicePlayer","constructor","Set","state","stateSubscribers","forEach","callback","setProgressUpdateIntervalAsync","catch","error","Logger","warn","setOnPlaybackStatusUpdate","status","isLoaded","didJustFinish","stop","isPlaying","playbackSubscribers","currentTime","positionMillis","duration","durationMillis","stopped","getPermissionsAsync","expoPermissionGranted","requestPermissionsAsync","add","delete","uri","setState","loadAsync","shouldPlay","matchesOneOf","prepare","setListener","playAsync","undefined","removeListener","pauseAsync","stopAsync","unloadAsync","clear","time","playFromPositionAsync","_default","exports"],"sources":["createPlayerService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\n\nimport { Logger, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n avModule: typeof ExpoAV;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\nconst createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface => {\n const sound = new avModule.Audio.Sound();\n\n class VoicePlayer implements PlayerServiceInterface {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n private readonly playbackSubscribers = new Set<PlaybackListener>();\n private readonly stateSubscribers = new Set<StateListener>();\n\n private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n sound.setProgressUpdateIntervalAsync(100).catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);\n });\n sound.setOnPlaybackStatusUpdate((status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);\n });\n }\n if (status.isPlaying) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.positionMillis,\n duration: status.durationMillis ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n sound.setOnPlaybackStatusUpdate(null);\n };\n\n public requestPermission = async (): Promise<boolean> => {\n const status = await avModule.Audio.getPermissionsAsync();\n if (expoPermissionGranted([status])) {\n return true;\n } else {\n const status = await avModule.Audio.requestPermissionsAsync();\n return expoPermissionGranted([status]);\n }\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: (state: PlayerServiceInterface['state']) => void): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n await sound.loadAsync({ uri }, { shouldPlay: false }, true);\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n await sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await sound.pauseAsync();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await sound.stopAsync();\n await sound.unloadAsync();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await sound.playFromPositionAsync(time);\n }\n };\n }\n\n return new VoicePlayer();\n};\n\nexport default createExpoPlayerService;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_uikitUtils","require","_expoBackwardUtils","_interopRequireDefault","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","BaseAudioPlayerAdapter","constructor","Set","state","stateSubscribers","forEach","callback","playbackSubscribers","add","delete","LegacyExpoAVPlayerAdapter","avModule","sound","setProgressUpdateIntervalAsync","catch","error","Logger","warn","setOnPlaybackStatusUpdate","status","isLoaded","didJustFinish","stop","isPlaying","currentTime","positionMillis","duration","durationMillis","stopped","uri","setState","loadAsync","shouldPlay","matchesOneOf","prepare","setListener","playAsync","undefined","removeListener","pauseAsync","stopAsync","unloadAsync","clear","time","playFromPositionAsync","Audio","Sound","ExpoAudioPlayerAdapter","audioModule","player","addListener","playing","remove","createAudioPlayer","updateInterval","_this$player","play","_this$player2","_this$player3","pause","_this$player4","_this$player5","createExpoPlayerService","expoBackwardUtils","expoAV","isLegacyAVModule","isAudioModule","_default","exports"],"sources":["createPlayerService.expo.tsx"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\n\nimport { Logger, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoAudioModule } from '../utils/expoBackwardUtils';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n avModule: ExpoAudioModule;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\n\ninterface AudioPlayerAdapter {\n requestPermission(): Promise<boolean>;\n play(uri: string): Promise<void>;\n pause(): Promise<void>;\n stop(): Promise<void>;\n reset(): Promise<void>;\n seek(time: number): Promise<void>;\n addPlaybackListener(callback: PlaybackListener): Unsubscribe;\n addStateListener(callback: StateListener): Unsubscribe;\n readonly state: PlayerServiceInterface['state'];\n uri?: string;\n}\n\nabstract class BaseAudioPlayerAdapter implements AudioPlayerAdapter {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n protected readonly playbackSubscribers = new Set<PlaybackListener>();\n protected readonly stateSubscribers = new Set<StateListener>();\n\n protected setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n public requestPermission = async (): Promise<boolean> => {\n return true;\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: StateListener): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n abstract play(uri: string): Promise<void>;\n abstract pause(): Promise<void>;\n abstract stop(): Promise<void>;\n abstract reset(): Promise<void>;\n abstract seek(time: number): Promise<void>;\n}\n\nclass LegacyExpoAVPlayerAdapter extends BaseAudioPlayerAdapter {\n private readonly sound: ExpoAV.Audio.Sound;\n\n constructor(avModule: typeof ExpoAV) {\n super();\n this.sound = new avModule.Audio.Sound();\n }\n\n private setListener = () => {\n this.sound.setProgressUpdateIntervalAsync(100).catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);\n });\n this.sound.setOnPlaybackStatusUpdate((status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);\n });\n }\n if (status.isPlaying) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.positionMillis,\n duration: status.durationMillis ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n this.sound.setOnPlaybackStatusUpdate(null);\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n await this.sound.loadAsync({ uri }, { shouldPlay: false }, true);\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n await this.sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await this.sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await this.sound.pauseAsync();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await this.sound.stopAsync();\n await this.sound.unloadAsync();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await this.sound.playFromPositionAsync(time);\n }\n };\n}\n\nclass ExpoAudioPlayerAdapter extends BaseAudioPlayerAdapter {\n private readonly audioModule: typeof ExpoAudio;\n private player: ExpoAudio.AudioPlayer | null = null;\n\n constructor(audioModule: typeof ExpoAudio) {\n super();\n this.audioModule = audioModule;\n }\n\n private setListener = () => {\n if (!this.player) return;\n\n this.player.addListener('playbackStatusUpdate', (status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in playbackStatusUpdate', error);\n });\n }\n if (status.playing) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.currentTime,\n duration: status.duration ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n if (this.player) {\n this.player.remove();\n }\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n this.player = this.audioModule.createAudioPlayer(uri, { updateInterval: 100 });\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n this.player?.play();\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n this.player?.play();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n this.player?.pause();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n this.player?.pause();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.player?.remove();\n this.player = null;\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused']) && this.player) {\n this.player.currentTime = time;\n }\n };\n}\n\nconst createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[PlayerService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-audio.',\n );\n }\n\n return expoBackwardUtils.expoAV.isAudioModule(avModule)\n ? new ExpoAudioPlayerAdapter(avModule)\n : new LegacyExpoAVPlayerAdapter(avModule);\n};\n\nexport default createExpoPlayerService;\n"],"mappings":"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","ignoreList":[]}