expo-gliph-player 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +348 -0
- package/android/build.gradle +82 -0
- package/android/src/main/AndroidManifest.xml +31 -0
- package/android/src/main/java/com/gliphplayer/DeviceInfoModule.kt +48 -0
- package/android/src/main/java/com/gliphplayer/DeviceInfoPackage.kt +16 -0
- package/android/src/main/java/com/gliphplayer/GliphPlayerModule.kt +360 -0
- package/android/src/main/java/com/gliphplayer/GliphPlayerPackage.kt +48 -0
- package/android/src/main/java/com/gliphplayer/GliphPlayerService.kt +797 -0
- package/android/src/main/res/xml/automotive_app_desc.xml +4 -0
- package/android/src/oldarch/com/gliphplayer/NativeGliphPlayerSpec.kt +56 -0
- package/app.plugin.js +1 -0
- package/expo-gliph-player.podspec +91 -0
- package/ios/GliphAudioPlayer.h +77 -0
- package/ios/GliphAudioPlayer.swift +697 -0
- package/ios/GliphPlayer-Bridging-Header.h +3 -0
- package/ios/GliphPlayerModule.h +12 -0
- package/ios/GliphPlayerModule.mm +243 -0
- package/ios/expo_gliph_player.h +22 -0
- package/lib/commonjs/GliphPlayer.js +310 -0
- package/lib/commonjs/GliphPlayer.js.map +1 -0
- package/lib/commonjs/hooks.js +233 -0
- package/lib/commonjs/hooks.js.map +1 -0
- package/lib/commonjs/index.js +166 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/NativeGliphPlayer.js +19 -0
- package/lib/commonjs/specs/NativeGliphPlayer.js.map +1 -0
- package/lib/commonjs/types.js +175 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/GliphPlayer.js +305 -0
- package/lib/module/GliphPlayer.js.map +1 -0
- package/lib/module/hooks.js +221 -0
- package/lib/module/hooks.js.map +1 -0
- package/lib/module/index.js +20 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/specs/NativeGliphPlayer.js +20 -0
- package/lib/module/specs/NativeGliphPlayer.js.map +1 -0
- package/lib/module/types.js +181 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/src/GliphPlayer.d.ts +113 -0
- package/lib/typescript/src/GliphPlayer.d.ts.map +1 -0
- package/lib/typescript/src/hooks.d.ts +51 -0
- package/lib/typescript/src/hooks.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +11 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeGliphPlayer.d.ts +80 -0
- package/lib/typescript/src/specs/NativeGliphPlayer.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +348 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +62 -0
- package/src/GliphPlayer.ts +356 -0
- package/src/hooks.ts +256 -0
- package/src/index.ts +61 -0
- package/src/specs/NativeGliphPlayer.ts +105 -0
- package/src/types.ts +395 -0
- package/src/withGliphPlayer.js +166 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
4
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
5
|
+
#import <RNGliphPlayerSpec/RNGliphPlayerSpec.h>
|
|
6
|
+
|
|
7
|
+
@interface GliphPlayerModule : RCTEventEmitter <NativeGliphPlayerSpec>
|
|
8
|
+
#else
|
|
9
|
+
@interface GliphPlayerModule : RCTEventEmitter <RCTBridgeModule>
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
@end
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GliphPlayerModule.mm
|
|
3
|
+
*
|
|
4
|
+
* Objective-C++ bridge that connects React Native (New + Old Arch) to
|
|
5
|
+
* the Swift GliphAudioPlayer implementation.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#import "GliphPlayerModule.h"
|
|
9
|
+
#import "expo_gliph_player-Swift.h"
|
|
10
|
+
|
|
11
|
+
@interface GliphPlayerModule ()
|
|
12
|
+
@property (nonatomic, strong) GliphAudioPlayer *player;
|
|
13
|
+
@end
|
|
14
|
+
|
|
15
|
+
@implementation GliphPlayerModule {
|
|
16
|
+
bool _hasListeners;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
RCT_EXPORT_MODULE(RNGliphPlayer)
|
|
20
|
+
|
|
21
|
+
- (instancetype)init {
|
|
22
|
+
if (self = [super init]) {
|
|
23
|
+
__weak GliphPlayerModule *weakSelf = self;
|
|
24
|
+
_player = [[GliphAudioPlayer alloc] initWithEventEmitter:^(NSString *event, NSDictionary *data) {
|
|
25
|
+
[weakSelf sendEventWithName:event body:data];
|
|
26
|
+
}];
|
|
27
|
+
}
|
|
28
|
+
return self;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
+ (BOOL)requiresMainQueueSetup {
|
|
32
|
+
return NO;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
- (NSArray<NSString *> *)supportedEvents {
|
|
36
|
+
return @[
|
|
37
|
+
@"playback-state",
|
|
38
|
+
@"playback-error",
|
|
39
|
+
@"playback-active-track-changed",
|
|
40
|
+
@"playback-queue-ended",
|
|
41
|
+
@"playback-progress-updated",
|
|
42
|
+
@"playback-metadata-received",
|
|
43
|
+
@"remote-play",
|
|
44
|
+
@"remote-pause",
|
|
45
|
+
@"remote-stop",
|
|
46
|
+
@"remote-next",
|
|
47
|
+
@"remote-previous",
|
|
48
|
+
@"remote-skip",
|
|
49
|
+
@"remote-jump-forward",
|
|
50
|
+
@"remote-jump-backward",
|
|
51
|
+
@"remote-seek",
|
|
52
|
+
@"remote-set-rating",
|
|
53
|
+
@"remote-duck",
|
|
54
|
+
@"remote-like",
|
|
55
|
+
@"remote-dislike",
|
|
56
|
+
@"remote-bookmark",
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
- (void)startObserving { _hasListeners = YES; }
|
|
61
|
+
- (void)stopObserving { _hasListeners = NO; }
|
|
62
|
+
|
|
63
|
+
RCT_EXPORT_METHOD(setupPlayer:(NSDictionary *)options
|
|
64
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
65
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
66
|
+
[_player setupPlayerWithOptions:options resolve:resolve reject:reject];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
RCT_EXPORT_METHOD(destroy) {
|
|
70
|
+
[_player destroy];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
RCT_EXPORT_METHOD(isServiceRunning:(RCTPromiseResolveBlock)resolve
|
|
74
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
75
|
+
resolve(@([_player isReady]));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
RCT_EXPORT_METHOD(add:(NSArray *)tracks
|
|
79
|
+
insertBeforeIndex:(double)insertBeforeIndex
|
|
80
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
81
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
82
|
+
[_player addTracks:tracks insertBeforeIndex:(NSInteger)insertBeforeIndex resolve:resolve reject:reject];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
RCT_EXPORT_METHOD(remove:(NSArray *)trackIds
|
|
86
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
87
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
88
|
+
[_player removeTracks:trackIds resolve:resolve reject:reject];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
RCT_EXPORT_METHOD(removeUpcomingTracks:(RCTPromiseResolveBlock)resolve
|
|
92
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
93
|
+
[_player removeUpcomingTracksWithResolve:resolve reject:reject];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
RCT_EXPORT_METHOD(skip:(double)index
|
|
97
|
+
initialPosition:(double)initialPosition
|
|
98
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
99
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
100
|
+
[_player skipToIndex:(NSInteger)index initialPosition:initialPosition resolve:resolve reject:reject];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
RCT_EXPORT_METHOD(skipToNext:(double)initialPosition
|
|
104
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
105
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
106
|
+
[_player skipToNextWithInitialPosition:initialPosition resolve:resolve reject:reject];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
RCT_EXPORT_METHOD(skipToPrevious:(double)initialPosition
|
|
110
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
111
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
112
|
+
[_player skipToPreviousWithInitialPosition:initialPosition resolve:resolve reject:reject];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
RCT_EXPORT_METHOD(move:(double)fromIndex
|
|
116
|
+
toIndex:(double)toIndex
|
|
117
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
118
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
119
|
+
[_player moveFrom:(NSInteger)fromIndex toIndex:(NSInteger)toIndex resolve:resolve reject:reject];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
RCT_EXPORT_METHOD(play:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
123
|
+
[_player playWithResolve:resolve reject:reject];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
RCT_EXPORT_METHOD(pause:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
127
|
+
[_player pauseWithResolve:resolve reject:reject];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
RCT_EXPORT_METHOD(stop:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
131
|
+
[_player stopWithResolve:resolve reject:reject];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
RCT_EXPORT_METHOD(reset:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
135
|
+
[_player resetWithResolve:resolve reject:reject];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
RCT_EXPORT_METHOD(seekTo:(double)position
|
|
139
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
140
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
141
|
+
[_player seekTo:position resolve:resolve reject:reject];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
RCT_EXPORT_METHOD(seekBy:(double)offset
|
|
145
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
146
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
147
|
+
[_player seekBy:offset resolve:resolve reject:reject];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
RCT_EXPORT_METHOD(setVolume:(double)volume
|
|
151
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
152
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
153
|
+
[_player setVolume:(float)volume resolve:resolve reject:reject];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
RCT_EXPORT_METHOD(getVolume:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
157
|
+
resolve(@([_player getVolume]));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
RCT_EXPORT_METHOD(setRate:(double)rate
|
|
161
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
162
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
163
|
+
[_player setRate:(float)rate resolve:resolve reject:reject];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
RCT_EXPORT_METHOD(getRate:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
167
|
+
resolve(@([_player getRate]));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
RCT_EXPORT_METHOD(setRepeatMode:(double)mode
|
|
171
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
172
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
173
|
+
[_player setRepeatMode:(NSInteger)mode resolve:resolve reject:reject];
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
RCT_EXPORT_METHOD(getRepeatMode:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
177
|
+
resolve(@([_player getRepeatMode]));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
RCT_EXPORT_METHOD(getQueue:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
181
|
+
resolve([_player getQueue]);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
RCT_EXPORT_METHOD(getActiveTrackIndex:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
185
|
+
NSNumber *idx = [_player getActiveTrackIndex];
|
|
186
|
+
resolve(idx);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
RCT_EXPORT_METHOD(getActiveTrack:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
190
|
+
resolve([_player getActiveTrack]);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
RCT_EXPORT_METHOD(getTrack:(double)index
|
|
194
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
195
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
196
|
+
resolve([_player getTrackAtIndex:(NSInteger)index]);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
RCT_EXPORT_METHOD(getQueueSize:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
200
|
+
resolve(@([_player getQueueSize]));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
RCT_EXPORT_METHOD(getPlaybackState:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
204
|
+
resolve([_player getPlaybackState]);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
RCT_EXPORT_METHOD(getProgress:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
208
|
+
resolve([_player getProgress]);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
RCT_EXPORT_METHOD(updateMetadataForTrack:(double)index
|
|
212
|
+
metadata:(NSDictionary *)metadata
|
|
213
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
214
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
215
|
+
[_player updateMetadataForTrack:(NSInteger)index metadata:metadata resolve:resolve reject:reject];
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
RCT_EXPORT_METHOD(clearNowPlayingMetadata:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
|
|
219
|
+
[_player clearNowPlayingMetadataWithResolve:resolve reject:reject];
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
RCT_EXPORT_METHOD(updateNowPlayingMetadata:(NSDictionary *)metadata
|
|
223
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
224
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
225
|
+
[_player updateNowPlayingMetadata:metadata resolve:resolve reject:reject];
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
RCT_EXPORT_METHOD(updateOptions:(NSDictionary *)options
|
|
229
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
230
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
231
|
+
[_player updateOptions:options resolve:resolve reject:reject];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// ── New Architecture (TurboModule) ────────────────────────────────────────────
|
|
235
|
+
|
|
236
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
237
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
238
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params {
|
|
239
|
+
return std::make_shared<facebook::react::NativeGliphPlayerSpecJSI>(params);
|
|
240
|
+
}
|
|
241
|
+
#endif
|
|
242
|
+
|
|
243
|
+
@end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//
|
|
2
|
+
// expo_gliph_player.h
|
|
3
|
+
//
|
|
4
|
+
// Master header matching the pod's module name (dashes -> underscores).
|
|
5
|
+
// Xcode's Swift-generated interop header (expo_gliph_player-Swift.h) hardcodes
|
|
6
|
+
// a self-import of <expo_gliph_player/expo_gliph_player.h> for any module that
|
|
7
|
+
// has DEFINES_MODULE = YES and contains Swift — this file only needs to EXIST
|
|
8
|
+
// under that exact name for the build to find it.
|
|
9
|
+
//
|
|
10
|
+
// IMPORTANT: do NOT re-export GliphAudioPlayer.h from here (e.g. via
|
|
11
|
+
// `#import "GliphAudioPlayer.h"`). The authoritative Objective-C interface
|
|
12
|
+
// for the Swift `GliphAudioPlayer` class is auto-generated by the Swift
|
|
13
|
+
// compiler itself, inside expo_gliph_player-Swift.h. GliphPlayerModule.mm
|
|
14
|
+
// imports that generated header directly. If this file also pulls in a
|
|
15
|
+
// second, hand-written declaration of the same class name, both end up in
|
|
16
|
+
// the same translation unit and the build fails with:
|
|
17
|
+
// "Duplicate interface definition for class 'GliphAudioPlayer'"
|
|
18
|
+
// (which in turn cascades into unrelated-looking parse errors later in
|
|
19
|
+
// GliphPlayerModule.mm, since Clang's parser gets confused after the
|
|
20
|
+
// redefinition).
|
|
21
|
+
//
|
|
22
|
+
#import <Foundation/Foundation.h>
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
exports.isBuffering = isBuffering;
|
|
8
|
+
exports.isPaused = isPaused;
|
|
9
|
+
exports.isPlaying = isPlaying;
|
|
10
|
+
exports.isStopped = isStopped;
|
|
11
|
+
var _reactNative = require("react-native");
|
|
12
|
+
var _NativeGliphPlayer = _interopRequireDefault(require("./specs/NativeGliphPlayer"));
|
|
13
|
+
var _types = require("./types");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
/**
|
|
16
|
+
* GliphPlayer.ts
|
|
17
|
+
*
|
|
18
|
+
* Main JS/TS API surface. Wraps the TurboModule (NativeGliphPlayer) and
|
|
19
|
+
* provides a clean, typed interface identical in spirit to react-native-track-player.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
let _emitter = null;
|
|
25
|
+
function getEmitter() {
|
|
26
|
+
if (!_NativeGliphPlayer.default) {
|
|
27
|
+
throw new Error('[RNGliphPlayer] Native module not found. Is it linked correctly?');
|
|
28
|
+
}
|
|
29
|
+
if (!_emitter) {
|
|
30
|
+
_emitter = new _reactNative.NativeEventEmitter(_NativeGliphPlayer.default);
|
|
31
|
+
}
|
|
32
|
+
return _emitter;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Resolve a require()'d asset to a URI string the native side can consume */
|
|
36
|
+
function resolveAssetSource(source) {
|
|
37
|
+
if (typeof source === 'number') {
|
|
38
|
+
const {
|
|
39
|
+
Image
|
|
40
|
+
} = require('react-native');
|
|
41
|
+
return Image.resolveAssetSource(source).uri;
|
|
42
|
+
}
|
|
43
|
+
return source;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Serialize a Track to a plain object safe for the TurboModule bridge */
|
|
47
|
+
function serializeTrack(track) {
|
|
48
|
+
return {
|
|
49
|
+
id: track.id ?? `track_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
50
|
+
url: resolveAssetSource(track.url),
|
|
51
|
+
title: track.title,
|
|
52
|
+
artist: track.artist,
|
|
53
|
+
album: track.album ?? '',
|
|
54
|
+
artwork: track.artwork != null ? resolveAssetSource(track.artwork) : '',
|
|
55
|
+
duration: track.duration ?? -1,
|
|
56
|
+
genre: track.genre ?? '',
|
|
57
|
+
date: track.date ?? '',
|
|
58
|
+
description: track.description ?? '',
|
|
59
|
+
rating: track.rating ?? 0,
|
|
60
|
+
isLiveStream: track.isLiveStream ?? false,
|
|
61
|
+
headers: track.headers ?? {},
|
|
62
|
+
pitchAlgorithm: track.pitchAlgorithm ?? 0,
|
|
63
|
+
userAgent: track.userAgent ?? ''
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function checkModule() {
|
|
67
|
+
if (!_NativeGliphPlayer.default) {
|
|
68
|
+
throw new Error('[RNGliphPlayer] Native module not found. ' + 'Ensure you have rebuilt the app after installing the library and ' + 'that you are not calling player methods before the JSI bridge is ready.');
|
|
69
|
+
}
|
|
70
|
+
return _NativeGliphPlayer.default;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ─── GliphPlayer API ─────────────────────────────────────────────────────────
|
|
74
|
+
|
|
75
|
+
const GliphPlayer = {
|
|
76
|
+
// ── Setup ──────────────────────────────────────────────────────────────────
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Initialize the player. Must be called once before any other method.
|
|
80
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
81
|
+
*/
|
|
82
|
+
async setupPlayer(options = {}) {
|
|
83
|
+
if (!_NativeGliphPlayer.default) {
|
|
84
|
+
throw new Error('[RNGliphPlayer] Native module not ready. Ensure setup is called after app initialization.');
|
|
85
|
+
}
|
|
86
|
+
const opts = {
|
|
87
|
+
minBuffer: options.minBuffer ?? 15,
|
|
88
|
+
maxBuffer: options.maxBuffer ?? 50,
|
|
89
|
+
playBuffer: options.playBuffer ?? 2.5,
|
|
90
|
+
backBuffer: options.backBuffer ?? 0,
|
|
91
|
+
maxCacheSize: options.maxCacheSize ?? 0,
|
|
92
|
+
iosCategory: options.iosCategory ?? 'playback',
|
|
93
|
+
iosCategoryMode: options.iosCategoryMode ?? 'default',
|
|
94
|
+
iosCategoryOptions: options.iosCategoryOptions ?? [],
|
|
95
|
+
waitForBuffer: options.waitForBuffer ?? true,
|
|
96
|
+
autoHandleInterruptions: options.autoHandleInterruptions ?? false,
|
|
97
|
+
autoUpdateMetadata: options.autoUpdateMetadata ?? true,
|
|
98
|
+
progressUpdateEventInterval: options.progressUpdateEventInterval ?? 1.0,
|
|
99
|
+
android: options.android ?? {}
|
|
100
|
+
};
|
|
101
|
+
return _NativeGliphPlayer.default.setupPlayer(opts);
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Destroy the player and release all resources.
|
|
105
|
+
*/
|
|
106
|
+
destroy() {
|
|
107
|
+
checkModule().destroy();
|
|
108
|
+
_emitter = null;
|
|
109
|
+
},
|
|
110
|
+
/**
|
|
111
|
+
* Returns true if the background service is running (Android).
|
|
112
|
+
*/
|
|
113
|
+
async isServiceRunning() {
|
|
114
|
+
if (_reactNative.Platform.OS !== 'android') {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
return checkModule().isServiceRunning();
|
|
118
|
+
},
|
|
119
|
+
// ── Queue management ───────────────────────────────────────────────────────
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Add one or more tracks to the queue.
|
|
123
|
+
* @param tracks Single track or array of tracks.
|
|
124
|
+
* @param insertBeforeIndex Insert position. Defaults to end of queue.
|
|
125
|
+
* @returns The index of the first inserted track.
|
|
126
|
+
*/
|
|
127
|
+
async add(tracks, insertBeforeIndex) {
|
|
128
|
+
const arr = Array.isArray(tracks) ? tracks : [tracks];
|
|
129
|
+
const serialized = arr.map(serializeTrack);
|
|
130
|
+
// Pass -1 as sentinel for "append to end" — Codegen doesn't support optional number params
|
|
131
|
+
const result = await checkModule().add(serialized, insertBeforeIndex ?? -1);
|
|
132
|
+
return result;
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Remove tracks by their IDs.
|
|
136
|
+
*/
|
|
137
|
+
async remove(trackIds) {
|
|
138
|
+
const ids = Array.isArray(trackIds) ? trackIds : [trackIds];
|
|
139
|
+
return checkModule().remove(ids);
|
|
140
|
+
},
|
|
141
|
+
/**
|
|
142
|
+
* Remove all tracks after the current one.
|
|
143
|
+
*/
|
|
144
|
+
async removeUpcomingTracks() {
|
|
145
|
+
return checkModule().removeUpcomingTracks();
|
|
146
|
+
},
|
|
147
|
+
/**
|
|
148
|
+
* Skip to a specific queue index.
|
|
149
|
+
*/
|
|
150
|
+
async skip(index, initialPosition) {
|
|
151
|
+
return checkModule().skip(index, initialPosition ?? -1);
|
|
152
|
+
},
|
|
153
|
+
/**
|
|
154
|
+
* Skip to the next track.
|
|
155
|
+
*/
|
|
156
|
+
async skipToNext(initialPosition) {
|
|
157
|
+
return checkModule().skipToNext(initialPosition ?? -1);
|
|
158
|
+
},
|
|
159
|
+
/**
|
|
160
|
+
* Skip to the previous track.
|
|
161
|
+
*/
|
|
162
|
+
async skipToPrevious(initialPosition) {
|
|
163
|
+
return checkModule().skipToPrevious(initialPosition ?? -1);
|
|
164
|
+
},
|
|
165
|
+
/**
|
|
166
|
+
* Move a track from one index to another.
|
|
167
|
+
*/
|
|
168
|
+
async move(fromIndex, toIndex) {
|
|
169
|
+
return checkModule().move(fromIndex, toIndex);
|
|
170
|
+
},
|
|
171
|
+
// ── Playback control ───────────────────────────────────────────────────────
|
|
172
|
+
|
|
173
|
+
async play() {
|
|
174
|
+
return checkModule().play();
|
|
175
|
+
},
|
|
176
|
+
async pause() {
|
|
177
|
+
return checkModule().pause();
|
|
178
|
+
},
|
|
179
|
+
async stop() {
|
|
180
|
+
return checkModule().stop();
|
|
181
|
+
},
|
|
182
|
+
/**
|
|
183
|
+
* Stop playback and clear the queue.
|
|
184
|
+
*/
|
|
185
|
+
async reset() {
|
|
186
|
+
return checkModule().reset();
|
|
187
|
+
},
|
|
188
|
+
/**
|
|
189
|
+
* Seek to an absolute position in seconds.
|
|
190
|
+
*/
|
|
191
|
+
async seekTo(position) {
|
|
192
|
+
return checkModule().seekTo(position);
|
|
193
|
+
},
|
|
194
|
+
/**
|
|
195
|
+
* Seek by a relative offset in seconds (positive = forward, negative = back).
|
|
196
|
+
*/
|
|
197
|
+
async seekBy(offset) {
|
|
198
|
+
return checkModule().seekBy(offset);
|
|
199
|
+
},
|
|
200
|
+
/**
|
|
201
|
+
* Set volume (0.0 – 1.0).
|
|
202
|
+
*/
|
|
203
|
+
async setVolume(volume) {
|
|
204
|
+
if (volume < 0 || volume > 1) {
|
|
205
|
+
throw new Error('Volume must be between 0 and 1');
|
|
206
|
+
}
|
|
207
|
+
return checkModule().setVolume(volume);
|
|
208
|
+
},
|
|
209
|
+
async getVolume() {
|
|
210
|
+
return checkModule().getVolume();
|
|
211
|
+
},
|
|
212
|
+
/**
|
|
213
|
+
* Set playback rate (1.0 = normal speed).
|
|
214
|
+
*/
|
|
215
|
+
async setRate(rate) {
|
|
216
|
+
return checkModule().setRate(rate);
|
|
217
|
+
},
|
|
218
|
+
async getRate() {
|
|
219
|
+
return checkModule().getRate();
|
|
220
|
+
},
|
|
221
|
+
async setRepeatMode(mode) {
|
|
222
|
+
return checkModule().setRepeatMode(mode);
|
|
223
|
+
},
|
|
224
|
+
async getRepeatMode() {
|
|
225
|
+
const mode = await checkModule().getRepeatMode();
|
|
226
|
+
return mode;
|
|
227
|
+
},
|
|
228
|
+
// ── Queue getters ──────────────────────────────────────────────────────────
|
|
229
|
+
|
|
230
|
+
async getQueue() {
|
|
231
|
+
const queue = await checkModule().getQueue();
|
|
232
|
+
return queue;
|
|
233
|
+
},
|
|
234
|
+
async getActiveTrackIndex() {
|
|
235
|
+
const idx = await checkModule().getActiveTrackIndex();
|
|
236
|
+
// Native returns -1 as sentinel when no track is active
|
|
237
|
+
return idx < 0 ? null : idx;
|
|
238
|
+
},
|
|
239
|
+
async getActiveTrack() {
|
|
240
|
+
const track = await checkModule().getActiveTrack();
|
|
241
|
+
return track;
|
|
242
|
+
},
|
|
243
|
+
async getTrack(index) {
|
|
244
|
+
const track = await checkModule().getTrack(index);
|
|
245
|
+
return track;
|
|
246
|
+
},
|
|
247
|
+
async getQueueSize() {
|
|
248
|
+
return checkModule().getQueueSize();
|
|
249
|
+
},
|
|
250
|
+
// ── State / progress ───────────────────────────────────────────────────────
|
|
251
|
+
|
|
252
|
+
async getPlaybackState() {
|
|
253
|
+
const state = await checkModule().getPlaybackState();
|
|
254
|
+
return state;
|
|
255
|
+
},
|
|
256
|
+
async getProgress() {
|
|
257
|
+
const progress = await checkModule().getProgress();
|
|
258
|
+
return progress;
|
|
259
|
+
},
|
|
260
|
+
// ── Metadata ───────────────────────────────────────────────────────────────
|
|
261
|
+
|
|
262
|
+
async updateMetadataForTrack(index, metadata) {
|
|
263
|
+
return checkModule().updateMetadataForTrack(index, metadata);
|
|
264
|
+
},
|
|
265
|
+
async clearNowPlayingMetadata() {
|
|
266
|
+
return checkModule().clearNowPlayingMetadata();
|
|
267
|
+
},
|
|
268
|
+
async updateNowPlayingMetadata(metadata) {
|
|
269
|
+
return checkModule().updateNowPlayingMetadata(metadata);
|
|
270
|
+
},
|
|
271
|
+
// ── Options / notification ─────────────────────────────────────────────────
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Configure notification capabilities, jump intervals, etc.
|
|
275
|
+
*/
|
|
276
|
+
async updateOptions(options) {
|
|
277
|
+
return checkModule().updateOptions(options);
|
|
278
|
+
},
|
|
279
|
+
// ── Event subscription ─────────────────────────────────────────────────────
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Subscribe to a player event.
|
|
283
|
+
* Returns an unsubscribe function — call it to remove the listener.
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* const unsub = GliphPlayer.addEventListener(Event.PlaybackState, ({ state }) => {
|
|
287
|
+
* console.log('State:', state);
|
|
288
|
+
* });
|
|
289
|
+
* // later:
|
|
290
|
+
* unsub();
|
|
291
|
+
*/
|
|
292
|
+
addEventListener(event, listener) {
|
|
293
|
+
const subscription = getEmitter().addListener(event, listener);
|
|
294
|
+
return () => subscription.remove();
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
var _default = exports.default = GliphPlayer; // ─── Convenience state helpers ────────────────────────────────────────────────
|
|
298
|
+
function isPlaying(state) {
|
|
299
|
+
return state === _types.State.Playing;
|
|
300
|
+
}
|
|
301
|
+
function isPaused(state) {
|
|
302
|
+
return state === _types.State.Paused;
|
|
303
|
+
}
|
|
304
|
+
function isBuffering(state) {
|
|
305
|
+
return state === _types.State.Buffering || state === _types.State.Loading;
|
|
306
|
+
}
|
|
307
|
+
function isStopped(state) {
|
|
308
|
+
return state === _types.State.Stopped || state === _types.State.None;
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=GliphPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeGliphPlayer","_interopRequireDefault","_types","e","__esModule","default","_emitter","getEmitter","NativeGliphPlayer","Error","NativeEventEmitter","resolveAssetSource","source","Image","uri","serializeTrack","track","id","Date","now","Math","random","toString","slice","url","title","artist","album","artwork","duration","genre","date","description","rating","isLiveStream","headers","pitchAlgorithm","userAgent","checkModule","GliphPlayer","setupPlayer","options","opts","minBuffer","maxBuffer","playBuffer","backBuffer","maxCacheSize","iosCategory","iosCategoryMode","iosCategoryOptions","waitForBuffer","autoHandleInterruptions","autoUpdateMetadata","progressUpdateEventInterval","android","destroy","isServiceRunning","Platform","OS","add","tracks","insertBeforeIndex","arr","Array","isArray","serialized","map","result","remove","trackIds","ids","removeUpcomingTracks","skip","index","initialPosition","skipToNext","skipToPrevious","move","fromIndex","toIndex","play","pause","stop","reset","seekTo","position","seekBy","offset","setVolume","volume","getVolume","setRate","rate","getRate","setRepeatMode","mode","getRepeatMode","getQueue","queue","getActiveTrackIndex","idx","getActiveTrack","getTrack","getQueueSize","getPlaybackState","state","getProgress","progress","updateMetadataForTrack","metadata","clearNowPlayingMetadata","updateNowPlayingMetadata","updateOptions","addEventListener","event","listener","subscription","addListener","_default","exports","isPlaying","State","Playing","isPaused","Paused","isBuffering","Buffering","Loading","isStopped","Stopped","None"],"sourceRoot":"..\\..\\src","sources":["GliphPlayer.ts"],"mappings":"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","ignoreList":[]}
|