Skip to content

Commit 24cba01

Browse files
committed
chore: sync example
1 parent 4bcb96f commit 24cba01

24 files changed

Lines changed: 337 additions & 114 deletions

example/__tests__/App.test.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* @format
3+
*/
4+
5+
import ReactTestRenderer from 'react-test-renderer';
6+
import App from '../App';
7+
8+
test('renders correctly', async () => {
9+
await ReactTestRenderer.act(() => {
10+
ReactTestRenderer.create(<App />);
11+
});
12+
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.doublesymmetry.trackplayerexample
2+
3+
import com.facebook.react.bridge.Promise
4+
import com.facebook.react.bridge.ReactApplicationContext
5+
import com.facebook.react.bridge.ReactContextBaseJavaModule
6+
import com.facebook.react.bridge.ReactMethod
7+
import java.io.File
8+
9+
class LocalAssetHelperModule(
10+
reactContext: ReactApplicationContext,
11+
) : ReactContextBaseJavaModule(reactContext) {
12+
13+
override fun getName(): String = "LocalAssetHelper"
14+
15+
@ReactMethod
16+
fun copyToDocuments(resourceName: String, ext: String, promise: Promise) {
17+
try {
18+
val ctx = reactApplicationContext
19+
val resId = ctx.resources.getIdentifier(resourceName, "raw", ctx.packageName)
20+
if (resId == 0) {
21+
promise.reject("NOT_FOUND", "Raw resource '$resourceName' not found")
22+
return
23+
}
24+
25+
val destFile = File(ctx.filesDir, "$resourceName.$ext")
26+
if (!destFile.exists()) {
27+
ctx.resources.openRawResource(resId).use { input ->
28+
destFile.outputStream().use { output -> input.copyTo(output) }
29+
}
30+
}
31+
32+
promise.resolve("file://${destFile.absolutePath}")
33+
} catch (e: Exception) {
34+
promise.reject("COPY_FAILED", e.message, e)
35+
}
36+
}
37+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.doublesymmetry.trackplayerexample
2+
3+
import com.facebook.react.ReactPackage
4+
import com.facebook.react.bridge.NativeModule
5+
import com.facebook.react.bridge.ReactApplicationContext
6+
import com.facebook.react.uimanager.ViewManager
7+
8+
class LocalAssetHelperPackage : ReactPackage {
9+
override fun createNativeModules(
10+
reactContext: ReactApplicationContext,
11+
): List<NativeModule> = listOf(LocalAssetHelperModule(reactContext))
12+
13+
override fun createViewManagers(
14+
reactContext: ReactApplicationContext,
15+
): List<ViewManager<*, *>> = emptyList()
16+
}

example/android/app/src/main/java/com/doublesymmetry/trackplayerexample/MainApplication.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ class MainApplication : Application(), ReactApplication {
1414
context = applicationContext,
1515
packageList =
1616
PackageList(this).packages.apply {
17-
// Packages that cannot be autolinked yet can be added manually here, for example:
18-
// add(MyReactNativePackage())
17+
add(LocalAssetHelperPackage())
1918
},
2019
)
2120
}
3.42 MB
Binary file not shown.
1.35 MB
Binary file not shown.

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2767,7 +2767,7 @@ PODS:
27672767
- ReactCommon/turbomodule/core
27682768
- SocketRocket
27692769
- Yoga
2770-
- RNTPPlayer (5.0.0):
2770+
- RNTPPlayer (5.1.3):
27712771
- boost
27722772
- DoubleConversion
27732773
- fast_float
@@ -3263,7 +3263,7 @@ SPEC CHECKSUMS:
32633263
RNGestureHandler: 77eecab5fd636666ca73a55bb61e2f1a685b7e84
32643264
RNReanimated: 361d5b8e20a77cd1f7907ad301f6d51ef79c1545
32653265
RNScreens: 69f68c95d395bc4261d27c3aae7b4a458b947b7e
3266-
RNTPPlayer: 54fa174461e1e0cec32d9709151a30eacb94d0e6
3266+
RNTPPlayer: d3ff34fb6044dc39201b2ad4928fa22a9927fd7e
32673267
RNVectorIcons: 6acc19c833be864e9c70894e101a587fe491150a
32683268
RNWorklets: b94f5c1b61a985c309dcc0092aacf41515cc39d6
32693269
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748

example/ios/TrackPlayerExample.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
5C01D7F4F7110B6E5D3DA502 /* libPods-TrackPlayerExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D5AA6040636196903910675F /* libPods-TrackPlayerExample.a */; };
1313
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
1414
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
15+
A1B2C3D400000001LOCALMP3 /* one_love_two_love.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = A1B2C3D400000002LOCALMP3 /* one_love_two_love.mp3 */; };
16+
A1B2C3D400000003HELPER01 /* LocalAssetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D400000004HELPER01 /* LocalAssetHelper.swift */; };
17+
A1B2C3D400000005HELPER02 /* LocalAssetHelper.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D400000006HELPER02 /* LocalAssetHelper.mm */; };
18+
A1B2C3D400000007SEAAWAIT /* the_sea_awaits.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = A1B2C3D400000008SEAAWAIT /* the_sea_awaits.mp3 */; };
1519
/* End PBXBuildFile section */
1620

1721
/* Begin PBXFileReference section */
@@ -23,6 +27,10 @@
2327
2DD1E159FA463B0C528C8679 /* Pods-TrackPlayerExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TrackPlayerExample.release.xcconfig"; path = "Target Support Files/Pods-TrackPlayerExample/Pods-TrackPlayerExample.release.xcconfig"; sourceTree = "<group>"; };
2428
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = TrackPlayerExample/AppDelegate.swift; sourceTree = "<group>"; };
2529
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = TrackPlayerExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
30+
A1B2C3D400000002LOCALMP3 /* one_love_two_love.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = one_love_two_love.mp3; path = TrackPlayerExample/one_love_two_love.mp3; sourceTree = "<group>"; };
31+
A1B2C3D400000004HELPER01 /* LocalAssetHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LocalAssetHelper.swift; path = TrackPlayerExample/LocalAssetHelper.swift; sourceTree = "<group>"; };
32+
A1B2C3D400000006HELPER02 /* LocalAssetHelper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = LocalAssetHelper.mm; path = TrackPlayerExample/LocalAssetHelper.mm; sourceTree = "<group>"; };
33+
A1B2C3D400000008SEAAWAIT /* the_sea_awaits.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = the_sea_awaits.mp3; path = TrackPlayerExample/the_sea_awaits.mp3; sourceTree = "<group>"; };
2634
D5AA6040636196903910675F /* libPods-TrackPlayerExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TrackPlayerExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2735
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
2836
/* End PBXFileReference section */
@@ -47,6 +55,10 @@
4755
13B07FB61A68108700A75B9A /* Info.plist */,
4856
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
4957
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
58+
A1B2C3D400000002LOCALMP3 /* one_love_two_love.mp3 */,
59+
A1B2C3D400000004HELPER01 /* LocalAssetHelper.swift */,
60+
A1B2C3D400000006HELPER02 /* LocalAssetHelper.mm */,
61+
A1B2C3D400000008SEAAWAIT /* the_sea_awaits.mp3 */,
5062
);
5163
name = TrackPlayerExample;
5264
sourceTree = "<group>";
@@ -161,6 +173,8 @@
161173
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
162174
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
163175
53A5A39B182EDDD94ED7523E /* PrivacyInfo.xcprivacy in Resources */,
176+
A1B2C3D400000001LOCALMP3 /* one_love_two_love.mp3 in Resources */,
177+
A1B2C3D400000007SEAAWAIT /* the_sea_awaits.mp3 in Resources */,
164178
);
165179
runOnlyForDeploymentPostprocessing = 0;
166180
};
@@ -247,6 +261,8 @@
247261
buildActionMask = 2147483647;
248262
files = (
249263
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */,
264+
A1B2C3D400000003HELPER01 /* LocalAssetHelper.swift in Sources */,
265+
A1B2C3D400000005HELPER02 /* LocalAssetHelper.mm in Sources */,
250266
);
251267
runOnlyForDeploymentPostprocessing = 0;
252268
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#import <React/RCTBridgeModule.h>
2+
3+
@interface RCT_EXTERN_MODULE(LocalAssetHelper, NSObject)
4+
5+
RCT_EXTERN_METHOD(copyToDocuments:(NSString *)resourceName
6+
withExtension:(NSString *)ext
7+
resolver:(RCTPromiseResolveBlock)resolve
8+
rejecter:(RCTPromiseRejectBlock)reject)
9+
10+
@end
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Foundation
2+
import React
3+
4+
@objc(LocalAssetHelper)
5+
class LocalAssetHelper: NSObject {
6+
@objc static func requiresMainQueueSetup() -> Bool { false }
7+
8+
@objc func copyToDocuments(
9+
_ resourceName: String,
10+
withExtension ext: String,
11+
resolver resolve: @escaping RCTPromiseResolveBlock,
12+
rejecter reject: @escaping RCTPromiseRejectBlock
13+
) {
14+
guard let sourceURL = Bundle.main.url(forResource: resourceName, withExtension: ext) else {
15+
reject("NOT_FOUND", "Bundle resource \(resourceName).\(ext) not found", nil)
16+
return
17+
}
18+
19+
let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
20+
let destURL = docs.appendingPathComponent("\(resourceName).\(ext)")
21+
22+
if !FileManager.default.fileExists(atPath: destURL.path) {
23+
do {
24+
try FileManager.default.copyItem(at: sourceURL, to: destURL)
25+
} catch {
26+
reject("COPY_FAILED", error.localizedDescription, error)
27+
return
28+
}
29+
}
30+
31+
resolve(destURL.absoluteString)
32+
}
33+
}

0 commit comments

Comments
 (0)