@scarlett-player/playlist 1.9.0 → 1.11.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/dist/index.cjs +21 -13
- package/dist/index.js +21 -13
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -304,7 +304,7 @@ function injectStyles() {
|
|
|
304
304
|
}
|
|
305
305
|
|
|
306
306
|
// src/version.ts
|
|
307
|
-
var PKG_VERSION = true ? "1.
|
|
307
|
+
var PKG_VERSION = true ? "1.11.0" : "0.0.0-dev";
|
|
308
308
|
|
|
309
309
|
// src/index.ts
|
|
310
310
|
var DEFAULT_CONFIG = {
|
|
@@ -428,18 +428,24 @@ function createPlaylistPlugin(config) {
|
|
|
428
428
|
api?.logger.warn("Failed to persist playlist", e);
|
|
429
429
|
}
|
|
430
430
|
};
|
|
431
|
+
const isTrack = (t) => typeof t === "object" && t !== null && typeof t.src === "string";
|
|
431
432
|
const loadPersistedPlaylist = () => {
|
|
432
433
|
if (!mergedConfig.persist) return;
|
|
434
|
+
if (mergedConfig.tracks !== void 0) return;
|
|
433
435
|
try {
|
|
434
436
|
const data = localStorage.getItem(mergedConfig.persistKey);
|
|
435
|
-
if (data)
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
437
|
+
if (!data) return;
|
|
438
|
+
const parsed = JSON.parse(data);
|
|
439
|
+
const restored = Array.isArray(parsed.tracks) ? parsed.tracks.filter(isTrack) : [];
|
|
440
|
+
if (restored.length === 0) return;
|
|
441
|
+
tracks = restored;
|
|
442
|
+
const index = Number.isInteger(parsed.currentIndex) ? parsed.currentIndex : -1;
|
|
443
|
+
currentIndex = index >= 0 ? Math.min(index, tracks.length - 1) : -1;
|
|
444
|
+
shuffle = parsed.shuffle === true;
|
|
445
|
+
repeat = parsed.repeat === "one" || parsed.repeat === "all" ? parsed.repeat : "none";
|
|
446
|
+
shuffleOrder = Array.isArray(parsed.shuffleOrder) ? parsed.shuffleOrder.filter(
|
|
447
|
+
(n) => typeof n === "number" && n >= 0 && n < tracks.length
|
|
448
|
+
) : [];
|
|
443
449
|
} catch (e) {
|
|
444
450
|
api?.logger.warn("Failed to load persisted playlist", e);
|
|
445
451
|
}
|
|
@@ -449,7 +455,7 @@ function createPlaylistPlugin(config) {
|
|
|
449
455
|
api?.emit("playlist:change", { track, index: currentIndex });
|
|
450
456
|
persistPlaylist();
|
|
451
457
|
};
|
|
452
|
-
const setCurrentTrack = (index) => {
|
|
458
|
+
const setCurrentTrack = (index, options = {}) => {
|
|
453
459
|
if (index < 0 || index >= tracks.length) {
|
|
454
460
|
api?.logger.warn("Invalid track index", { index });
|
|
455
461
|
return;
|
|
@@ -462,7 +468,7 @@ function createPlaylistPlugin(config) {
|
|
|
462
468
|
api?.setState("mediaType", track.type || "audio");
|
|
463
469
|
emitChange();
|
|
464
470
|
if (mergedConfig.autoLoad !== false && track.src) {
|
|
465
|
-
api?.emit("media:load-request", { src: track.src, autoplay: true });
|
|
471
|
+
api?.emit("media:load-request", { src: track.src, autoplay: options.autoplay ?? true });
|
|
466
472
|
}
|
|
467
473
|
};
|
|
468
474
|
const plugin = {
|
|
@@ -476,7 +482,7 @@ function createPlaylistPlugin(config) {
|
|
|
476
482
|
api = pluginApi;
|
|
477
483
|
api.logger.info("Playlist plugin initialized");
|
|
478
484
|
loadPersistedPlaylist();
|
|
479
|
-
if (shuffle && tracks.length > 0) {
|
|
485
|
+
if (shuffle && tracks.length > 0 && shuffleOrder.length !== tracks.length) {
|
|
480
486
|
generateShuffleOrder();
|
|
481
487
|
}
|
|
482
488
|
let advanceTimeout = null;
|
|
@@ -484,11 +490,13 @@ function createPlaylistPlugin(config) {
|
|
|
484
490
|
if (!mergedConfig.autoAdvance) return;
|
|
485
491
|
const nextIdx = getNextIndex();
|
|
486
492
|
if (nextIdx >= 0) {
|
|
493
|
+
const wasPlaying = !api?.getState("paused");
|
|
487
494
|
const advance = () => {
|
|
488
495
|
api?.logger.debug("Auto-advancing to next track", { nextIdx });
|
|
489
|
-
setCurrentTrack(nextIdx);
|
|
496
|
+
setCurrentTrack(nextIdx, { autoplay: wasPlaying });
|
|
490
497
|
};
|
|
491
498
|
if (mergedConfig.advanceDelay) {
|
|
499
|
+
if (advanceTimeout) clearTimeout(advanceTimeout);
|
|
492
500
|
advanceTimeout = setTimeout(advance, mergedConfig.advanceDelay);
|
|
493
501
|
} else {
|
|
494
502
|
advance();
|
package/dist/index.js
CHANGED
|
@@ -266,7 +266,7 @@ function injectStyles() {
|
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
// src/version.ts
|
|
269
|
-
var PKG_VERSION = true ? "1.
|
|
269
|
+
var PKG_VERSION = true ? "1.11.0" : "0.0.0-dev";
|
|
270
270
|
|
|
271
271
|
// src/index.ts
|
|
272
272
|
var DEFAULT_CONFIG = {
|
|
@@ -390,18 +390,24 @@ function createPlaylistPlugin(config) {
|
|
|
390
390
|
api?.logger.warn("Failed to persist playlist", e);
|
|
391
391
|
}
|
|
392
392
|
};
|
|
393
|
+
const isTrack = (t) => typeof t === "object" && t !== null && typeof t.src === "string";
|
|
393
394
|
const loadPersistedPlaylist = () => {
|
|
394
395
|
if (!mergedConfig.persist) return;
|
|
396
|
+
if (mergedConfig.tracks !== void 0) return;
|
|
395
397
|
try {
|
|
396
398
|
const data = localStorage.getItem(mergedConfig.persistKey);
|
|
397
|
-
if (data)
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
399
|
+
if (!data) return;
|
|
400
|
+
const parsed = JSON.parse(data);
|
|
401
|
+
const restored = Array.isArray(parsed.tracks) ? parsed.tracks.filter(isTrack) : [];
|
|
402
|
+
if (restored.length === 0) return;
|
|
403
|
+
tracks = restored;
|
|
404
|
+
const index = Number.isInteger(parsed.currentIndex) ? parsed.currentIndex : -1;
|
|
405
|
+
currentIndex = index >= 0 ? Math.min(index, tracks.length - 1) : -1;
|
|
406
|
+
shuffle = parsed.shuffle === true;
|
|
407
|
+
repeat = parsed.repeat === "one" || parsed.repeat === "all" ? parsed.repeat : "none";
|
|
408
|
+
shuffleOrder = Array.isArray(parsed.shuffleOrder) ? parsed.shuffleOrder.filter(
|
|
409
|
+
(n) => typeof n === "number" && n >= 0 && n < tracks.length
|
|
410
|
+
) : [];
|
|
405
411
|
} catch (e) {
|
|
406
412
|
api?.logger.warn("Failed to load persisted playlist", e);
|
|
407
413
|
}
|
|
@@ -411,7 +417,7 @@ function createPlaylistPlugin(config) {
|
|
|
411
417
|
api?.emit("playlist:change", { track, index: currentIndex });
|
|
412
418
|
persistPlaylist();
|
|
413
419
|
};
|
|
414
|
-
const setCurrentTrack = (index) => {
|
|
420
|
+
const setCurrentTrack = (index, options = {}) => {
|
|
415
421
|
if (index < 0 || index >= tracks.length) {
|
|
416
422
|
api?.logger.warn("Invalid track index", { index });
|
|
417
423
|
return;
|
|
@@ -424,7 +430,7 @@ function createPlaylistPlugin(config) {
|
|
|
424
430
|
api?.setState("mediaType", track.type || "audio");
|
|
425
431
|
emitChange();
|
|
426
432
|
if (mergedConfig.autoLoad !== false && track.src) {
|
|
427
|
-
api?.emit("media:load-request", { src: track.src, autoplay: true });
|
|
433
|
+
api?.emit("media:load-request", { src: track.src, autoplay: options.autoplay ?? true });
|
|
428
434
|
}
|
|
429
435
|
};
|
|
430
436
|
const plugin = {
|
|
@@ -438,7 +444,7 @@ function createPlaylistPlugin(config) {
|
|
|
438
444
|
api = pluginApi;
|
|
439
445
|
api.logger.info("Playlist plugin initialized");
|
|
440
446
|
loadPersistedPlaylist();
|
|
441
|
-
if (shuffle && tracks.length > 0) {
|
|
447
|
+
if (shuffle && tracks.length > 0 && shuffleOrder.length !== tracks.length) {
|
|
442
448
|
generateShuffleOrder();
|
|
443
449
|
}
|
|
444
450
|
let advanceTimeout = null;
|
|
@@ -446,11 +452,13 @@ function createPlaylistPlugin(config) {
|
|
|
446
452
|
if (!mergedConfig.autoAdvance) return;
|
|
447
453
|
const nextIdx = getNextIndex();
|
|
448
454
|
if (nextIdx >= 0) {
|
|
455
|
+
const wasPlaying = !api?.getState("paused");
|
|
449
456
|
const advance = () => {
|
|
450
457
|
api?.logger.debug("Auto-advancing to next track", { nextIdx });
|
|
451
|
-
setCurrentTrack(nextIdx);
|
|
458
|
+
setCurrentTrack(nextIdx, { autoplay: wasPlaying });
|
|
452
459
|
};
|
|
453
460
|
if (mergedConfig.advanceDelay) {
|
|
461
|
+
if (advanceTimeout) clearTimeout(advanceTimeout);
|
|
454
462
|
advanceTimeout = setTimeout(advance, mergedConfig.advanceDelay);
|
|
455
463
|
} else {
|
|
456
464
|
advance();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scarlett-player/playlist",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "Playlist Plugin for Scarlett Player - Queue management, shuffle, repeat, and gapless playback",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@scarlett-player/core": "^1.
|
|
26
|
-
"@scarlett-player/ui": "^1.
|
|
25
|
+
"@scarlett-player/core": "^1.9.0",
|
|
26
|
+
"@scarlett-player/ui": "^1.9.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"tsup": "^8.0.0",
|
|
30
30
|
"typescript": "^5.3.0",
|
|
31
31
|
"vitest": "^1.6.0",
|
|
32
32
|
"jsdom": "^24.0.0",
|
|
33
|
-
"@scarlett-player/core": "1.
|
|
34
|
-
"@scarlett-player/ui": "1.
|
|
33
|
+
"@scarlett-player/core": "1.11.0",
|
|
34
|
+
"@scarlett-player/ui": "1.11.0"
|
|
35
35
|
},
|
|
36
36
|
"keywords": [
|
|
37
37
|
"video",
|