@5stones/react-native-audio-browser 0.1.4 → 0.1.6
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/android/src/main/java/com/audiobrowser/player/MediaFactory.kt +11 -71
- package/android/src/main/java/com/audiobrowser/player/TransformingDataSource.kt +125 -0
- package/ios/Browser/BrowserManager.swift +17 -2
- package/ios/TrackPlayer.swift +145 -31
- package/lib/commonjs/features/browser.js.map +1 -1
- package/lib/commonjs/features/equalizer.js.map +1 -1
- package/lib/commonjs/features/errors.js.map +1 -1
- package/lib/commonjs/features/favorites.js.map +1 -1
- package/lib/commonjs/features/metadata.js.map +1 -1
- package/lib/commonjs/features/nowPlaying.js.map +1 -1
- package/lib/commonjs/features/output.js.map +1 -1
- package/lib/commonjs/features/playback/state.js.map +1 -1
- package/lib/commonjs/features/player/options.js.map +1 -1
- package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
- package/lib/commonjs/features/queue/queue.js +1 -1
- package/lib/commonjs/features/queue/queue.js.map +1 -1
- package/lib/commonjs/features/remoteControls.js.map +1 -1
- package/lib/commonjs/utils/useDebug.js.map +1 -1
- package/lib/commonjs/utils/validation.js +23 -0
- package/lib/commonjs/utils/validation.js.map +1 -0
- package/lib/commonjs/web/NativeAudioBrowser.js +53 -15
- package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
- package/lib/commonjs/web/SimpleRouter.js +5 -4
- package/lib/commonjs/web/SimpleRouter.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/Player.js +49 -24
- package/lib/commonjs/web/TrackPlayer/Player.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js +54 -45
- package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/State.js.map +1 -1
- package/lib/commonjs/web/browser/BrowserManager.js +10 -17
- package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
- package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -1
- package/lib/commonjs/web/browser/NavigationErrorManager.js.map +1 -1
- package/lib/commonjs/web/browser/SearchManager.js.map +1 -1
- package/lib/commonjs/web/http/HttpClient.js +15 -2
- package/lib/commonjs/web/http/HttpClient.js.map +1 -1
- package/lib/commonjs/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/commonjs/web/player/NowPlayingManager.js +9 -0
- package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
- package/lib/commonjs/web/player/OptionsManager.js +1 -1
- package/lib/commonjs/web/player/OptionsManager.js.map +1 -1
- package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -1
- package/lib/module/features/browser.js.map +1 -1
- package/lib/module/features/equalizer.js.map +1 -1
- package/lib/module/features/errors.js.map +1 -1
- package/lib/module/features/favorites.js.map +1 -1
- package/lib/module/features/metadata.js.map +1 -1
- package/lib/module/features/nowPlaying.js +1 -0
- package/lib/module/features/nowPlaying.js.map +1 -1
- package/lib/module/features/output.js.map +1 -1
- package/lib/module/features/playback/state.js.map +1 -1
- package/lib/module/features/player/options.js.map +1 -1
- package/lib/module/features/queue/activeTrack.js.map +1 -1
- package/lib/module/features/queue/queue.js +1 -1
- package/lib/module/features/queue/queue.js.map +1 -1
- package/lib/module/features/remoteControls.js.map +1 -1
- package/lib/module/utils/useDebug.js.map +1 -1
- package/lib/module/utils/validation.js +18 -0
- package/lib/module/utils/validation.js.map +1 -0
- package/lib/module/web/NativeAudioBrowser.js +53 -15
- package/lib/module/web/NativeAudioBrowser.js.map +1 -1
- package/lib/module/web/SimpleRouter.js +5 -4
- package/lib/module/web/SimpleRouter.js.map +1 -1
- package/lib/module/web/TrackPlayer/Player.js +49 -24
- package/lib/module/web/TrackPlayer/Player.js.map +1 -1
- package/lib/module/web/TrackPlayer/PlaylistPlayer.js +54 -45
- package/lib/module/web/TrackPlayer/PlaylistPlayer.js.map +1 -1
- package/lib/module/web/TrackPlayer/State.js.map +1 -1
- package/lib/module/web/browser/BrowserManager.js +10 -17
- package/lib/module/web/browser/BrowserManager.js.map +1 -1
- package/lib/module/web/browser/FavoriteManager.js.map +1 -1
- package/lib/module/web/browser/NavigationErrorManager.js.map +1 -1
- package/lib/module/web/browser/SearchManager.js.map +1 -1
- package/lib/module/web/http/HttpClient.js +15 -2
- package/lib/module/web/http/HttpClient.js.map +1 -1
- package/lib/module/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/module/web/player/NowPlayingManager.js +9 -0
- package/lib/module/web/player/NowPlayingManager.js.map +1 -1
- package/lib/module/web/player/OptionsManager.js +1 -1
- package/lib/module/web/player/OptionsManager.js.map +1 -1
- package/lib/module/web/util/BrowserPathHelper.js.map +1 -1
- package/lib/typescript/src/features/browser.d.ts.map +1 -1
- package/lib/typescript/src/features/equalizer.d.ts.map +1 -1
- package/lib/typescript/src/features/errors.d.ts.map +1 -1
- package/lib/typescript/src/features/favorites.d.ts.map +1 -1
- package/lib/typescript/src/features/metadata.d.ts +1 -1
- package/lib/typescript/src/features/metadata.d.ts.map +1 -1
- package/lib/typescript/src/features/nowPlaying.d.ts +1 -1
- package/lib/typescript/src/features/nowPlaying.d.ts.map +1 -1
- package/lib/typescript/src/features/output.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/state.d.ts +1 -1
- package/lib/typescript/src/features/playback/state.d.ts.map +1 -1
- package/lib/typescript/src/features/player/options.d.ts +1 -1
- package/lib/typescript/src/features/player/options.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
- package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts.map +1 -1
- package/lib/typescript/src/utils/useDebug.d.ts +1 -1
- package/lib/typescript/src/utils/useDebug.d.ts.map +1 -1
- package/lib/typescript/src/utils/validation.d.ts +3 -0
- package/lib/typescript/src/utils/validation.d.ts.map +1 -0
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts +6 -1
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +1 -1
- package/lib/typescript/src/web/SimpleRouter.d.ts.map +1 -1
- package/lib/typescript/src/web/TrackPlayer/Player.d.ts +7 -19
- package/lib/typescript/src/web/TrackPlayer/Player.d.ts.map +1 -1
- package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts +3 -3
- package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts.map +1 -1
- package/lib/typescript/src/web/browser/BrowserManager.d.ts.map +1 -1
- package/lib/typescript/src/web/browser/FavoriteManager.d.ts.map +1 -1
- package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts.map +1 -1
- package/lib/typescript/src/web/browser/SearchManager.d.ts +1 -1
- package/lib/typescript/src/web/browser/SearchManager.d.ts.map +1 -1
- package/lib/typescript/src/web/http/HttpClient.d.ts.map +1 -1
- package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts.map +1 -1
- package/lib/typescript/src/web/player/NowPlayingManager.d.ts.map +1 -1
- package/lib/typescript/src/web/player/OptionsManager.d.ts.map +1 -1
- package/lib/typescript/src/web/util/BrowserPathHelper.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/features/browser.ts +1 -1
- package/src/features/equalizer.ts +1 -1
- package/src/features/errors.ts +1 -1
- package/src/features/favorites.ts +1 -1
- package/src/features/metadata.ts +1 -1
- package/src/features/nowPlaying.ts +1 -1
- package/src/features/output.ts +1 -1
- package/src/features/playback/state.ts +1 -1
- package/src/features/player/options.ts +2 -2
- package/src/features/queue/activeTrack.ts +1 -1
- package/src/features/queue/queue.ts +2 -2
- package/src/features/remoteControls.ts +2 -2
- package/src/specs/audio-browser.nitro.ts +0 -1
- package/src/utils/useDebug.ts +6 -6
- package/src/utils/validation.ts +27 -0
- package/src/web/NativeAudioBrowser.ts +137 -58
- package/src/web/SimpleRouter.ts +24 -9
- package/src/web/TrackPlayer/Player.ts +58 -30
- package/src/web/TrackPlayer/PlaylistPlayer.ts +72 -63
- package/src/web/TrackPlayer/RepeatMode.ts +1 -1
- package/src/web/TrackPlayer/State.ts +9 -9
- package/src/web/browser/BrowserManager.ts +124 -67
- package/src/web/browser/FavoriteManager.ts +5 -3
- package/src/web/browser/NavigationErrorManager.ts +15 -8
- package/src/web/browser/SearchManager.ts +17 -11
- package/src/web/http/HttpClient.ts +25 -7
- package/src/web/http/RequestConfigBuilder.ts +29 -13
- package/src/web/player/NowPlayingManager.ts +13 -7
- package/src/web/player/OptionsManager.ts +7 -6
- package/src/web/util/BrowserPathHelper.ts +3 -2
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* - Most specific route wins
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
import { assertedNotNullish } from '../utils/validation';
|
|
19
20
|
export class SimpleRouter {
|
|
20
21
|
/**
|
|
21
22
|
* Finds the best matching route for the given path.
|
|
@@ -67,12 +68,12 @@ export class SimpleRouter {
|
|
|
67
68
|
|
|
68
69
|
// Match all segments except the tail wildcard
|
|
69
70
|
for (let i = 0; i < patternSegments.length - 1; i++) {
|
|
70
|
-
if (!this.matchSingleSegment(patternSegments[i], pathSegments[i], params)) {
|
|
71
|
+
if (!this.matchSingleSegment(assertedNotNullish(patternSegments[i]), assertedNotNullish(pathSegments[i]), params)) {
|
|
71
72
|
return null;
|
|
72
73
|
}
|
|
73
74
|
// Note: The Kotlin implementation doesn't update counts here (appears to be a bug)
|
|
74
75
|
// but we'll match it exactly for consistency
|
|
75
|
-
this.updateSegmentCounts(patternSegments[i], constantSegments, parameterSegments, wildcardSegments);
|
|
76
|
+
this.updateSegmentCounts(assertedNotNullish(patternSegments[i]), constantSegments, parameterSegments, wildcardSegments);
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
// Capture remaining path segments as "tail" parameter
|
|
@@ -86,10 +87,10 @@ export class SimpleRouter {
|
|
|
86
87
|
return null;
|
|
87
88
|
}
|
|
88
89
|
for (let i = 0; i < patternSegments.length; i++) {
|
|
89
|
-
if (!this.matchSingleSegment(patternSegments[i], pathSegments[i], params)) {
|
|
90
|
+
if (!this.matchSingleSegment(assertedNotNullish(patternSegments[i]), assertedNotNullish(pathSegments[i]), params)) {
|
|
90
91
|
return null;
|
|
91
92
|
}
|
|
92
|
-
const [constCount, paramCount, wildcardCount] = this.updateSegmentCounts(patternSegments[i], constantSegments, parameterSegments, wildcardSegments);
|
|
93
|
+
const [constCount, paramCount, wildcardCount] = this.updateSegmentCounts(assertedNotNullish(patternSegments[i]), constantSegments, parameterSegments, wildcardSegments);
|
|
93
94
|
constantSegments = constCount;
|
|
94
95
|
parameterSegments = paramCount;
|
|
95
96
|
wildcardSegments = wildcardCount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SimpleRouter","findBestMatch","path","routes","matches","pattern","Object","keys","match","matchPattern","push","length","reduce","best","current","specificity","patternSegments","split","filter","s","pathSegments","params","constantSegments","parameterSegments","wildcardSegments","hasTailWildcard","i","matchSingleSegment","updateSegmentCounts","remainingSegments","slice","join","constCount","paramCount","wildcardCount","patternSegment","pathSegment","startsWith","endsWith","paramName","substring"],"sourceRoot":"../../../src","sources":["web/SimpleRouter.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["assertedNotNullish","SimpleRouter","findBestMatch","path","routes","matches","pattern","Object","keys","match","matchPattern","push","length","reduce","best","current","specificity","patternSegments","split","filter","s","pathSegments","params","constantSegments","parameterSegments","wildcardSegments","hasTailWildcard","i","matchSingleSegment","updateSegmentCounts","remainingSegments","slice","join","constCount","paramCount","wildcardCount","patternSegment","pathSegment","startsWith","endsWith","paramName","substring"],"sourceRoot":"../../../src","sources":["web/SimpleRouter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { State } from './State';
|
|
4
3
|
import { SetupNotCalledError } from './SetupNotCalledError';
|
|
4
|
+
import { State } from './State';
|
|
5
5
|
|
|
6
6
|
// Extend Window interface for debug purposes
|
|
7
7
|
|
|
@@ -14,7 +14,8 @@ export class Player {
|
|
|
14
14
|
_state = {
|
|
15
15
|
state: State.None
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
_isStopped = false;
|
|
18
|
+
_loadInProgress = false;
|
|
18
19
|
// current getter/setter
|
|
19
20
|
get current() {
|
|
20
21
|
return this._current;
|
|
@@ -122,6 +123,8 @@ export class Player {
|
|
|
122
123
|
* event handlers
|
|
123
124
|
*/
|
|
124
125
|
onStateUpdate(state) {
|
|
126
|
+
// Ignore Shaka/element events while stopped (e.g., from unload)
|
|
127
|
+
if (this._isStopped) return;
|
|
125
128
|
this.state = {
|
|
126
129
|
state
|
|
127
130
|
};
|
|
@@ -157,15 +160,13 @@ export class Player {
|
|
|
157
160
|
// Log the error.
|
|
158
161
|
console.debug('Error code', shakaError.code, 'object', shakaError);
|
|
159
162
|
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* NOTE: this method is sync despite the actual load being async. This
|
|
163
|
-
* behavior is intentional as it mirrors what happens in Android. State
|
|
164
|
-
* changes should be captured by event listeners.
|
|
165
|
-
*/
|
|
166
|
-
load(track, onComplete) {
|
|
163
|
+
load(track, onLoaded) {
|
|
167
164
|
const player = this.requirePlayer();
|
|
165
|
+
this._isStopped = false;
|
|
166
|
+
this._loadInProgress = true;
|
|
168
167
|
if (!track.src) {
|
|
168
|
+
this._loadInProgress = false;
|
|
169
|
+
this._pendingSeek = undefined;
|
|
169
170
|
const error = {
|
|
170
171
|
code: 'invalid_track',
|
|
171
172
|
message: 'Track does not have a valid src URL'
|
|
@@ -177,37 +178,43 @@ export class Player {
|
|
|
177
178
|
return;
|
|
178
179
|
}
|
|
179
180
|
player.load(track.src).then(() => {
|
|
181
|
+
this._loadInProgress = false;
|
|
180
182
|
this.current = track;
|
|
181
|
-
|
|
183
|
+
onLoaded?.(track);
|
|
184
|
+
|
|
185
|
+
// Execute any pending seek that arrived during loading
|
|
186
|
+
if (this._pendingSeek !== undefined) {
|
|
187
|
+
this.requireElement().currentTime = this._pendingSeek;
|
|
188
|
+
this._pendingSeek = undefined;
|
|
189
|
+
}
|
|
182
190
|
|
|
183
191
|
// Auto-play if playWhenReady is true
|
|
184
192
|
if (this.playWhenReady) {
|
|
185
193
|
this.play();
|
|
186
194
|
}
|
|
187
195
|
}).catch(err => {
|
|
196
|
+
this._loadInProgress = false;
|
|
197
|
+
this._pendingSeek = undefined;
|
|
188
198
|
this.onError(this.toNormalizedError(err));
|
|
189
199
|
});
|
|
190
200
|
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* NOTE: this method is sync despite the actual load being async. This
|
|
194
|
-
* behavior is intentional as it mirrors what happens in Android. State
|
|
195
|
-
* changes should be captured by event listeners.
|
|
196
|
-
*/
|
|
197
201
|
stop(onComplete) {
|
|
198
202
|
const player = this.requirePlayer();
|
|
199
|
-
|
|
203
|
+
|
|
204
|
+
// Match Android: stop sets playWhenReady=false and state=stopped,
|
|
205
|
+
// but keeps the current track so play() can resume.
|
|
206
|
+
this._isStopped = true;
|
|
207
|
+
this._loadInProgress = false;
|
|
208
|
+
this._pendingSeek = undefined;
|
|
209
|
+
this.playWhenReady = false;
|
|
210
|
+
this.state = {
|
|
211
|
+
state: State.Stopped
|
|
212
|
+
};
|
|
200
213
|
player.unload().then(() => onComplete?.()).catch(err => {
|
|
201
214
|
console.error('Error unloading player:', err);
|
|
202
215
|
onComplete?.(); // Still call onComplete so callers aren't left hanging
|
|
203
216
|
});
|
|
204
217
|
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* NOTE: this method is sync despite the actual load being async. This
|
|
208
|
-
* behavior is intentional as it mirrors what happens in Android. State
|
|
209
|
-
* changes should be captured by event listeners.
|
|
210
|
-
*/
|
|
211
218
|
play() {
|
|
212
219
|
const element = this.requireElement();
|
|
213
220
|
this.playWhenReady = true;
|
|
@@ -215,6 +222,12 @@ export class Player {
|
|
|
215
222
|
this.load(this.current);
|
|
216
223
|
return;
|
|
217
224
|
}
|
|
225
|
+
|
|
226
|
+
// Match Android: play() after stop() re-prepares the current track
|
|
227
|
+
if (this._isStopped && this.current) {
|
|
228
|
+
this.load(this.current);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
218
231
|
element.play().catch(err => console.error(err));
|
|
219
232
|
}
|
|
220
233
|
retry() {
|
|
@@ -244,10 +257,18 @@ export class Player {
|
|
|
244
257
|
return element.playbackRate;
|
|
245
258
|
}
|
|
246
259
|
seekBy(offset) {
|
|
260
|
+
if (this._loadInProgress) {
|
|
261
|
+
this._pendingSeek = (this._pendingSeek ?? 0) + offset;
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
247
264
|
const element = this.requireElement();
|
|
248
265
|
element.currentTime += offset;
|
|
249
266
|
}
|
|
250
267
|
seekTo(seconds) {
|
|
268
|
+
if (this._loadInProgress) {
|
|
269
|
+
this._pendingSeek = seconds;
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
251
272
|
const element = this.requireElement();
|
|
252
273
|
element.currentTime = seconds;
|
|
253
274
|
}
|
|
@@ -261,10 +282,14 @@ export class Player {
|
|
|
261
282
|
}
|
|
262
283
|
getProgress() {
|
|
263
284
|
const element = this.requireElement();
|
|
285
|
+
let buffered = 0;
|
|
286
|
+
if (element.buffered.length > 0) {
|
|
287
|
+
buffered = element.buffered.end(element.buffered.length - 1);
|
|
288
|
+
}
|
|
264
289
|
return {
|
|
265
290
|
position: element.currentTime,
|
|
266
291
|
duration: element.duration || 0,
|
|
267
|
-
buffered
|
|
292
|
+
buffered
|
|
268
293
|
};
|
|
269
294
|
}
|
|
270
295
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["SetupNotCalledError","State","Player","hasInitialized","_current","undefined","_playWhenReady","_state","state","None","_isStopped","_loadInProgress","current","cur","newState","playWhenReady","pwr","requireElement","element","requirePlayer","player","setupPlayer","_options","window","error","code","message","shaka","default","polyfill","installAll","isBrowserSupported","Error","document","createElement","setAttribute","body","appendChild","attach","addEventListener","event","errorEvent","onError","detail","onStateUpdate","Ended","Playing","Paused","Loading","Ready","bufferingEvent","buffering","Buffering","__DEV__","rnab","toNormalizedError","err","e","String","shakaError","unload","catch","console","toString","debug","load","track","onLoaded","src","_pendingSeek","then","currentTime","play","stop","onComplete","Stopped","retry","retryStreaming","pause","togglePlayback","setRate","rate","defaultPlaybackRate","playbackRate","getRate","seekBy","offset","seekTo","seconds","setVolume","volume","getVolume","getProgress","buffered","length","end","position","duration"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/Player.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { assertedNotNullish } from '../../utils/validation';
|
|
4
|
+
import { fisherYatesShuffle } from '../util/shuffle';
|
|
3
5
|
import { Player } from './Player';
|
|
4
|
-
import { State } from './State';
|
|
5
6
|
import { RepeatMode } from './RepeatMode';
|
|
6
|
-
import {
|
|
7
|
+
import { State } from './State';
|
|
7
8
|
export class PlaylistPlayer extends Player {
|
|
8
9
|
// TODO: use immer to make the `playlist` immutable
|
|
9
10
|
playlist = [];
|
|
@@ -12,6 +13,7 @@ export class PlaylistPlayer extends Player {
|
|
|
12
13
|
shuffleOrder = [];
|
|
13
14
|
onStateUpdate(state) {
|
|
14
15
|
super.onStateUpdate(state);
|
|
16
|
+
if (this._isStopped) return;
|
|
15
17
|
if (state === State.Ended) {
|
|
16
18
|
this.onTrackEnded();
|
|
17
19
|
}
|
|
@@ -50,17 +52,14 @@ export class PlaylistPlayer extends Player {
|
|
|
50
52
|
if (!track) return;
|
|
51
53
|
|
|
52
54
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
53
|
-
const
|
|
55
|
+
const onLoaded = _track => {
|
|
54
56
|
if (initialPosition !== undefined) {
|
|
55
57
|
this.seekTo(initialPosition);
|
|
56
58
|
}
|
|
57
|
-
if (this.playWhenReady) {
|
|
58
|
-
this.play();
|
|
59
|
-
}
|
|
60
59
|
};
|
|
61
60
|
if (this.currentIndex !== index) {
|
|
62
61
|
this.currentIndex = index;
|
|
63
|
-
this.load(track,
|
|
62
|
+
this.load(track, onLoaded);
|
|
64
63
|
} else {
|
|
65
64
|
// Replay the same track - seek to start (or initialPosition if specified)
|
|
66
65
|
this.seekTo(initialPosition ?? 0);
|
|
@@ -170,8 +169,8 @@ export class PlaylistPlayer extends Player {
|
|
|
170
169
|
// If there is a current track, move it to the beginning of the shuffle order
|
|
171
170
|
const currentPos = this.shuffleOrder.indexOf(this.currentIndex);
|
|
172
171
|
if (currentPos > 0) {
|
|
173
|
-
const temp = this.shuffleOrder[0];
|
|
174
|
-
this.shuffleOrder[0] = this.shuffleOrder[currentPos];
|
|
172
|
+
const temp = assertedNotNullish(this.shuffleOrder[0]);
|
|
173
|
+
this.shuffleOrder[0] = assertedNotNullish(this.shuffleOrder[currentPos]);
|
|
175
174
|
this.shuffleOrder[currentPos] = temp;
|
|
176
175
|
}
|
|
177
176
|
}
|
|
@@ -196,26 +195,39 @@ export class PlaylistPlayer extends Player {
|
|
|
196
195
|
return this.repeatMode;
|
|
197
196
|
}
|
|
198
197
|
remove(indexes) {
|
|
199
|
-
const
|
|
200
|
-
acc[elem] = true;
|
|
201
|
-
return acc;
|
|
202
|
-
}, {});
|
|
198
|
+
const idxSet = new Set(indexes);
|
|
203
199
|
let isCurrentRemoved = false;
|
|
200
|
+
let removedBeforeCurrent = 0;
|
|
204
201
|
this.playlist = this.playlist.filter((_track, idx) => {
|
|
205
|
-
const keep = !
|
|
206
|
-
if (!keep
|
|
207
|
-
|
|
202
|
+
const keep = !idxSet.has(idx);
|
|
203
|
+
if (!keep) {
|
|
204
|
+
if (idx === this.currentIndex) {
|
|
205
|
+
isCurrentRemoved = true;
|
|
206
|
+
} else if (this.currentIndex !== undefined && idx < this.currentIndex) {
|
|
207
|
+
removedBeforeCurrent++;
|
|
208
|
+
}
|
|
208
209
|
}
|
|
209
210
|
return keep;
|
|
210
211
|
});
|
|
211
212
|
if (this.currentIndex === undefined) {
|
|
212
213
|
return;
|
|
213
214
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
215
|
+
if (isCurrentRemoved) {
|
|
216
|
+
const hasItems = this.playlist.length > 0;
|
|
217
|
+
if (hasItems) {
|
|
218
|
+
// Adjust for removed items before current, then clamp to valid range
|
|
219
|
+
const adjustedIndex = this.currentIndex - removedBeforeCurrent;
|
|
220
|
+
// Reset so goToIndex always loads the new track at this position
|
|
221
|
+
this._currentIndex = undefined;
|
|
222
|
+
this.goToIndex(Math.min(adjustedIndex, this.playlist.length - 1));
|
|
223
|
+
} else {
|
|
224
|
+
this.current = undefined;
|
|
225
|
+
this._currentIndex = undefined;
|
|
226
|
+
this.stop();
|
|
227
|
+
}
|
|
228
|
+
} else {
|
|
229
|
+
// Adjust currentIndex to account for removed items before it
|
|
230
|
+
this._currentIndex = this.currentIndex - removedBeforeCurrent;
|
|
219
231
|
}
|
|
220
232
|
|
|
221
233
|
// Regenerate shuffle order when tracks are removed
|
|
@@ -224,15 +236,16 @@ export class PlaylistPlayer extends Player {
|
|
|
224
236
|
}
|
|
225
237
|
}
|
|
226
238
|
stop(onComplete) {
|
|
227
|
-
super.stop(
|
|
228
|
-
this.currentIndex = undefined;
|
|
229
|
-
onComplete?.();
|
|
230
|
-
});
|
|
239
|
+
super.stop(onComplete);
|
|
231
240
|
}
|
|
232
241
|
reset() {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
242
|
+
// Clear queue state synchronously so subsequent add()/load() calls
|
|
243
|
+
// see a clean slate. The async player.unload() in stop() can finish
|
|
244
|
+
// in the background — it only releases the Shaka source.
|
|
245
|
+
this.playlist = [];
|
|
246
|
+
this.current = undefined;
|
|
247
|
+
this._currentIndex = undefined;
|
|
248
|
+
this.stop();
|
|
236
249
|
}
|
|
237
250
|
removeUpcomingTracks() {
|
|
238
251
|
if (this.currentIndex === undefined) return;
|
|
@@ -247,27 +260,23 @@ export class PlaylistPlayer extends Player {
|
|
|
247
260
|
if (!this.playlist[fromIndex]) {
|
|
248
261
|
throw new Error('index out of bounds');
|
|
249
262
|
}
|
|
250
|
-
if (this.currentIndex === fromIndex) {
|
|
251
|
-
throw new Error('you cannot move the currently playing track');
|
|
252
|
-
}
|
|
253
|
-
if (this.currentIndex === toIndex) {
|
|
254
|
-
throw new Error('you cannot replace the currently playing track');
|
|
255
|
-
}
|
|
256
263
|
|
|
257
|
-
//
|
|
258
|
-
let shift;
|
|
259
|
-
if (this.currentIndex !== undefined && fromIndex < this.currentIndex && toIndex > this.currentIndex) {
|
|
260
|
-
shift = -1;
|
|
261
|
-
} else if (this.currentIndex !== undefined && fromIndex > this.currentIndex && toIndex < this.currentIndex) {
|
|
262
|
-
shift = 1;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// move the track
|
|
264
|
+
// Move the track in the playlist
|
|
266
265
|
const fromItem = this.playlist[fromIndex];
|
|
267
266
|
this.playlist.splice(fromIndex, 1);
|
|
268
267
|
this.playlist.splice(toIndex, 0, fromItem);
|
|
269
|
-
|
|
270
|
-
|
|
268
|
+
|
|
269
|
+
// Update currentIndex to track the currently playing item's new position.
|
|
270
|
+
// Matches Android's exoPlayer.moveMediaItem() which has no restrictions.
|
|
271
|
+
if (this.currentIndex !== undefined) {
|
|
272
|
+
if (fromIndex === this.currentIndex) {
|
|
273
|
+
// Moving the current track — follow it to its new position
|
|
274
|
+
this._currentIndex = toIndex;
|
|
275
|
+
} else if (fromIndex < this.currentIndex && toIndex >= this.currentIndex) {
|
|
276
|
+
this._currentIndex = this.currentIndex - 1;
|
|
277
|
+
} else if (fromIndex > this.currentIndex && toIndex <= this.currentIndex) {
|
|
278
|
+
this._currentIndex = this.currentIndex + 1;
|
|
279
|
+
}
|
|
271
280
|
}
|
|
272
281
|
|
|
273
282
|
// Regenerate shuffle order when tracks are moved
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["assertedNotNullish","fisherYatesShuffle","Player","RepeatMode","State","PlaylistPlayer","playlist","repeatMode","Off","shuffleEnabled","shuffleOrder","onStateUpdate","state","_isStopped","Ended","onTrackEnded","Track","currentIndex","undefined","goToIndex","Playlist","skipToNext","getNextIndex","onPlaylistEnded","console","warn","_currentIndex","current","lastIndex","index","initialPosition","track","onLoaded","_track","seekTo","load","playWhenReady","play","add","tracks","insertBeforeIndex","splice","push","generateShuffleOrder","skip","Error","nextIndex","getWrapAroundFirstIndex","skipToPrevious","previousIndex","getPreviousIndex","getWrapAroundLastIndex","length","currentShufflePos","indexOf","nextShufflePos","prevIndex","previousShufflePos","Array","from","_","i","currentPos","temp","setShuffleEnabled","enabled","getShuffleEnabled","getTrack","setRepeatMode","mode","getRepeatMode","remove","indexes","idxSet","Set","isCurrentRemoved","removedBeforeCurrent","filter","idx","keep","has","hasItems","adjustedIndex","Math","min","stop","onComplete","reset","removeUpcomingTracks","slice","move","fromIndex","toIndex","fromItem"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/PlaylistPlayer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["State","None","Ready","Playing","Paused","Stopped","Loading","Buffering","Error","Ended"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/State.ts"],"mappings":";;AAEA,OAAO,MAAMA,KAAK,GAAG;EACnBC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"names":["State","None","Ready","Playing","Paused","Stopped","Loading","Buffering","Error","Ended"],"sourceRoot":"../../../../src","sources":["web/TrackPlayer/State.ts"],"mappings":";;AAEA,OAAO,MAAMA,KAAK,GAAG;EACnBC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE,SAAS;EAClBC,SAAS,EAAE,WAAW;EACtBC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE;AACT,CAAyC","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { assertedNotNullish } from '../../utils/validation';
|
|
4
4
|
import { RequestConfigBuilder } from '../http/RequestConfigBuilder';
|
|
5
|
+
import { SimpleRouter } from '../SimpleRouter';
|
|
5
6
|
import { BrowserPathHelper } from '../util/BrowserPathHelper';
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -186,15 +187,10 @@ export class BrowserManager {
|
|
|
186
187
|
return;
|
|
187
188
|
}
|
|
188
189
|
|
|
189
|
-
//
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
//
|
|
193
|
-
// reach this block because it returns directly above. This matches Android's
|
|
194
|
-
// architecture where search() bypasses the resolve() contextual URL logic.
|
|
195
|
-
// IMPORTANT: Create a shallow copy to avoid mutating the original config object
|
|
196
|
-
// (e.g., browseStatic from routes). Without this, static route children would
|
|
197
|
-
// accumulate contextual URLs, breaking search which reads from the same source.
|
|
190
|
+
// Add contextual URLs to non-search content (matches Android behavior where
|
|
191
|
+
// search() bypasses the resolve() contextual URL logic).
|
|
192
|
+
// Shallow copy to avoid mutating the original config object (e.g., browseStatic
|
|
193
|
+
// from routes), which would break search that reads from the same source.
|
|
198
194
|
if (content?.children && !isSearchPath) {
|
|
199
195
|
content = {
|
|
200
196
|
...content,
|
|
@@ -253,10 +249,7 @@ export class BrowserManager {
|
|
|
253
249
|
console.error('Navigation failed:', error);
|
|
254
250
|
this._content = undefined;
|
|
255
251
|
this.onContentChanged(undefined);
|
|
256
|
-
|
|
257
|
-
// Set navigation error using helper
|
|
258
|
-
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
259
|
-
this.navigationErrorManager.setNavigationError('unknown-error', message);
|
|
252
|
+
this.handleNavigationError(error, path);
|
|
260
253
|
}
|
|
261
254
|
}
|
|
262
255
|
|
|
@@ -498,7 +491,7 @@ export class BrowserManager {
|
|
|
498
491
|
// Check singleTrack setting - if true, return only the selected track
|
|
499
492
|
if (this._configuration.singleTrack) {
|
|
500
493
|
return {
|
|
501
|
-
tracks: [playableTracks[selectedIndex]],
|
|
494
|
+
tracks: [assertedNotNullish(playableTracks[selectedIndex])],
|
|
502
495
|
selectedIndex: 0
|
|
503
496
|
};
|
|
504
497
|
}
|
|
@@ -526,13 +519,13 @@ export class BrowserManager {
|
|
|
526
519
|
async resolveMediaItemsForPlayback(tracks, startIndex, startPositionMs, searchQuery) {
|
|
527
520
|
// Single track: check for search context or contextual URL
|
|
528
521
|
if (tracks.length === 1) {
|
|
529
|
-
const track = tracks[0];
|
|
522
|
+
const track = assertedNotNullish(tracks[0]);
|
|
530
523
|
const trackUrl = track.url;
|
|
531
524
|
|
|
532
525
|
// If search query present, expand search results
|
|
533
526
|
if (searchQuery) {
|
|
534
527
|
// Execute search (will hit cache if already performed)
|
|
535
|
-
const searchResults = await this.
|
|
528
|
+
const searchResults = await this.resolveSearchContent(BrowserPathHelper.createSearchPath(searchQuery));
|
|
536
529
|
const searchTracks = searchResults?.children;
|
|
537
530
|
if (searchTracks && searchTracks.length > 0) {
|
|
538
531
|
// Find the selected track in search results
|