about summary refs log tree commit diff
path: root/modules/expo-bluesky-swiss-army/src/HLSDownload
diff options
context:
space:
mode:
Diffstat (limited to 'modules/expo-bluesky-swiss-army/src/HLSDownload')
-rw-r--r--modules/expo-bluesky-swiss-army/src/HLSDownload/index.native.tsx39
-rw-r--r--modules/expo-bluesky-swiss-army/src/HLSDownload/index.tsx22
-rw-r--r--modules/expo-bluesky-swiss-army/src/HLSDownload/types.ts10
3 files changed, 71 insertions, 0 deletions
diff --git a/modules/expo-bluesky-swiss-army/src/HLSDownload/index.native.tsx b/modules/expo-bluesky-swiss-army/src/HLSDownload/index.native.tsx
new file mode 100644
index 000000000..92f26192e
--- /dev/null
+++ b/modules/expo-bluesky-swiss-army/src/HLSDownload/index.native.tsx
@@ -0,0 +1,39 @@
+import React from 'react'
+import {StyleProp, ViewStyle} from 'react-native'
+import {requireNativeModule, requireNativeViewManager} from 'expo-modules-core'
+
+import {HLSDownloadViewProps} from './types'
+
+const NativeModule = requireNativeModule('ExpoHLSDownload')
+const NativeView: React.ComponentType<
+  HLSDownloadViewProps & {
+    ref: React.RefObject<any>
+    style: StyleProp<ViewStyle>
+  }
+> = requireNativeViewManager('ExpoHLSDownload')
+
+export default class HLSDownloadView extends React.PureComponent<HLSDownloadViewProps> {
+  private nativeRef: React.RefObject<any> = React.createRef()
+
+  constructor(props: HLSDownloadViewProps) {
+    super(props)
+  }
+
+  static isAvailable(): boolean {
+    return NativeModule.isAvailable()
+  }
+
+  async startDownloadAsync(sourceUrl: string): Promise<void> {
+    return await this.nativeRef.current.startDownloadAsync(sourceUrl)
+  }
+
+  render() {
+    return (
+      <NativeView
+        ref={this.nativeRef}
+        style={{height: 0, width: 0}}
+        {...this.props}
+      />
+    )
+  }
+}
diff --git a/modules/expo-bluesky-swiss-army/src/HLSDownload/index.tsx b/modules/expo-bluesky-swiss-army/src/HLSDownload/index.tsx
new file mode 100644
index 000000000..93c50497f
--- /dev/null
+++ b/modules/expo-bluesky-swiss-army/src/HLSDownload/index.tsx
@@ -0,0 +1,22 @@
+import React from 'react'
+
+import {NotImplementedError} from '../NotImplemented'
+import {HLSDownloadViewProps} from './types'
+
+export default class HLSDownloadView extends React.PureComponent<HLSDownloadViewProps> {
+  constructor(props: HLSDownloadViewProps) {
+    super(props)
+  }
+
+  static isAvailable(): boolean {
+    return false
+  }
+
+  async startDownloadAsync(sourceUrl: string): Promise<void> {
+    throw new NotImplementedError({sourceUrl})
+  }
+
+  render() {
+    return null
+  }
+}
diff --git a/modules/expo-bluesky-swiss-army/src/HLSDownload/types.ts b/modules/expo-bluesky-swiss-army/src/HLSDownload/types.ts
new file mode 100644
index 000000000..6a474d282
--- /dev/null
+++ b/modules/expo-bluesky-swiss-army/src/HLSDownload/types.ts
@@ -0,0 +1,10 @@
+import {NativeSyntheticEvent} from 'react-native'
+
+export interface HLSDownloadViewProps {
+  downloaderUrl: string
+  onSuccess: (e: NativeSyntheticEvent<{uri: string}>) => void
+
+  onStart?: () => void
+  onError?: (e: NativeSyntheticEvent<{message: string}>) => void
+  onProgress?: (e: NativeSyntheticEvent<{progress: number}>) => void
+}