@sendbird/uikit-react-native 3.11.0 → 3.11.1

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 (37) hide show
  1. package/README.md +7 -5
  2. package/lib/commonjs/platform/createMediaService.expo.js +83 -12
  3. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
  4. package/lib/commonjs/platform/createPlayerService.expo.js +214 -113
  5. package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
  6. package/lib/commonjs/platform/createRecorderService.expo.js +248 -130
  7. package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -1
  8. package/lib/commonjs/utils/expoBackwardUtils.js +23 -0
  9. package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
  10. package/lib/commonjs/utils/expoPermissionGranted.js.map +1 -1
  11. package/lib/commonjs/version.js +1 -1
  12. package/lib/commonjs/version.js.map +1 -1
  13. package/lib/module/platform/createMediaService.expo.js +82 -13
  14. package/lib/module/platform/createMediaService.expo.js.map +1 -1
  15. package/lib/module/platform/createPlayerService.expo.js +214 -113
  16. package/lib/module/platform/createPlayerService.expo.js.map +1 -1
  17. package/lib/module/platform/createRecorderService.expo.js +249 -131
  18. package/lib/module/platform/createRecorderService.expo.js.map +1 -1
  19. package/lib/module/utils/expoBackwardUtils.js +23 -0
  20. package/lib/module/utils/expoBackwardUtils.js.map +1 -1
  21. package/lib/module/utils/expoPermissionGranted.js.map +1 -1
  22. package/lib/module/version.js +1 -1
  23. package/lib/module/version.js.map +1 -1
  24. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  25. package/lib/typescript/src/platform/createMediaService.expo.d.ts +2 -2
  26. package/lib/typescript/src/platform/createPlayerService.expo.d.ts +2 -2
  27. package/lib/typescript/src/platform/createRecorderService.expo.d.ts +2 -2
  28. package/lib/typescript/src/utils/expoBackwardUtils.d.ts +10 -0
  29. package/lib/typescript/src/utils/expoPermissionGranted.d.ts +1 -1
  30. package/lib/typescript/src/version.d.ts +1 -1
  31. package/package.json +16 -5
  32. package/src/platform/createMediaService.expo.tsx +87 -9
  33. package/src/platform/createPlayerService.expo.tsx +242 -109
  34. package/src/platform/createRecorderService.expo.tsx +267 -110
  35. package/src/utils/expoBackwardUtils.ts +29 -0
  36. package/src/utils/expoPermissionGranted.ts +3 -1
  37. package/src/version.ts +1 -1
package/README.md CHANGED
@@ -213,7 +213,8 @@ expo install expo-image-picker \
213
213
  expo-file-system \
214
214
  expo-clipboard \
215
215
  expo-notifications \
216
- expo-av \
216
+ expo-audio \
217
+ expo-video \
217
218
  expo-video-thumbnails \
218
219
  expo-image-manipulator
219
220
  ```
@@ -225,7 +226,8 @@ import * as ExpoFS from 'expo-file-system';
225
226
  import * as ExpoImagePicker from 'expo-image-picker';
226
227
  import * as ExpoMediaLibrary from 'expo-media-library';
227
228
  import * as ExpoNotifications from 'expo-notifications';
228
- import * as ExpoAV from 'expo-av';
229
+ import * as ExpoAudio from 'expo-audio';
230
+ import * as ExpoVideo from 'expo-video';
229
231
  import * as ExpoVideoThumbnail from 'expo-video-thumbnails';
230
232
  import * as ExpoImageManipulator from 'expo-image-manipulator';
231
233
 
@@ -239,16 +241,16 @@ const expoPlatformServices = {
239
241
  documentPickerModule: ExpoDocumentPicker,
240
242
  }),
241
243
  media: createExpoMediaService({
242
- avModule: ExpoAV,
244
+ avModule: ExpoVideo,
243
245
  thumbnailModule: ExpoVideoThumbnail,
244
246
  imageManipulator: ExpoImageManipulator,
245
247
  fsModule: ExpoFS,
246
248
  }),
247
249
  player: createExpoPlayerService({
248
- avModule: ExpoAV,
250
+ avModule: ExpoAudio,
249
251
  }),
250
252
  recorder: createExpoRecorderService({
251
- avModule: ExpoAV,
253
+ avModule: ExpoAudio,
252
254
  }),
253
255
  };
254
256
  ```
@@ -4,34 +4,105 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _uikitUtils = require("@sendbird/uikit-utils");
9
9
  var _SBUUtils = _interopRequireDefault(require("../libs/SBUUtils"));
10
10
  var _expoBackwardUtils = _interopRequireDefault(require("../utils/expoBackwardUtils"));
11
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
14
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
13
- const createExpoMediaService = ({
14
- avModule,
15
- thumbnailModule,
16
- imageManipulator,
17
- fsModule
18
- }) => {
19
- return {
20
- VideoComponent({
15
+ 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; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
17
+ 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); }
18
+ class LegacyExpoAVVideoAdapter {
19
+ constructor(avModule) {
20
+ _defineProperty(this, "avModule", void 0);
21
+ _defineProperty(this, "VideoComponent", ({
21
22
  source,
22
23
  resizeMode,
23
24
  onLoad,
24
25
  ...props
25
- }) {
26
+ }) => {
26
27
  // FIXME: type error https://github.com/expo/expo/issues/17101
27
28
  // @ts-ignore
28
- return /*#__PURE__*/_react.default.createElement(avModule.Video, _extends({}, props, {
29
+ return /*#__PURE__*/_react.default.createElement(this.avModule.Video, _extends({}, props, {
29
30
  source: source,
30
31
  resizeMode: resizeMode,
31
32
  onLoad: onLoad,
32
33
  useNativeControls: true
33
34
  }));
34
- },
35
+ });
36
+ this.avModule = avModule;
37
+ }
38
+ }
39
+ class ExpoVideoAdapter {
40
+ constructor(_videoModule) {
41
+ this._videoModule = _videoModule;
42
+ _defineProperty(this, "VideoComponent", ({
43
+ source,
44
+ resizeMode,
45
+ onLoad,
46
+ ...props
47
+ }) => {
48
+ const player = this._videoModule.useVideoPlayer(source);
49
+ (0, _react.useEffect)(() => {
50
+ if (onLoad && player) {
51
+ let subscription = null;
52
+ try {
53
+ subscription = player.addListener('statusChange', eventData => {
54
+ const {
55
+ status,
56
+ error
57
+ } = eventData;
58
+ if (status === 'readyToPlay' && !error) {
59
+ onLoad();
60
+ }
61
+ });
62
+ } catch (error) {
63
+ const timeout = setTimeout(() => onLoad(), 300);
64
+ return () => clearTimeout(timeout);
65
+ }
66
+ return () => {
67
+ if (subscription) {
68
+ subscription.remove();
69
+ }
70
+ };
71
+ }
72
+ return undefined;
73
+ }, [onLoad, player]);
74
+ const getContentFit = mode => {
75
+ switch (mode) {
76
+ case 'cover':
77
+ return 'cover';
78
+ case 'contain':
79
+ return 'contain';
80
+ case 'stretch':
81
+ return 'fill';
82
+ default:
83
+ return 'contain';
84
+ }
85
+ };
86
+ return /*#__PURE__*/_react.default.createElement(this._videoModule.VideoView, {
87
+ ...props,
88
+ player,
89
+ contentFit: getContentFit(resizeMode)
90
+ });
91
+ });
92
+ }
93
+ }
94
+ const createExpoMediaService = ({
95
+ avModule,
96
+ thumbnailModule,
97
+ imageManipulator,
98
+ fsModule
99
+ }) => {
100
+ if (_expoBackwardUtils.default.expoAV.isLegacyAVModule(avModule)) {
101
+ _uikitUtils.Logger.warn('[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.');
102
+ }
103
+ const videoAdapter = _expoBackwardUtils.default.expoAV.isVideoModule(avModule) ? new ExpoVideoAdapter(avModule) : new LegacyExpoAVVideoAdapter(avModule);
104
+ return {
105
+ VideoComponent: videoAdapter.VideoComponent,
35
106
  async getVideoThumbnail({
36
107
  url,
37
108
  quality,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_uikitUtils","_SBUUtils","_expoBackwardUtils","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","createExpoMediaService","avModule","thumbnailModule","imageManipulator","fsModule","VideoComponent","source","resizeMode","onLoad","props","createElement","Video","useNativeControls","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","SBUUtils","getImageSize","resizingSize","getDownscaleSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","getInfoAsync","size","expoBackwardUtils","toFileSize","_default","exports"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React from 'react';\n\nimport { getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface } from './types';\n\ntype Modules = {\n avModule: typeof ExpoAV;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n return {\n VideoComponent({ source, resizeMode, onLoad, ...props }) {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n },\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await fsModule.getInfoAsync(uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,kBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA2D,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAU3D,MAAMO,sBAAsB,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,eAAe;EACfC,gBAAgB;EAChBC;AACO,CAAC,KAA4B;EACpC,OAAO;IACLC,cAAcA,CAAC;MAAEC,MAAM;MAAEC,UAAU;MAAEC,MAAM;MAAE,GAAGC;IAAM,CAAC,EAAE;MACvD;MACA;MACA,oBAAO9B,MAAA,CAAAQ,OAAA,CAAAuB,aAAA,CAACT,QAAQ,CAACU,KAAK,EAAAvB,QAAA,KAAKqB,KAAK;QAAEH,MAAM,EAAEA,MAAO;QAACC,UAAU,EAAEA,UAAW;QAACC,MAAM,EAAEA,MAAO;QAACI,iBAAiB;MAAA,EAAE,CAAC;IAChH,CAAC;IACD,MAAMC,iBAAiBA,CAAC;MAAEC,GAAG;MAAEC,OAAO;MAAEC;IAAU,CAAC,EAAE;MACnD,IAAI;QACF,MAAM;UAAEC;QAAI,CAAC,GAAG,MAAMf,eAAe,CAACgB,iBAAiB,CAACJ,GAAG,EAAE;UAAEC,OAAO;UAAEI,IAAI,EAAEH;QAAU,CAAC,CAAC;QAC1F,OAAO;UAAEI,IAAI,EAAEH;QAAI,CAAC;MACtB,CAAC,CAAC,MAAM;QACN,OAAO,IAAI;MACb;IACF,CAAC;IACD,MAAMI,aAAaA,CAAC;MAAEC,QAAQ;MAAEC,SAAS;MAAEC,eAAe,GAAG,CAAC;MAAEP;IAAI,CAAC,EAAE;MACrE,MAAMQ,UAAU,GAAG,MAAMC,iBAAQ,CAACC,YAAY,CAACV,GAAG,CAAC;MACnD,MAAMW,YAAY,GAAG,IAAAC,4BAAgB,EAACJ,UAAU,EAAE;QAAEK,KAAK,EAAER,QAAQ;QAAES,MAAM,EAAER;MAAU,CAAC,CAAC;MAEzF,MAAM;QAAEN,GAAG,EAAEe;MAAc,CAAC,GAAG,MAAM7B,gBAAgB,CAAC8B,eAAe,CAAChB,GAAG,EAAE,CAAC;QAAEiB,MAAM,EAAEN;MAAa,CAAC,CAAC,EAAE;QACrGO,QAAQ,EAAEC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEd,eAAe,CAAC,EAAE,CAAC;MACpD,CAAC,CAAC;MACF,MAAMe,QAAQ,GAAG,MAAMnC,QAAQ,CAACoC,YAAY,CAACvB,GAAG,CAAC;MAEjD,OAAO;QAAEA,GAAG,EAAEe,aAAa;QAAES,IAAI,EAAEC,0BAAiB,CAACC,UAAU,CAACJ,QAAQ;MAAE,CAAC;IAC7E;EACF,CAAC;AACH,CAAC;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAA1D,OAAA,GAEaa,sBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_SBUUtils","_interopRequireDefault","_expoBackwardUtils","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","LegacyExpoAVVideoAdapter","constructor","avModule","source","resizeMode","onLoad","props","createElement","Video","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","useEffect","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","React","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoBackwardUtils","expoAV","isLegacyAVModule","Logger","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","SBUUtils","getImageSize","resizingSize","getDownscaleSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","getInfoAsync","size","toFileSize","_default","exports"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type { EventSubscription } from 'expo-modules-core';\nimport type * as ExpoVideo from 'expo-video';\nimport type { StatusChangeEventPayload } from 'expo-video';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React, { useEffect } from 'react';\n\nimport { Logger, getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoVideoModule } from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface, VideoProps } from './types';\n\ntype Modules = {\n avModule: ExpoVideoModule;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\ninterface VideoModuleAdapter {\n VideoComponent: React.ComponentType<VideoProps>;\n}\n\nclass LegacyExpoAVVideoAdapter implements VideoModuleAdapter {\n private readonly avModule: typeof ExpoAV;\n constructor(avModule: typeof ExpoAV) {\n this.avModule = avModule;\n }\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <this.avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n };\n}\n\nclass ExpoVideoAdapter implements VideoModuleAdapter {\n constructor(private readonly _videoModule: typeof ExpoVideo) {}\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n const player = this._videoModule.useVideoPlayer(source);\n\n useEffect(() => {\n if (onLoad && player) {\n let subscription: EventSubscription | null = null;\n try {\n subscription = player.addListener('statusChange', (eventData: StatusChangeEventPayload) => {\n const { status, error } = eventData;\n if (status === 'readyToPlay' && !error) {\n onLoad();\n }\n });\n } catch (error) {\n const timeout = setTimeout(() => onLoad(), 300);\n return () => clearTimeout(timeout);\n }\n\n return () => {\n if (subscription) {\n subscription.remove();\n }\n };\n }\n return undefined;\n }, [onLoad, player]);\n\n const getContentFit = (mode: typeof resizeMode): 'cover' | 'contain' | 'fill' => {\n switch (mode) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'stretch':\n return 'fill';\n default:\n return 'contain';\n }\n };\n\n return React.createElement(this._videoModule.VideoView, {\n ...props,\n player,\n contentFit: getContentFit(resizeMode),\n });\n };\n}\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.',\n );\n }\n\n const videoAdapter = expoBackwardUtils.expoAV.isVideoModule(avModule)\n ? new ExpoVideoAdapter(avModule)\n : new LegacyExpoAVVideoAdapter(avModule);\n\n return {\n VideoComponent: videoAdapter.VideoComponent,\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await fsModule.getInfoAsync(uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":"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","ignoreList":[]}
@@ -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":[]}