expo-mpv 0.1.1 → 0.1.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.
@@ -151,6 +151,8 @@ export type ExpoMpvViewRef = {
151
151
  reloadSubtitles: () => Promise<void>;
152
152
  /** Set subtitle delay in seconds (positive = later, negative = earlier). */
153
153
  setSubtitleDelay: (seconds: number) => Promise<void>;
154
+ /** Set an mpv property by name (string value). */
155
+ setPropertyString: (name: string, value: string) => Promise<void>;
154
156
  getPlaybackInfo: () => Promise<PlaybackInfo>;
155
157
  getTrackList: () => Promise<TrackInfo[]>;
156
158
  getCurrentTrackIds: () => Promise<CurrentTrackIds>;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoMpv.types.d.ts","sourceRoot":"","sources":["../src/ExpoMpv.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExpoMpv.types.d.ts","sourceRoot":"","sources":["../src/ExpoMpv.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoMpv.types.js","sourceRoot":"","sources":["../src/ExpoMpv.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { StyleProp, ViewStyle } from 'react-native';\n\n// MARK: - Event Payloads\n\nexport type PlaybackStateChangeEvent = {\n state: 'playing' | 'paused' | 'stopped';\n isPlaying: boolean;\n};\n\nexport type ProgressEvent = {\n position: number;\n duration: number;\n bufferedDuration: number;\n};\n\nexport type LoadEvent = {\n duration: number;\n width: number;\n height: number;\n};\n\nexport type ErrorEvent = {\n error: string;\n};\n\nexport type EndEvent = {\n reason: 'ended' | 'error' | 'stopped' | 'unknown';\n};\n\nexport type BufferEvent = {\n isBuffering: boolean;\n};\n\nexport type SeekEvent = {};\n\nexport type VolumeChangeEvent = {\n volume: number;\n muted: boolean;\n};\n\nexport type PlaybackInfo = {\n position: number;\n duration: number;\n isPlaying: boolean;\n speed: number;\n volume: number;\n muted: boolean;\n};\n\nexport type TrackInfo = {\n id: number;\n type: 'video' | 'audio' | 'sub' | string;\n title: string;\n lang: string;\n codec: string;\n selected: boolean;\n isDefault: boolean;\n isExternal: boolean;\n // audio-specific\n channelCount?: number;\n sampleRate?: number;\n // video-specific\n width?: number;\n height?: number;\n fps?: number;\n};\n\nexport type CurrentTrackIds = {\n vid: number;\n aid: number;\n sid: number;\n};\n\n// MARK: - Module Events (non-view)\n\nexport type ExpoMpvModuleEvents = {};\n\n// MARK: - View Props\n\nexport type ExpoMpvViewProps = {\n /**\n * Media source URL to play. Can be a remote URL or a local file path.\n */\n source?: string;\n\n /**\n * Whether playback is paused.\n */\n paused?: boolean;\n\n /**\n * Playback speed multiplier. Default is 1.0.\n */\n speed?: number;\n\n /**\n * Volume level (0-100). Default is 100.\n */\n volume?: number;\n\n /**\n * Whether audio is muted.\n */\n muted?: boolean;\n\n /**\n * Whether to loop the current file.\n */\n loop?: boolean;\n\n /**\n * Called when playback state changes (play/pause).\n */\n onPlaybackStateChange?: (event: { nativeEvent: PlaybackStateChangeEvent }) => void;\n\n /**\n * Called periodically with current playback progress.\n */\n onProgress?: (event: { nativeEvent: ProgressEvent }) => void;\n\n /**\n * Called when a media file has been loaded and is ready to play.\n */\n onLoad?: (event: { nativeEvent: LoadEvent }) => void;\n\n /**\n * Called when an error occurs.\n */\n onError?: (event: { nativeEvent: ErrorEvent }) => void;\n\n /**\n * Called when playback reaches the end.\n */\n onEnd?: (event: { nativeEvent: EndEvent }) => void;\n\n /**\n * Called when buffering state changes.\n */\n onBuffer?: (event: { nativeEvent: BufferEvent }) => void;\n\n /**\n * Called when a seek operation completes.\n */\n onSeek?: (event: { nativeEvent: SeekEvent }) => void;\n\n /**\n * Called when volume or mute state changes.\n */\n onVolumeChange?: (event: { nativeEvent: VolumeChangeEvent }) => void;\n\n style?: StyleProp<ViewStyle>;\n};\n\n// MARK: - View Ref Methods\n\nexport type ExpoMpvViewRef = {\n play: () => Promise<void>;\n pause: () => Promise<void>;\n togglePlay: () => Promise<void>;\n stop: () => Promise<void>;\n seekTo: (position: number) => Promise<void>;\n seekBy: (offset: number) => Promise<void>;\n setSpeed: (speed: number) => Promise<void>;\n setVolume: (volume: number) => Promise<void>;\n setMuted: (muted: boolean) => Promise<void>;\n setSubtitleTrack: (trackId: number) => Promise<void>;\n setAudioTrack: (trackId: number) => Promise<void>;\n /** Load an external subtitle file (local path or URL). */\n addSubtitle: (path: string, flag?: string, title?: string, lang?: string) => Promise<void>;\n /** Remove a subtitle track by ID. */\n removeSubtitle: (trackId: number) => Promise<void>;\n /** Reload current subtitles. */\n reloadSubtitles: () => Promise<void>;\n /** Set subtitle delay in seconds (positive = later, negative = earlier). */\n setSubtitleDelay: (seconds: number) => Promise<void>;\n getPlaybackInfo: () => Promise<PlaybackInfo>;\n getTrackList: () => Promise<TrackInfo[]>;\n getCurrentTrackIds: () => Promise<CurrentTrackIds>;\n};\n"]}
1
+ {"version":3,"file":"ExpoMpv.types.js","sourceRoot":"","sources":["../src/ExpoMpv.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { StyleProp, ViewStyle } from 'react-native';\n\n// MARK: - Event Payloads\n\nexport type PlaybackStateChangeEvent = {\n state: 'playing' | 'paused' | 'stopped';\n isPlaying: boolean;\n};\n\nexport type ProgressEvent = {\n position: number;\n duration: number;\n bufferedDuration: number;\n};\n\nexport type LoadEvent = {\n duration: number;\n width: number;\n height: number;\n};\n\nexport type ErrorEvent = {\n error: string;\n};\n\nexport type EndEvent = {\n reason: 'ended' | 'error' | 'stopped' | 'unknown';\n};\n\nexport type BufferEvent = {\n isBuffering: boolean;\n};\n\nexport type SeekEvent = {};\n\nexport type VolumeChangeEvent = {\n volume: number;\n muted: boolean;\n};\n\nexport type PlaybackInfo = {\n position: number;\n duration: number;\n isPlaying: boolean;\n speed: number;\n volume: number;\n muted: boolean;\n};\n\nexport type TrackInfo = {\n id: number;\n type: 'video' | 'audio' | 'sub' | string;\n title: string;\n lang: string;\n codec: string;\n selected: boolean;\n isDefault: boolean;\n isExternal: boolean;\n // audio-specific\n channelCount?: number;\n sampleRate?: number;\n // video-specific\n width?: number;\n height?: number;\n fps?: number;\n};\n\nexport type CurrentTrackIds = {\n vid: number;\n aid: number;\n sid: number;\n};\n\n// MARK: - Module Events (non-view)\n\nexport type ExpoMpvModuleEvents = {};\n\n// MARK: - View Props\n\nexport type ExpoMpvViewProps = {\n /**\n * Media source URL to play. Can be a remote URL or a local file path.\n */\n source?: string;\n\n /**\n * Whether playback is paused.\n */\n paused?: boolean;\n\n /**\n * Playback speed multiplier. Default is 1.0.\n */\n speed?: number;\n\n /**\n * Volume level (0-100). Default is 100.\n */\n volume?: number;\n\n /**\n * Whether audio is muted.\n */\n muted?: boolean;\n\n /**\n * Whether to loop the current file.\n */\n loop?: boolean;\n\n /**\n * Called when playback state changes (play/pause).\n */\n onPlaybackStateChange?: (event: { nativeEvent: PlaybackStateChangeEvent }) => void;\n\n /**\n * Called periodically with current playback progress.\n */\n onProgress?: (event: { nativeEvent: ProgressEvent }) => void;\n\n /**\n * Called when a media file has been loaded and is ready to play.\n */\n onLoad?: (event: { nativeEvent: LoadEvent }) => void;\n\n /**\n * Called when an error occurs.\n */\n onError?: (event: { nativeEvent: ErrorEvent }) => void;\n\n /**\n * Called when playback reaches the end.\n */\n onEnd?: (event: { nativeEvent: EndEvent }) => void;\n\n /**\n * Called when buffering state changes.\n */\n onBuffer?: (event: { nativeEvent: BufferEvent }) => void;\n\n /**\n * Called when a seek operation completes.\n */\n onSeek?: (event: { nativeEvent: SeekEvent }) => void;\n\n /**\n * Called when volume or mute state changes.\n */\n onVolumeChange?: (event: { nativeEvent: VolumeChangeEvent }) => void;\n\n style?: StyleProp<ViewStyle>;\n};\n\n// MARK: - View Ref Methods\n\nexport type ExpoMpvViewRef = {\n play: () => Promise<void>;\n pause: () => Promise<void>;\n togglePlay: () => Promise<void>;\n stop: () => Promise<void>;\n seekTo: (position: number) => Promise<void>;\n seekBy: (offset: number) => Promise<void>;\n setSpeed: (speed: number) => Promise<void>;\n setVolume: (volume: number) => Promise<void>;\n setMuted: (muted: boolean) => Promise<void>;\n setSubtitleTrack: (trackId: number) => Promise<void>;\n setAudioTrack: (trackId: number) => Promise<void>;\n /** Load an external subtitle file (local path or URL). */\n addSubtitle: (path: string, flag?: string, title?: string, lang?: string) => Promise<void>;\n /** Remove a subtitle track by ID. */\n removeSubtitle: (trackId: number) => Promise<void>;\n /** Reload current subtitles. */\n reloadSubtitles: () => Promise<void>;\n /** Set subtitle delay in seconds (positive = later, negative = earlier). */\n setSubtitleDelay: (seconds: number) => Promise<void>;\n /** Set an mpv property by name (string value). */\n setPropertyString: (name: string, value: string) => Promise<void>;\n getPlaybackInfo: () => Promise<PlaybackInfo>;\n getTrackList: () => Promise<TrackInfo[]>;\n getCurrentTrackIds: () => Promise<CurrentTrackIds>;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoMpvView.d.ts","sourceRoot":"","sources":["../src/ExpoMpvView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKnE,QAAA,MAAM,WAAW,yFA0Bf,CAAC;AAIH,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ExpoMpvView.d.ts","sourceRoot":"","sources":["../src/ExpoMpvView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKnE,QAAA,MAAM,WAAW,yFA4Bf,CAAC;AAIH,eAAe,WAAW,CAAC"}
@@ -20,6 +20,7 @@ const ExpoMpvView = forwardRef((props, ref) => {
20
20
  removeSubtitle: (trackId) => nativeRef.current?.removeSubtitle(trackId),
21
21
  reloadSubtitles: () => nativeRef.current?.reloadSubtitles(),
22
22
  setSubtitleDelay: (seconds) => nativeRef.current?.setSubtitleDelay(seconds),
23
+ setPropertyString: (name, value) => nativeRef.current?.setPropertyString(name, value),
23
24
  getPlaybackInfo: () => nativeRef.current?.getPlaybackInfo(),
24
25
  getTrackList: () => nativeRef.current?.getTrackList(),
25
26
  getCurrentTrackIds: () => nativeRef.current?.getCurrentTrackIds(),
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoMpvView.js","sourceRoot":"","sources":["../src/ExpoMpvView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAIhE,MAAM,UAAU,GACd,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAE/B,MAAM,WAAW,GAAG,UAAU,CAAmC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC9E,MAAM,SAAS,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAEpC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACrC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE;QACvC,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE;QACjD,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC;QACjE,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7D,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;QAC/D,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;QACnE,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;QAChE,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACnF,aAAa,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;QAC7E,WAAW,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,KAAc,EAAE,IAAa,EAAE,EAAE,CAC1E,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QACzD,cAAc,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC;QAC/E,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE;QAC3D,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACnF,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE;QAC3D,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE;QACrD,kBAAkB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,EAAE;KAClE,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,eAAe,WAAW,CAAC","sourcesContent":["import { requireNativeView } from 'expo';\nimport * as React from 'react';\nimport { forwardRef, useImperativeHandle, useRef } from 'react';\n\nimport { ExpoMpvViewProps, ExpoMpvViewRef } from './ExpoMpv.types';\n\nconst NativeView: React.ComponentType<ExpoMpvViewProps & { ref?: React.Ref<any> }> =\n requireNativeView('ExpoMpv');\n\nconst ExpoMpvView = forwardRef<ExpoMpvViewRef, ExpoMpvViewProps>((props, ref) => {\n const nativeRef = useRef<any>(null);\n\n useImperativeHandle(ref, () => ({\n play: () => nativeRef.current?.play(),\n pause: () => nativeRef.current?.pause(),\n togglePlay: () => nativeRef.current?.togglePlay(),\n stop: () => nativeRef.current?.stop(),\n seekTo: (position: number) => nativeRef.current?.seekTo(position),\n seekBy: (offset: number) => nativeRef.current?.seekBy(offset),\n setSpeed: (speed: number) => nativeRef.current?.setSpeed(speed),\n setVolume: (volume: number) => nativeRef.current?.setVolume(volume),\n setMuted: (muted: boolean) => nativeRef.current?.setMuted(muted),\n setSubtitleTrack: (trackId: number) => nativeRef.current?.setSubtitleTrack(trackId),\n setAudioTrack: (trackId: number) => nativeRef.current?.setAudioTrack(trackId),\n addSubtitle: (path: string, flag?: string, title?: string, lang?: string) =>\n nativeRef.current?.addSubtitle(path, flag, title, lang),\n removeSubtitle: (trackId: number) => nativeRef.current?.removeSubtitle(trackId),\n reloadSubtitles: () => nativeRef.current?.reloadSubtitles(),\n setSubtitleDelay: (seconds: number) => nativeRef.current?.setSubtitleDelay(seconds),\n getPlaybackInfo: () => nativeRef.current?.getPlaybackInfo(),\n getTrackList: () => nativeRef.current?.getTrackList(),\n getCurrentTrackIds: () => nativeRef.current?.getCurrentTrackIds(),\n }));\n\n return <NativeView ref={nativeRef} {...props} />;\n});\n\nExpoMpvView.displayName = 'ExpoMpvView';\n\nexport default ExpoMpvView;\n"]}
1
+ {"version":3,"file":"ExpoMpvView.js","sourceRoot":"","sources":["../src/ExpoMpvView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAIhE,MAAM,UAAU,GACd,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAE/B,MAAM,WAAW,GAAG,UAAU,CAAmC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC9E,MAAM,SAAS,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAEpC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACrC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE;QACvC,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE;QACjD,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACrC,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC;QACjE,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7D,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;QAC/D,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;QACnE,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;QAChE,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACnF,aAAa,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;QAC7E,WAAW,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,KAAc,EAAE,IAAa,EAAE,EAAE,CAC1E,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QACzD,cAAc,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC;QAC/E,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE;QAC3D,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACnF,iBAAiB,EAAE,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE,CACjD,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;QACnD,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE;QAC3D,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE;QACrD,kBAAkB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,EAAE;KAClE,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,eAAe,WAAW,CAAC","sourcesContent":["import { requireNativeView } from 'expo';\nimport * as React from 'react';\nimport { forwardRef, useImperativeHandle, useRef } from 'react';\n\nimport { ExpoMpvViewProps, ExpoMpvViewRef } from './ExpoMpv.types';\n\nconst NativeView: React.ComponentType<ExpoMpvViewProps & { ref?: React.Ref<any> }> =\n requireNativeView('ExpoMpv');\n\nconst ExpoMpvView = forwardRef<ExpoMpvViewRef, ExpoMpvViewProps>((props, ref) => {\n const nativeRef = useRef<any>(null);\n\n useImperativeHandle(ref, () => ({\n play: () => nativeRef.current?.play(),\n pause: () => nativeRef.current?.pause(),\n togglePlay: () => nativeRef.current?.togglePlay(),\n stop: () => nativeRef.current?.stop(),\n seekTo: (position: number) => nativeRef.current?.seekTo(position),\n seekBy: (offset: number) => nativeRef.current?.seekBy(offset),\n setSpeed: (speed: number) => nativeRef.current?.setSpeed(speed),\n setVolume: (volume: number) => nativeRef.current?.setVolume(volume),\n setMuted: (muted: boolean) => nativeRef.current?.setMuted(muted),\n setSubtitleTrack: (trackId: number) => nativeRef.current?.setSubtitleTrack(trackId),\n setAudioTrack: (trackId: number) => nativeRef.current?.setAudioTrack(trackId),\n addSubtitle: (path: string, flag?: string, title?: string, lang?: string) =>\n nativeRef.current?.addSubtitle(path, flag, title, lang),\n removeSubtitle: (trackId: number) => nativeRef.current?.removeSubtitle(trackId),\n reloadSubtitles: () => nativeRef.current?.reloadSubtitles(),\n setSubtitleDelay: (seconds: number) => nativeRef.current?.setSubtitleDelay(seconds),\n setPropertyString: (name: string, value: string) =>\n nativeRef.current?.setPropertyString(name, value),\n getPlaybackInfo: () => nativeRef.current?.getPlaybackInfo(),\n getTrackList: () => nativeRef.current?.getTrackList(),\n getCurrentTrackIds: () => nativeRef.current?.getCurrentTrackIds(),\n }));\n\n return <NativeView ref={nativeRef} {...props} />;\n});\n\nExpoMpvView.displayName = 'ExpoMpvView';\n\nexport default ExpoMpvView;\n"]}
@@ -50,6 +50,7 @@ Pod::Spec.new do |s|
50
50
  s.pod_target_xcconfig = {
51
51
  'DEFINES_MODULE' => 'YES',
52
52
  'OTHER_LDFLAGS' => '$(inherited) -ObjC',
53
+ 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "${PODS_TARGET_SRCROOT}/Frameworks"',
53
54
  }
54
55
 
55
56
  s.source_files = "*.{h,m,mm,swift,hpp,cpp}"
@@ -113,6 +113,10 @@ public class ExpoMpvModule: Module {
113
113
  view.setSubtitleDelay(seconds)
114
114
  }.runOnQueue(.main)
115
115
 
116
+ AsyncFunction("setPropertyString") { (view: ExpoMpvView, name: String, value: String) in
117
+ view.setPropertyString(name, value)
118
+ }.runOnQueue(.main)
119
+
116
120
  AsyncFunction("getPlaybackInfo") { (view: ExpoMpvView) -> [String: Any] in
117
121
  return view.getPlaybackInfo()
118
122
  }.runOnQueue(.main)
@@ -460,6 +460,15 @@ class ExpoMpvView: ExpoView {
460
460
  setDouble("sub-delay", seconds)
461
461
  }
462
462
 
463
+ func setPropertyString(_ name: String, _ value: String) {
464
+ guard mpv != nil else { return }
465
+ let result = mpv_set_property_string(mpv, name, value)
466
+ if result < 0 {
467
+ let errStr = String(cString: mpv_error_string(result))
468
+ log("ERROR: set property string '\(name)'='\(value)' failed: \(errStr)")
469
+ }
470
+ }
471
+
463
472
  func getPlaybackInfo() -> [String: Any] {
464
473
  let position = getDouble("time-pos")
465
474
  let duration = getDouble("duration")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-mpv",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -173,6 +173,8 @@ export type ExpoMpvViewRef = {
173
173
  reloadSubtitles: () => Promise<void>;
174
174
  /** Set subtitle delay in seconds (positive = later, negative = earlier). */
175
175
  setSubtitleDelay: (seconds: number) => Promise<void>;
176
+ /** Set an mpv property by name (string value). */
177
+ setPropertyString: (name: string, value: string) => Promise<void>;
176
178
  getPlaybackInfo: () => Promise<PlaybackInfo>;
177
179
  getTrackList: () => Promise<TrackInfo[]>;
178
180
  getCurrentTrackIds: () => Promise<CurrentTrackIds>;
@@ -27,6 +27,8 @@ const ExpoMpvView = forwardRef<ExpoMpvViewRef, ExpoMpvViewProps>((props, ref) =>
27
27
  removeSubtitle: (trackId: number) => nativeRef.current?.removeSubtitle(trackId),
28
28
  reloadSubtitles: () => nativeRef.current?.reloadSubtitles(),
29
29
  setSubtitleDelay: (seconds: number) => nativeRef.current?.setSubtitleDelay(seconds),
30
+ setPropertyString: (name: string, value: string) =>
31
+ nativeRef.current?.setPropertyString(name, value),
30
32
  getPlaybackInfo: () => nativeRef.current?.getPlaybackInfo(),
31
33
  getTrackList: () => nativeRef.current?.getTrackList(),
32
34
  getCurrentTrackIds: () => nativeRef.current?.getCurrentTrackIds(),