@rntp/player 5.0.0-beta.1 → 5.0.0-beta.3

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 (36) hide show
  1. package/RNTPPlayer.podspec +1 -0
  2. package/android/src/main/java/com/doublesymmetry/trackplayer/TrackPlayerModule.kt +61 -1
  3. package/android/src/main/java/com/doublesymmetry/trackplayer/TrackPlayerPlaybackService.kt +148 -0
  4. package/android/src/main/java/com/doublesymmetry/trackplayer/models/EmitEventType.kt +11 -0
  5. package/ios/CarPlay/BrowseTreeStore.swift +40 -0
  6. package/ios/CarPlay/RNTPCarPlaySceneDelegate.swift +254 -0
  7. package/ios/TrackPlayer.swift +135 -1
  8. package/ios/TrackPlayerBridge.mm +9 -0
  9. package/ios/models/EmitEvent.swift +10 -0
  10. package/lib/commonjs/NativeTrackPlayer.js.map +1 -1
  11. package/lib/commonjs/audio.js +58 -5
  12. package/lib/commonjs/audio.js.map +1 -1
  13. package/lib/commonjs/events/SleepTimerTriggered.js +2 -0
  14. package/lib/commonjs/events/SleepTimerTriggered.js.map +1 -0
  15. package/lib/commonjs/events/index.js +13 -0
  16. package/lib/commonjs/events/index.js.map +1 -1
  17. package/lib/module/NativeTrackPlayer.js.map +1 -1
  18. package/lib/module/audio.js +54 -5
  19. package/lib/module/audio.js.map +1 -1
  20. package/lib/module/events/SleepTimerTriggered.js +2 -0
  21. package/lib/module/events/SleepTimerTriggered.js.map +1 -0
  22. package/lib/module/events/index.js +2 -0
  23. package/lib/module/events/index.js.map +1 -1
  24. package/lib/typescript/src/NativeTrackPlayer.d.ts +4 -0
  25. package/lib/typescript/src/NativeTrackPlayer.d.ts.map +1 -1
  26. package/lib/typescript/src/audio.d.ts +46 -4
  27. package/lib/typescript/src/audio.d.ts.map +1 -1
  28. package/lib/typescript/src/events/SleepTimerTriggered.d.ts +5 -0
  29. package/lib/typescript/src/events/SleepTimerTriggered.d.ts.map +1 -0
  30. package/lib/typescript/src/events/index.d.ts +5 -1
  31. package/lib/typescript/src/events/index.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/src/NativeTrackPlayer.ts +6 -0
  34. package/src/audio.ts +67 -6
  35. package/src/events/SleepTimerTriggered.ts +4 -0
  36. package/src/events/index.ts +4 -0
@@ -137,17 +137,59 @@ export declare function setShuffleEnabled(enabled: boolean): void;
137
137
  /** Update the HTTP headers used for progress sync POST requests. */
138
138
  export declare function updateProgressSyncHeaders(headers: Record<string, string>): void;
139
139
  /**
140
- * Set the media browse tree for Android Auto and other media browsers.
141
- * Each category becomes a top-level browsable folder; its items are playable leaves.
140
+ * Set the media browse tree for Android Auto and CarPlay.
141
+ * Each category becomes a top-level browsable folder (Android Auto) or tab (CarPlay);
142
+ * its items are playable leaves.
142
143
  *
143
- * When a user selects an item in Android Auto, the native player loads and plays it
144
+ * When a user selects an item, the native player loads and plays it
144
145
  * without JS intervention.
145
146
  *
146
147
  * @remarks
147
- * - On iOS this is a no-op (CarPlay uses MPPlayableContentManager, not MediaBrowserService)
148
+ * - On CarPlay, a maximum of 4 tabs are shown. If more than 4 categories are provided,
149
+ * the first 3 become tabs and the rest are grouped under a "More" tab.
148
150
  * - Call again to update the tree (e.g. after loading new content)
149
151
  */
150
152
  export declare function setBrowseTree(categories: BrowseCategory[]): void;
153
+ /**
154
+ * Sets a countdown sleep timer. Playback pauses after `seconds` of wall clock time.
155
+ * The timer keeps counting even if playback is paused.
156
+ *
157
+ * @param seconds Duration in seconds before playback pauses.
158
+ * @param options.fadeOutSeconds Gradually reduce volume over the last N seconds.
159
+ * Clamped to `seconds` if it exceeds it. Defaults to 0 (no fade).
160
+ *
161
+ * @remarks Cancels any existing sleep timer (last one wins).
162
+ */
163
+ export declare function sleepAfterTime(seconds: number, options?: {
164
+ fadeOutSeconds?: number;
165
+ }): void;
166
+ /**
167
+ * Pauses playback after the media item at `index` finishes playing.
168
+ *
169
+ * @param index Queue index of the target media item. Defaults to the active item.
170
+ *
171
+ * @remarks
172
+ * - Cancels any existing sleep timer (last one wins).
173
+ * - Index is absolute — queue mutations after setting may shift which item it points to.
174
+ * - No fade-out support (no known time horizon).
175
+ */
176
+ export declare function sleepAfterMediaItemAtIndex(index?: number): void;
177
+ /**
178
+ * Returns the current sleep timer state, or `null` if none is active.
179
+ */
180
+ export declare function getSleepTimer(): {
181
+ type: 'time';
182
+ remainingSeconds: number;
183
+ fadeOutSeconds: number;
184
+ } | {
185
+ type: 'mediaItem';
186
+ index: number;
187
+ } | null;
188
+ /**
189
+ * Cancels the active sleep timer. If a volume fade is in progress,
190
+ * restores the original volume immediately.
191
+ */
192
+ export declare function cancelSleepTimer(): void;
151
193
  /**
152
194
  * Tears down the player and releases all resources.
153
195
  * After calling this, you must call `setupPlayer()` again to use the player.
@@ -1 +1 @@
1
- {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../src/audio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../src/audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface SleepTimerTriggeredEvent {
2
+ /** Which sleep timer mode triggered: countdown or media-item boundary. */
3
+ type: 'time' | 'mediaItem';
4
+ }
5
+ //# sourceMappingURL=SleepTimerTriggered.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SleepTimerTriggered.d.ts","sourceRoot":"","sources":["../../../../src/events/SleepTimerTriggered.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B"}
@@ -10,6 +10,7 @@ import type { RemotePlayEvent, RemotePauseEvent, RemoteNextEvent, RemotePrevious
10
10
  import type { PlaybackErrorEvent } from './PlaybackError';
11
11
  import type { PlaybackProgressUpdatedEvent } from './PlaybackProgressUpdated';
12
12
  import type { QueueChangedEvent } from './QueueChanged';
13
+ import type { SleepTimerTriggeredEvent } from './SleepTimerTriggered';
13
14
  export declare enum Event {
14
15
  PlaybackStateChanged = "event.playback-state-changed",
15
16
  IsPlayingChanged = "event.is-playing-changed",
@@ -25,7 +26,8 @@ export declare enum Event {
25
26
  RemoteStop = "event.remote-stop",
26
27
  RemoteSeek = "event.remote-seek",
27
28
  RemoteSkipForward = "event.remote-skip-forward",
28
- RemoteSkipBackward = "event.remote-skip-backward"
29
+ RemoteSkipBackward = "event.remote-skip-backward",
30
+ SleepTimerTriggered = "event.sleep-timer-triggered"
29
31
  }
30
32
  export type EventPayloadByEvent = {
31
33
  [Event.PlaybackStateChanged]: PlaybackStateChangedEvent;
@@ -43,6 +45,7 @@ export type EventPayloadByEvent = {
43
45
  [Event.RemoteSeek]: RemoteSeekEvent;
44
46
  [Event.RemoteSkipForward]: RemoteSkipForwardEvent;
45
47
  [Event.RemoteSkipBackward]: RemoteSkipBackwardEvent;
48
+ [Event.SleepTimerTriggered]: SleepTimerTriggeredEvent;
46
49
  };
47
50
  type Simplify<T> = {
48
51
  [KeyType in keyof T]: T[KeyType];
@@ -64,4 +67,5 @@ export * from './RemoteControl';
64
67
  export * from './PlaybackError';
65
68
  export * from './PlaybackProgressUpdated';
66
69
  export * from './QueueChanged';
70
+ export * from './SleepTimerTriggered';
67
71
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/events/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/events/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rntp/player",
3
- "version": "5.0.0-beta.1",
3
+ "version": "5.0.0-beta.3",
4
4
  "description": "The premium audio player for React Native",
5
5
  "source": "./src/index.tsx",
6
6
  "react-native": "./src/index.tsx",
@@ -76,6 +76,12 @@ export interface Spec extends TurboModule {
76
76
  // Progress Sync
77
77
  updateProgressSyncHeaders(headers: UnsafeObject): void;
78
78
 
79
+ // Sleep Timer
80
+ sleepAfterTime(seconds: number, fadeOutSeconds: number): void;
81
+ sleepAfterMediaItemAtIndex(index: number): void;
82
+ getSleepTimer(): UnsafeObject | null;
83
+ cancelSleepTimer(): void;
84
+
79
85
  // Destroy
80
86
  destroy(): void;
81
87
 
package/src/audio.ts CHANGED
@@ -413,19 +413,19 @@ export function updateProgressSyncHeaders(
413
413
  // ─── Browse Tree ─────────────────────────────────────
414
414
 
415
415
  /**
416
- * Set the media browse tree for Android Auto and other media browsers.
417
- * Each category becomes a top-level browsable folder; its items are playable leaves.
416
+ * Set the media browse tree for Android Auto and CarPlay.
417
+ * Each category becomes a top-level browsable folder (Android Auto) or tab (CarPlay);
418
+ * its items are playable leaves.
418
419
  *
419
- * When a user selects an item in Android Auto, the native player loads and plays it
420
+ * When a user selects an item, the native player loads and plays it
420
421
  * without JS intervention.
421
422
  *
422
423
  * @remarks
423
- * - On iOS this is a no-op (CarPlay uses MPPlayableContentManager, not MediaBrowserService)
424
+ * - On CarPlay, a maximum of 4 tabs are shown. If more than 4 categories are provided,
425
+ * the first 3 become tabs and the rest are grouped under a "More" tab.
424
426
  * - Call again to update the tree (e.g. after loading new content)
425
427
  */
426
428
  export function setBrowseTree(categories: BrowseCategory[]): void {
427
- if (Platform.OS !== 'android') return;
428
-
429
429
  const resolved = categories.map((cat) => ({
430
430
  ...cat,
431
431
  items: cat.items.map(resolveMediaItem),
@@ -433,6 +433,67 @@ export function setBrowseTree(categories: BrowseCategory[]): void {
433
433
  TrackPlayer.setBrowseTree(resolved);
434
434
  }
435
435
 
436
+ // ─── Sleep Timer ─────────────────────────────────────
437
+
438
+ /**
439
+ * Sets a countdown sleep timer. Playback pauses after `seconds` of wall clock time.
440
+ * The timer keeps counting even if playback is paused.
441
+ *
442
+ * @param seconds Duration in seconds before playback pauses.
443
+ * @param options.fadeOutSeconds Gradually reduce volume over the last N seconds.
444
+ * Clamped to `seconds` if it exceeds it. Defaults to 0 (no fade).
445
+ *
446
+ * @remarks Cancels any existing sleep timer (last one wins).
447
+ */
448
+ export function sleepAfterTime(
449
+ seconds: number,
450
+ options?: { fadeOutSeconds?: number }
451
+ ): void {
452
+ TrackPlayer.sleepAfterTime(seconds, options?.fadeOutSeconds ?? 0);
453
+ }
454
+
455
+ /**
456
+ * Pauses playback after the media item at `index` finishes playing.
457
+ *
458
+ * @param index Queue index of the target media item. Defaults to the active item.
459
+ *
460
+ * @remarks
461
+ * - Cancels any existing sleep timer (last one wins).
462
+ * - Index is absolute — queue mutations after setting may shift which item it points to.
463
+ * - No fade-out support (no known time horizon).
464
+ */
465
+ export function sleepAfterMediaItemAtIndex(index?: number): void {
466
+ const resolvedIndex = index ?? getActiveMediaItemIndex() ?? 0;
467
+ TrackPlayer.sleepAfterMediaItemAtIndex(resolvedIndex);
468
+ }
469
+
470
+ /**
471
+ * Returns the current sleep timer state, or `null` if none is active.
472
+ */
473
+ export function getSleepTimer():
474
+ | {
475
+ type: 'time';
476
+ remainingSeconds: number;
477
+ fadeOutSeconds: number;
478
+ }
479
+ | {
480
+ type: 'mediaItem';
481
+ index: number;
482
+ }
483
+ | null {
484
+ const result = TrackPlayer.getSleepTimer();
485
+ if (result == null) return null;
486
+ return result as any;
487
+ }
488
+
489
+ /**
490
+ * Cancels the active sleep timer. If a volume fade is in progress,
491
+ * restores the original volume immediately.
492
+ */
493
+ export function cancelSleepTimer(): void {
494
+ TrackPlayer.cancelSleepTimer();
495
+ }
496
+
436
497
  // ─── Destroy ─────────────────────────────────────────
437
498
 
438
499
  /**
@@ -0,0 +1,4 @@
1
+ export interface SleepTimerTriggeredEvent {
2
+ /** Which sleep timer mode triggered: countdown or media-item boundary. */
3
+ type: 'time' | 'mediaItem';
4
+ }
@@ -20,6 +20,7 @@ import type {
20
20
  import type { PlaybackErrorEvent } from './PlaybackError';
21
21
  import type { PlaybackProgressUpdatedEvent } from './PlaybackProgressUpdated';
22
22
  import type { QueueChangedEvent } from './QueueChanged';
23
+ import type { SleepTimerTriggeredEvent } from './SleepTimerTriggered';
23
24
 
24
25
  export enum Event {
25
26
  PlaybackStateChanged = 'event.playback-state-changed',
@@ -37,6 +38,7 @@ export enum Event {
37
38
  RemoteSeek = 'event.remote-seek',
38
39
  RemoteSkipForward = 'event.remote-skip-forward',
39
40
  RemoteSkipBackward = 'event.remote-skip-backward',
41
+ SleepTimerTriggered = 'event.sleep-timer-triggered',
40
42
  }
41
43
 
42
44
  export type EventPayloadByEvent = {
@@ -55,6 +57,7 @@ export type EventPayloadByEvent = {
55
57
  [Event.RemoteSeek]: RemoteSeekEvent;
56
58
  [Event.RemoteSkipForward]: RemoteSkipForwardEvent;
57
59
  [Event.RemoteSkipBackward]: RemoteSkipBackwardEvent;
60
+ [Event.SleepTimerTriggered]: SleepTimerTriggeredEvent;
58
61
  };
59
62
 
60
63
  type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
@@ -77,3 +80,4 @@ export * from './RemoteControl';
77
80
  export * from './PlaybackError';
78
81
  export * from './PlaybackProgressUpdated';
79
82
  export * from './QueueChanged';
83
+ export * from './SleepTimerTriggered';