tmg-media-player 0.0.11 → 0.0.12
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/assets/icons/movie-tape.png +0 -0
- package/dist/assets/icons/tmg-icon.jpeg +0 -0
- package/dist/{chunk-FI5SPLES.js → chunk-2H6X5VZG.js} +5 -5
- package/dist/chunk-2H6X5VZG.js.map +1 -0
- package/dist/{chunk-HUH25JG5.js → chunk-2HVBZADO.js} +38 -38
- package/dist/{chunk-RR5GXBNA.js → chunk-2OWLFV3A.js} +7 -7
- package/dist/{chunk-K7Z7Q6LQ.js → chunk-6SUR2P3T.js} +11 -6
- package/dist/chunk-6SUR2P3T.js.map +1 -0
- package/dist/{chunk-CWE4QKDK.js → chunk-APTMOXNH.js} +2 -2
- package/dist/{chunk-GSOXOST7.js → chunk-BKFXEFPY.js} +2 -2
- package/dist/{chunk-T4ABAVTZ.js → chunk-CGR2QBUD.js} +9 -6
- package/dist/chunk-CGR2QBUD.js.map +1 -0
- package/dist/{chunk-7W4SABYP.js → chunk-DDFE4KEG.js} +2 -2
- package/dist/chunk-DDFE4KEG.js.map +1 -0
- package/dist/{chunk-4MF2SLIL.js → chunk-IS4FCH6B.js} +54 -54
- package/dist/{chunk-UIK25CH6.js → chunk-K22NHK7L.js} +2 -2
- package/dist/chunk-K22NHK7L.js.map +1 -0
- package/dist/{chunk-4BBRAX3O.js → chunk-Q3GITFJK.js} +2 -2
- package/dist/{chunk-ONDVMF2G.js → chunk-S4NETCMQ.js} +32 -32
- package/dist/{chunk-3DUIEUZK.js → chunk-WWIT3BRG.js} +29 -29
- package/dist/{chunk-I5CLRE4T.js → chunk-YJX3ENZR.js} +76 -76
- package/dist/{chunk-RXQAQ4GB.js → chunk-YWNPOW3G.js} +23 -23
- package/dist/components/holders/pipplaceholder.cjs.map +1 -1
- package/dist/components/holders/pipplaceholder.js +2 -2
- package/dist/components/notifiers/z-register.js +9 -9
- package/dist/components/z-register.cjs.map +1 -1
- package/dist/components/z-register.js +18 -18
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/init.cjs +1 -1
- package/dist/init.cjs.map +1 -1
- package/dist/init.js +1 -1
- package/dist/plugs/main/playlist/index.cjs +57 -8
- package/dist/plugs/main/playlist/index.cjs.map +1 -1
- package/dist/plugs/main/playlist/index.js +3 -1
- package/dist/plugs/menus/main/playlist.cjs +1 -1
- package/dist/plugs/menus/main/playlist.cjs.map +1 -1
- package/dist/plugs/menus/main/playlist.js +1 -1
- package/dist/plugs/menus/settings/metadata.cjs.map +1 -1
- package/dist/plugs/menus/settings/metadata.js +2 -2
- package/dist/plugs/menus/z-register.cjs +1 -1
- package/dist/plugs/menus/z-register.cjs.map +1 -1
- package/dist/plugs/menus/z-register.js +14 -14
- package/dist/plugs/settings/auto/index.cjs +7 -4
- package/dist/plugs/settings/auto/index.cjs.map +1 -1
- package/dist/plugs/settings/auto/index.js +1 -1
- package/dist/plugs/settings/cast/index.cjs.map +1 -1
- package/dist/plugs/settings/cast/index.js +2 -2
- package/dist/plugs/z-register.cjs +126 -86
- package/dist/plugs/z-register.cjs.map +1 -1
- package/dist/plugs/z-register.js +31 -31
- package/dist/super/components/index.cjs.map +1 -1
- package/dist/super/components/index.js +59 -59
- package/dist/super/components/notifiers.js +23 -23
- package/dist/super/plugs/index.cjs +340 -302
- package/dist/super/plugs/index.cjs.map +1 -1
- package/dist/super/plugs/index.js +92 -92
- package/dist/super/plugs/menus.cjs +1 -1
- package/dist/super/plugs/menus.cjs.map +1 -1
- package/dist/super/plugs/menus.js +31 -31
- package/dist/super/techs.js +3 -3
- package/dist/super/utils.cjs +4 -4
- package/dist/super/utils.cjs.map +1 -1
- package/dist/super/utils.js +2 -2
- package/dist/super.cjs +71 -66
- package/dist/super.cjs.map +1 -1
- package/dist/super.global.js +53 -48
- package/dist/super.global.js.map +1 -1
- package/dist/super.js +78 -78
- package/dist/techs/z-register.js +3 -3
- package/dist/utils/file.cjs +4 -4
- package/dist/utils/file.cjs.map +1 -1
- package/dist/utils/file.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7W4SABYP.js.map +0 -1
- package/dist/chunk-FI5SPLES.js.map +0 -1
- package/dist/chunk-K7Z7Q6LQ.js.map +0 -1
- package/dist/chunk-T4ABAVTZ.js.map +0 -1
- package/dist/chunk-UIK25CH6.js.map +0 -1
- /package/dist/{chunk-HUH25JG5.js.map → chunk-2HVBZADO.js.map} +0 -0
- /package/dist/{chunk-RR5GXBNA.js.map → chunk-2OWLFV3A.js.map} +0 -0
- /package/dist/{chunk-CWE4QKDK.js.map → chunk-APTMOXNH.js.map} +0 -0
- /package/dist/{chunk-GSOXOST7.js.map → chunk-BKFXEFPY.js.map} +0 -0
- /package/dist/{chunk-4MF2SLIL.js.map → chunk-IS4FCH6B.js.map} +0 -0
- /package/dist/{chunk-4BBRAX3O.js.map → chunk-Q3GITFJK.js.map} +0 -0
- /package/dist/{chunk-ONDVMF2G.js.map → chunk-S4NETCMQ.js.map} +0 -0
- /package/dist/{chunk-3DUIEUZK.js.map → chunk-WWIT3BRG.js.map} +0 -0
- /package/dist/{chunk-I5CLRE4T.js.map → chunk-YJX3ENZR.js.map} +0 -0
- /package/dist/{chunk-RXQAQ4GB.js.map → chunk-YWNPOW3G.js.map} +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -20,7 +20,7 @@ function noExtension(fn, generic = true) {
|
|
|
20
20
|
function getMimeTypeFromExtension(name, generic = true) {
|
|
21
21
|
return mimeTypes[getExtension(name, generic)] || "application/octet-stream";
|
|
22
22
|
}
|
|
23
|
-
function smartFlatSort(files, debug = false, stripExt = noExtension, log = debug ? (title, ...body) => console.log(`[Sorter][${title}]`, ...body) : NOOP, bCache = /* @__PURE__ */ new Map(), kCache = /* @__PURE__ */ new Map(), groups = /* @__PURE__ */ new Map()) {
|
|
23
|
+
function smartFlatSort(files, getName = (item) => item.name || "", debug = false, stripExt = noExtension, log = debug ? (title, ...body) => console.log(`[Sorter][${title}]`, ...body) : NOOP, bCache = /* @__PURE__ */ new Map(), kCache = /* @__PURE__ */ new Map(), groups = /* @__PURE__ */ new Map()) {
|
|
24
24
|
debug && console.time("[Sorter]"), log("Init", `Sorting ${files.length} items...`);
|
|
25
25
|
function getNamePrefix(name, base = stripExt(name), match = base.match(/(.*?)(?:(?:s|season)[\s\-]?)(\d+).*?(?:(?:e|ep|episode)[\s\-]?)(\d+)?/i)) {
|
|
26
26
|
return bCache.set(name, base), (match ? match[1].replace(/[^a-z0-9]+/gi, " ").trim().toLowerCase() + " s" + match[2].padStart(2, "0") : base.replace(/(?:(?:e|ep|episode|part)[\s\-]?)\d+/gi, "").replace(/[^a-z0-9]+/gi, " ").trim().toLowerCase()) || "unknown";
|
|
@@ -37,11 +37,11 @@ function smartFlatSort(files, debug = false, stripExt = noExtension, log = debug
|
|
|
37
37
|
return [Infinity, Infinity];
|
|
38
38
|
}
|
|
39
39
|
for (const file of files) {
|
|
40
|
-
const key = getNamePrefix(file
|
|
40
|
+
const key = getNamePrefix(getName(file));
|
|
41
41
|
let group = groups.get(key);
|
|
42
|
-
log("Prefix", `"${file
|
|
42
|
+
log("Prefix", `"${getName(file)}" -> "${key}"`), (group ?? (groups.set(key, group = []), group)).push(file);
|
|
43
43
|
}
|
|
44
|
-
const sortedFiles = [], byGroup = ([a], [b], diff = a === "unknown" ? 1 : b === "unknown" ? -1 : a.localeCompare(b)) => (log("Group Compare", `[${a}] vs [${b}] = ${diff > 0 ? "B first" : diff < 0 ? "A first" : "Tie"}`), diff), getKey = (name, key = kCache.get(name)) => key ? key : (kCache.set(name, key = extractEpisodeKey(name)), key), byEpisode = (a, b, ak = getKey(a
|
|
44
|
+
const sortedFiles = [], byGroup = ([a], [b], diff = a === "unknown" ? 1 : b === "unknown" ? -1 : a.localeCompare(b)) => (log("Group Compare", `[${a}] vs [${b}] = ${diff > 0 ? "B first" : diff < 0 ? "A first" : "Tie"}`), diff), getKey = (name, key = kCache.get(name)) => key ? key : (kCache.set(name, key = extractEpisodeKey(name)), key), byEpisode = (a, b, ak = getKey(getName(a)), bk = getKey(getName(b)), diff = ak[0] !== bk[0] ? ak[0] - bk[0] : ak[1] - bk[1]) => (log("Episode Compare", `[${ak}] vs [${bk}] = ${diff > 0 ? "B first" : diff < 0 ? "A first" : "Tie"} ("${getName(a)}" / "${getName(b)}")`), diff), sortedGroups = (log("Groups", `Identified ${groups.size} group(s)`, groups), [...groups.entries()].sort(byGroup));
|
|
45
45
|
for (const [, group] of sortedGroups) group.sort(byEpisode), sortedFiles.push(...group);
|
|
46
46
|
return log("Done", sortedFiles), debug && console.timeEnd("[Sorter]"), sortedFiles;
|
|
47
47
|
}
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
smartFlatSort,
|
|
54
54
|
formatSize
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-2H6X5VZG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/utils/file.ts"],"sourcesContent":["import { NOOP } from \"sia-reactor\";\r\nimport { parseRomanNum } from \"./num\";\r\nimport { MEDIA_EXTENSIONS, FILE_EXTENSIONS, mimeTypes } from \"./match\";\r\n\r\n// File Size Formatting\r\nexport { formatSize } from \"@t007/utils\";\r\n\r\n// Extension Helpers\r\nexport function getExtension(fn: string, generic = true): string {\r\n const m = fn.match(!generic ? MEDIA_EXTENSIONS : FILE_EXTENSIONS);\r\n return (m ? (generic ? m[1] : m[1] || m[4]) : \"\")?.toLowerCase() ?? \"\"; // AUD or VID ext\r\n}\r\n\r\nexport function noExtension(fn: string, generic = true): string {\r\n return fn.replace(!generic ? MEDIA_EXTENSIONS : FILE_EXTENSIONS, \"\");\r\n}\r\n\r\n// MIME Type Resolution\r\nexport function getMimeTypeFromExtension(name: string, generic = true): string {\r\n return mimeTypes[getExtension(name, generic)] || \"application/octet-stream\"; // Default to binary stream\r\n}\r\n\r\n// Sorters\r\nexport function smartFlatSort<F>(files: F[], getName: (item: F) => string = (item: any) => item.name || \"\", debug = false, stripExt = noExtension, log = debug ? (title: string, ...body: any[]) => console.log(`[Sorter][${title}]`, ...body) : NOOP, bCache = new Map(), kCache = new Map(), groups = new Map()) {\r\n debug && console.time(\"[Sorter]\"), log(\"Init\", `Sorting ${files.length} items...`);\r\n // Extracts the main series title + optional season\r\n function getNamePrefix(name: string, base = stripExt(name), match = base.match(/(.*?)(?:(?:s|season)[\\s\\-]?)(\\d+).*?(?:(?:e|ep|episode)[\\s\\-]?)(\\d+)?/i)) {\r\n // prettier-ignore\r\n return bCache.set(name, base), (match ? (match[1].replace(/[^a-z0-9]+/gi, \" \").trim().toLowerCase() + \" s\" + match[2].padStart(2, \"0\")) : base.replace(/(?:(?:e|ep|episode|part)[\\s\\-]?)\\d+/gi, \"\").replace(/[^a-z0-9]+/gi, \" \").trim().toLowerCase()) || \"unknown\";\r\n }\r\n // Extract episode key: season, episode number(s), or special flags\r\n function extractEpisodeKey(name: string, base = bCache.get(name).toLowerCase()) {\r\n // Match lazy formats like \"S02 - Episode 3\", \"S3 ep4\", \"S5E 7\" (not strict SxxEyy)\r\n const combo = base.match(/(?:(?:s|season)[\\s\\-]?)(\\d+).*?(?:(?:e|ep|episode)[\\s\\-]?)(\\d+)/);\r\n if (combo) return [parseInt(combo[1]), parseInt(combo[2])];\r\n // Match \"1x01\", \"5x12\", alternate style used by some encoders or fansubs\r\n const alt = base.match(/(\\d+)x(\\d+)/);\r\n if (alt) return [parseInt(alt[1]), parseInt(alt[2])];\r\n // Match Roman numerals like \"Season IV Episode IX\"\r\n const roman = base.match(/(?:(?:s|season)[\\s\\-]?)([ivxlcdm]+).*?(?:(?:e|ep|episode)[\\s\\-]?)([ivxlcdm]+)/i);\r\n if (roman) return [parseRomanNum(roman[1], true), parseRomanNum(roman[2], true)];\r\n // Match fallback single-episode formats like \"Ep12\", \"Episode 5\", \"E7\", \"Part 2\" without season info\r\n const loose = base.match(/(?:(?:e|ep|episode|part)[\\s\\-]?)(\\d+)/);\r\n if (loose) return [999, parseInt(loose[1])]; // Put these at the end with fake season 999\r\n // Totally unmatchable junk (e.g. \"Behind the Scenes\", \"Bonus Feature\")\r\n return [Infinity, Infinity]; // Hard fallback, gets sorted dead last\r\n }\r\n for (const file of files) {\r\n const key = getNamePrefix(getName(file));\r\n let group = groups.get(key);\r\n log(\"Prefix\", `\"${getName(file)}\" -> \"${key}\"`), (group ?? (groups.set(key, (group = [])), group)).push(file);\r\n }\r\n const sortedFiles = [],\r\n byGroup = ([a]: [string, F[]], [b]: [string, F[]], diff = a === \"unknown\" ? 1 : b === \"unknown\" ? -1 : a.localeCompare(b)) => (log(\"Group Compare\", `[${a}] vs [${b}] = ${diff > 0 ? \"B first\" : diff < 0 ? \"A first\" : \"Tie\"}`), diff), // Sort groups alphabetically by their prefix\r\n getKey = (name: string, key = kCache.get(name)) => (key ? key : (kCache.set(name, (key = extractEpisodeKey(name))), key)),\r\n byEpisode = (a: F, b: F, ak = getKey(getName(a)), bk = getKey(getName(b)), diff = ak[0] !== bk[0] ? ak[0] - bk[0] : ak[1] - bk[1]) => (log(\"Episode Compare\", `[${ak}] vs [${bk}] = ${diff > 0 ? \"B first\" : diff < 0 ? \"A first\" : \"Tie\"} (\"${getName(a)}\" / \"${getName(b)}\")`), diff), // season | episode\r\n sortedGroups = (log(\"Groups\", `Identified ${groups.size} group(s)`, groups), [...groups.entries()].sort(byGroup)); // Sort groups alphabetically by their prefix\r\n for (const [, group] of sortedGroups) group.sort(byEpisode), sortedFiles.push(...group);\r\n return log(\"Done\", sortedFiles), debug && console.timeEnd(\"[Sorter]\"), sortedFiles;\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
VoicePlug
|
|
3
|
+
} from "./chunk-NKIZSZK6.js";
|
|
4
4
|
import {
|
|
5
5
|
VolumePlug
|
|
6
6
|
} from "./chunk-PQS6UHBT.js";
|
|
@@ -11,32 +11,32 @@ import {
|
|
|
11
11
|
TimeTravelPlug
|
|
12
12
|
} from "./chunk-OJGLZKJW.js";
|
|
13
13
|
import {
|
|
14
|
-
|
|
15
|
-
} from "./chunk-
|
|
14
|
+
TimePlug
|
|
15
|
+
} from "./chunk-SNNRESPJ.js";
|
|
16
16
|
import {
|
|
17
17
|
PlaybackRatePlug
|
|
18
18
|
} from "./chunk-ANM4O6YM.js";
|
|
19
|
-
import {
|
|
20
|
-
SettingsViewPlug
|
|
21
|
-
} from "./chunk-KLP6DROH.js";
|
|
22
|
-
import {
|
|
23
|
-
TimePlug
|
|
24
|
-
} from "./chunk-SNNRESPJ.js";
|
|
25
19
|
import {
|
|
26
20
|
PosterPlug
|
|
27
21
|
} from "./chunk-JZJVBWGH.js";
|
|
22
|
+
import {
|
|
23
|
+
SettingsViewPlug
|
|
24
|
+
} from "./chunk-KLP6DROH.js";
|
|
28
25
|
import {
|
|
29
26
|
PersistPlug
|
|
30
27
|
} from "./chunk-57DK4F6O.js";
|
|
31
|
-
import {
|
|
32
|
-
NotifiersPlug
|
|
33
|
-
} from "./chunk-CMJIS72L.js";
|
|
34
28
|
import {
|
|
35
29
|
ObjectFitPlug
|
|
36
30
|
} from "./chunk-JF4OMYVV.js";
|
|
37
31
|
import {
|
|
38
|
-
|
|
39
|
-
} from "./chunk-
|
|
32
|
+
MetadataPlug
|
|
33
|
+
} from "./chunk-66JWLLKI.js";
|
|
34
|
+
import {
|
|
35
|
+
NotifiersPlug
|
|
36
|
+
} from "./chunk-CMJIS72L.js";
|
|
37
|
+
import {
|
|
38
|
+
OverlayPlug
|
|
39
|
+
} from "./chunk-5MQI7O2R.js";
|
|
40
40
|
import {
|
|
41
41
|
ModesFullscreenPin,
|
|
42
42
|
ModesMiniplayerPin,
|
|
@@ -51,8 +51,8 @@ import {
|
|
|
51
51
|
LockedPlug
|
|
52
52
|
} from "./chunk-PIW3OLIE.js";
|
|
53
53
|
import {
|
|
54
|
-
|
|
55
|
-
} from "./chunk-
|
|
54
|
+
FastPlayPlug
|
|
55
|
+
} from "./chunk-RXLBLUED.js";
|
|
56
56
|
import {
|
|
57
57
|
FramePlug
|
|
58
58
|
} from "./chunk-WMQSS6BN.js";
|
|
@@ -61,12 +61,24 @@ import {
|
|
|
61
61
|
GestureTouchPin,
|
|
62
62
|
GestureWheelPin
|
|
63
63
|
} from "./chunk-BSW7I4ZK.js";
|
|
64
|
+
import {
|
|
65
|
+
CSSPlug
|
|
66
|
+
} from "./chunk-FEJWVRKV.js";
|
|
64
67
|
import {
|
|
65
68
|
ErrorsPlug
|
|
66
69
|
} from "./chunk-OB4IQC4Q.js";
|
|
67
70
|
import {
|
|
68
|
-
|
|
69
|
-
} from "./chunk-
|
|
71
|
+
CastPlug
|
|
72
|
+
} from "./chunk-BKFXEFPY.js";
|
|
73
|
+
import {
|
|
74
|
+
CaptionsPlug
|
|
75
|
+
} from "./chunk-F7PTR3GV.js";
|
|
76
|
+
import {
|
|
77
|
+
BrightnessPlug
|
|
78
|
+
} from "./chunk-VZLLCYU7.js";
|
|
79
|
+
import {
|
|
80
|
+
AutoPlug
|
|
81
|
+
} from "./chunk-CGR2QBUD.js";
|
|
70
82
|
import {
|
|
71
83
|
ControlPanelDraggablePin,
|
|
72
84
|
ControlPanelPlug
|
|
@@ -74,36 +86,24 @@ import {
|
|
|
74
86
|
import {
|
|
75
87
|
ToastsPlug
|
|
76
88
|
} from "./chunk-DQJN3BAA.js";
|
|
77
|
-
import {
|
|
78
|
-
CastPlug
|
|
79
|
-
} from "./chunk-GSOXOST7.js";
|
|
80
|
-
import {
|
|
81
|
-
CSSPlug
|
|
82
|
-
} from "./chunk-FEJWVRKV.js";
|
|
83
|
-
import {
|
|
84
|
-
BrightnessPlug
|
|
85
|
-
} from "./chunk-VZLLCYU7.js";
|
|
86
|
-
import {
|
|
87
|
-
CaptionsPlug
|
|
88
|
-
} from "./chunk-F7PTR3GV.js";
|
|
89
89
|
import {
|
|
90
90
|
AmbiencePlug
|
|
91
91
|
} from "./chunk-ZUINQUU4.js";
|
|
92
92
|
import {
|
|
93
93
|
AirPlayPlug
|
|
94
94
|
} from "./chunk-Z4XKUDFZ.js";
|
|
95
|
-
import {
|
|
96
|
-
DisabledPlug
|
|
97
|
-
} from "./chunk-V5KWIXNY.js";
|
|
98
95
|
import {
|
|
99
96
|
PlaylistPlug
|
|
100
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-6SUR2P3T.js";
|
|
98
|
+
import {
|
|
99
|
+
LightStatePlug
|
|
100
|
+
} from "./chunk-PYK7PEVZ.js";
|
|
101
101
|
import {
|
|
102
102
|
SkeletonPlug
|
|
103
103
|
} from "./chunk-GZCRCL4H.js";
|
|
104
104
|
import {
|
|
105
|
-
|
|
106
|
-
} from "./chunk-
|
|
105
|
+
DisabledPlug
|
|
106
|
+
} from "./chunk-V5KWIXNY.js";
|
|
107
107
|
import {
|
|
108
108
|
PinRegistry,
|
|
109
109
|
PlugRegistry
|
|
@@ -159,4 +159,4 @@ for (const Pin of [
|
|
|
159
159
|
GestureTouchPin
|
|
160
160
|
])
|
|
161
161
|
PinRegistry.register(Pin);
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-2HVBZADO.js.map
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ShakaTech
|
|
3
|
+
} from "./chunk-NWYZI2HT.js";
|
|
4
|
+
import {
|
|
5
|
+
VimeoTech
|
|
6
|
+
} from "./chunk-3ZMXATGH.js";
|
|
1
7
|
import {
|
|
2
8
|
YouTubeTech
|
|
3
9
|
} from "./chunk-M3Y6LR6M.js";
|
|
@@ -7,12 +13,6 @@ import {
|
|
|
7
13
|
import {
|
|
8
14
|
HLSTech
|
|
9
15
|
} from "./chunk-3GYKSLPI.js";
|
|
10
|
-
import {
|
|
11
|
-
ShakaTech
|
|
12
|
-
} from "./chunk-NWYZI2HT.js";
|
|
13
|
-
import {
|
|
14
|
-
VimeoTech
|
|
15
|
-
} from "./chunk-3ZMXATGH.js";
|
|
16
16
|
import {
|
|
17
17
|
HTML5Tech
|
|
18
18
|
} from "./chunk-GECXQOTO.js";
|
|
@@ -31,4 +31,4 @@ for (const Tech of [
|
|
|
31
31
|
VimeoTech
|
|
32
32
|
])
|
|
33
33
|
TechRegistry.register(Tech);
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
34
|
+
//# sourceMappingURL=chunk-2OWLFV3A.js.map
|
|
@@ -5,6 +5,9 @@ import {
|
|
|
5
5
|
PLAYLIST_BUILD,
|
|
6
6
|
PLAYLIST_ITEM_BUILD
|
|
7
7
|
} from "./chunk-DZNLR3DX.js";
|
|
8
|
+
import {
|
|
9
|
+
smartFlatSort
|
|
10
|
+
} from "./chunk-2H6X5VZG.js";
|
|
8
11
|
import {
|
|
9
12
|
safeNum
|
|
10
13
|
} from "./chunk-YWBPJGAR.js";
|
|
@@ -72,14 +75,16 @@ var PlaylistPlug = class extends BasePlug {
|
|
|
72
75
|
if (this.config.content && this.state.currentIndex < this.config.content.length - 1) this.moveTo(this.state.currentIndex + 1, true, "Next");
|
|
73
76
|
}
|
|
74
77
|
sort(order = this.state.sortOrder === "asc" ? "desc" : "asc", list = this.config.content) {
|
|
78
|
+
if (!list) return;
|
|
75
79
|
this.state.sortOrder = order;
|
|
76
|
-
|
|
80
|
+
const sorted = smartFlatSort(list, (i) => i.media.settings.metadata.title || "");
|
|
81
|
+
this.config.content = order === "desc" ? sorted.reverse() : sorted;
|
|
77
82
|
}
|
|
78
83
|
shuffle(list = this.config.content) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
if (!list) return;
|
|
85
|
+
const shuffled = [...list];
|
|
86
|
+
for (let i = shuffled.length - 1, j = Math.floor(Math.random() * (i + 1)); i > 0; i--) [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
87
|
+
this.config.content = shuffled;
|
|
83
88
|
}
|
|
84
89
|
remove(index, list = this.config.content) {
|
|
85
90
|
list?.splice(index, 1), index === this.state.currentIndex && list?.length && this.moveTo(Math.min(index, list.length - 1));
|
|
@@ -96,4 +101,4 @@ __publicField(PlaylistPlug, "BUILD", PLAYLIST_BUILD);
|
|
|
96
101
|
export {
|
|
97
102
|
PlaylistPlug
|
|
98
103
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-6SUR2P3T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/plugs/main/playlist/index.ts"],"sourcesContent":["import { BasePlug } from \"../../base\";\r\nimport type { PlaylistConfig, PlaylistItemConfig, PlaylistState } from \"./types\";\r\nimport { PLAYLIST_BUILD, PLAYLIST_ITEM_BUILD } from \"./build\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { mergeObjs, fanout, parsePathObj } from \"sia-reactor/utils\";\r\nimport { silence, transaction } from \"sia-reactor/modules\";\r\nimport { isBool } from \"@utils/obj\";\r\nimport { isSameURL } from \"@utils/str\";\r\nimport { safeNum } from \"@utils/num\";\r\nimport { smartFlatSort } from \"@utils/file\";\r\nimport { Controller } from \"@core/controller\";\r\n\r\nexport class PlaylistPlug extends BasePlug<PlaylistConfig, PlaylistState> {\r\n public static readonly plugName = \"playlist\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = PLAYLIST_BUILD;\r\n public get atFirst() {\r\n return this.state.currentIndex <= 0;\r\n }\r\n public get atLast() {\r\n return !this.config.content || this.state.currentIndex >= this.config.content.length - 1;\r\n }\r\n\r\n constructor(ctlr: Controller, config = ctlr.config.playlist) {\r\n super(ctlr, config, { currentIndex: 0, editIndex: 0, sortOrder: \"asc\" });\r\n }\r\n\r\n public override wire(): void {\r\n // State Listeners\r\n this.state.on(\"currentIndex\", this.syncFeatures, { signal: this.signal });\r\n this.state.on(\"sortOrder\", ({ value }) => (this.media.container.dataset.playlistSort = value), { init: true, signal: this.signal });\r\n // Ctlr Config Getters\r\n this.ctlr.config.get(\"playlist.content\", (v) => (v?.length ? v : null), { signal: this.signal });\r\n // ----------- Setters\r\n this.ctlr.config.set(\"playlist.content\", (v) => (v ? (v.map((i) => mergeObjs(structuredClone(PLAYLIST_ITEM_BUILD) as any, parsePathObj(i))) as any) : null), { init: true, signal: this.signal });\r\n // ---- Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n for (const key of [\"title\", \"artist\", \"profile\", \"artwork\", \"chapterInfo\"] as const) this.media.watch(`settings.metadata.${key}`, (v) => this.config.content && !this.applying && (this.config.content[this.state.currentIndex].media.settings.metadata[key] = v as any), { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n for (const key of [\"title\", \"artist\", \"profile\"] as const) this.media.watch(`settings.metadata.links.${key}`, (v) => this.config.content && !this.applying && (this.config.content[this.state.currentIndex].media.settings.metadata.links[key] = v), { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n this.media.watch(\"state.currentTime\", (v) => this.config.content && !this.applying && (this.config.content[this.state.currentIndex].settings.time.start = v), { signal: this.signal });\r\n this.media.watch(\"status.duration\", (v) => this.config.content && !this.applying && (this.config.content[this.state.currentIndex].media.status.duration = v), { signal: this.signal });\r\n // ---- Config Listeners\r\n this.ctlr.config.watch(\"settings.time.start\", (v) => this.config.content && !this.applying && (this.config.content[this.state.currentIndex].settings.time.start = v), { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n for (const key of [\"previews\", \"marks\"] as const) this.ctlr.config.watch(`settings.controlPanel.timeline.${key}`, (v) => this.config.content && !this.applying && (this.config.content[this.state.currentIndex].settings.controlPanel.timeline[key] = v as any), { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n this.ctlr.config.on(\"playlist.content\", this.handleContent, { signal: this.signal, init: true, depth: 1 });\r\n this.ctlr.config.on(\"playlist.allowOverride\", this.syncFeatures, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"previous\", { fn: this.previous, keyboard: { phase: \"keydown\" } }), this.ctlr.registerAction(\"next\", { fn: this.next, keyboard: { phase: \"keydown\" } });\r\n super.wire();\r\n }\r\n\r\n protected handleContent({ currentTarget: { value: content } }: REvent<CtlrConfig, \"playlist.content\", 1>): void {\r\n this.syncFeatures();\r\n const v = content?.find((v) => (v.media.settings.metadata.id && v.media.settings.metadata.id === this.media.settings.metadata.id) || isSameURL(v.media.intent.src, this.media.intent.src));\r\n this.state.currentIndex = (v && content!.indexOf(v)) ?? 0;\r\n const pmdle = this.ctlr.plug(\"settings.persist\")?.module,\r\n apply = () => (v ? transaction(() => this.applyItem(v, false), \"Playlist Update\") : this.moveTo(this.state.currentIndex));\r\n pmdle && !pmdle.state.hydrated ? pmdle.state.wonce(\"hydrated\", apply, { signal: this.signal }) : apply();\r\n }\r\n\r\n protected applyItem(item: PlaylistItemConfig, _reset = true): void {\r\n (this.applying = true), fanout(this.settings, item.settings), fanout(this.media, item.media), (this.applying = false);\r\n }\r\n protected applying = false;\r\n\r\n public moveTo(index: number, shouldPlay?: boolean, label = \"Move\"): void {\r\n if (!this.config.content || !this.config.content[index]) return;\r\n this.state.currentIndex = index;\r\n transaction(() => (this.applyItem(this.config.content![index]), isBool(shouldPlay) && silence(() => (this.media.intent.paused = !shouldPlay))), `Playlist ${label}`);\r\n }\r\n\r\n public previous(): void {\r\n if (safeNum(this.media.state.currentTime) >= 3) transaction(() => ((this.media.intent.currentTime = 0), (this.media.intent.paused = false)), \"Playlist Previous (Restart)\");\r\n else if (this.config.content && this.state.currentIndex > 0) this.moveTo(this.state.currentIndex - 1, true, \"Previous\");\r\n }\r\n public next(): void {\r\n if (this.config.content && this.state.currentIndex < this.config.content.length - 1) this.moveTo(this.state.currentIndex + 1, true, \"Next\");\r\n }\r\n\r\n public sort(order: \"asc\" | \"desc\" = this.state.sortOrder === \"asc\" ? \"desc\" : \"asc\", list = this.config.content): void {\r\n if (!list) return;\r\n this.state.sortOrder = order;\r\n const sorted = smartFlatSort(list, (i) => i.media.settings.metadata.title || \"\");\r\n this.config.content = order === \"desc\" ? sorted.reverse() : sorted;\r\n }\r\n public shuffle(list = this.config.content): void {\r\n if (!list) return;\r\n const shuffled = [...list];\r\n for (let i = shuffled.length - 1, j = Math.floor(Math.random() * (i + 1)); i > 0; i--) [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\r\n this.config.content = shuffled;\r\n }\r\n public remove(index: number, list = this.config.content): void {\r\n list?.splice(index, 1), index === this.state.currentIndex && list?.length && this.moveTo(Math.min(index, list.length - 1));\r\n }\r\n\r\n protected syncFeatures(): void {\r\n this.media.features.playlist = !!(this.config.content?.length || this.config.allowOverride.add);\r\n (this.media.features.nextItem = !this.atLast), (this.media.features.previousItem = !this.atFirst);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n playlist: typeof PlaylistPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n playlist: PlaylistConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n playlist?: boolean;\r\n nextItem?: boolean;\r\n previousItem?: boolean;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n"],"mappings":"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","names":["v"]}
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
getMimeTypeFromExtension,
|
|
12
12
|
noExtension,
|
|
13
13
|
smartFlatSort
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2H6X5VZG.js";
|
|
15
15
|
import {
|
|
16
16
|
ANDROID_VERSION,
|
|
17
17
|
CHROME_VERSION,
|
|
@@ -416,4 +416,4 @@ __export(utils_exports, {
|
|
|
416
416
|
export {
|
|
417
417
|
utils_exports
|
|
418
418
|
};
|
|
419
|
-
//# sourceMappingURL=chunk-
|
|
419
|
+
//# sourceMappingURL=chunk-APTMOXNH.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-BUTHKICZ.js";
|
|
7
7
|
import {
|
|
8
8
|
getMimeTypeFromExtension
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2H6X5VZG.js";
|
|
10
10
|
import {
|
|
11
11
|
ComponentRegistry
|
|
12
12
|
} from "./chunk-LPASNNCL.js";
|
|
@@ -141,4 +141,4 @@ __publicField(CastPlug, "BUILD", CAST_BUILD);
|
|
|
141
141
|
export {
|
|
142
142
|
CastPlug
|
|
143
143
|
};
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
144
|
+
//# sourceMappingURL=chunk-BKFXEFPY.js.map
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
|
|
24
24
|
// src/ts/plugs/settings/auto/index.ts
|
|
25
25
|
import { silence } from "sia-reactor/modules";
|
|
26
|
-
import { capitalize } from "@t007/utils";
|
|
26
|
+
import { capitalize, isSameURL } from "@t007/utils";
|
|
27
27
|
var AutoPlug = class extends BasePlug {
|
|
28
28
|
constructor() {
|
|
29
29
|
super(...arguments);
|
|
@@ -53,17 +53,17 @@ var AutoPlug = class extends BasePlug {
|
|
|
53
53
|
if (Array.isArray(this.config.play.value) && this.config.play.value.includes(`${p}-window-always`) && this.ctlr.state.mediaIntersecting) this.media.intent.paused = false;
|
|
54
54
|
}
|
|
55
55
|
handleNextPreviewUsePoster({ target: { value, object } }) {
|
|
56
|
-
if (!this.nextPreview || value && this.
|
|
56
|
+
if (!this.nextPreview || value && this.usingPreviewPoster) return;
|
|
57
57
|
if (object.tease) this.config.next.preview.tease = true;
|
|
58
58
|
else this.nextPreview.currentTime = object.time;
|
|
59
59
|
}
|
|
60
60
|
handleNextPreviewTease({ target: { value, object } }) {
|
|
61
61
|
if (!this.nextPreview) return;
|
|
62
62
|
this.nextPreview.ontimeupdate = () => this.nextPreview && Number(this.nextPreview.currentTime) >= object.time && this.nextPreview.pause();
|
|
63
|
-
if (value && (!object.usePoster || !this.
|
|
63
|
+
if (value && (!object.usePoster || !this.usingPreviewPoster)) this.nextPreview.play();
|
|
64
64
|
}
|
|
65
65
|
handleNextPreviewTime({ target: { value, object } }) {
|
|
66
|
-
if (!this.nextPreview || object.usePoster && this.
|
|
66
|
+
if (!this.nextPreview || object.usePoster && this.usingPreviewPoster) return;
|
|
67
67
|
this.nextPreview.currentTime = Number(value);
|
|
68
68
|
}
|
|
69
69
|
aptAutoplay(auto = this.config.play.value, bool = true, p = this.ctlr.state.mediaParentIntersecting ? "in" : "out") {
|
|
@@ -95,9 +95,12 @@ var AutoPlug = class extends BasePlug {
|
|
|
95
95
|
const nVP = type === "video" ? this.nextPreview = this.ctlr.queryDOM(".tmg-media-next-preview") : null;
|
|
96
96
|
if (nVP && m.intent.sources?.length) addSources(m.intent.sources, nVP);
|
|
97
97
|
for (const e of ["loadedmetadata", "loaded", "durationchange"]) nVP?.addEventListener(e, ({ target: p }) => p.nextElementSibling.textContent = this.ctlr.plug("settings.time")?.toTimeText(p.duration) ?? "-:--", { signal: this.signal });
|
|
98
|
-
this.config.next.preview = this.config.next.preview;
|
|
98
|
+
this.config.next.preview.usePoster = this.config.next.preview.usePoster;
|
|
99
99
|
nVP?.previousElementSibling?.addEventListener("click", () => (cleanUp(true), this.ctlr.plug("playlist")?.next()), { capture: true, signal: this.signal });
|
|
100
100
|
}
|
|
101
|
+
get usingPreviewPoster() {
|
|
102
|
+
return !!this.nextPreview?.poster && !isSameURL(this.nextPreview.poster, window.TMG_MEDIA_ALT_IMG_SRC);
|
|
103
|
+
}
|
|
101
104
|
registerMenu() {
|
|
102
105
|
this.ctlr.plug("settings.settingsView")?.menu.registerFirst(MenuRegistry.get("settings.auto")?.(this));
|
|
103
106
|
}
|
|
@@ -108,4 +111,4 @@ __publicField(AutoPlug, "BUILD", AUTO_BUILD);
|
|
|
108
111
|
export {
|
|
109
112
|
AutoPlug
|
|
110
113
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-CGR2QBUD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/plugs/settings/auto/index.ts"],"sourcesContent":["import { BasePlug } from \"../../base\";\r\nimport type { AutoConfig } from \"./types\";\r\nimport { AUTO_BUILD } from \"./build\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport { clamp, safeNum } from \"@utils/num\";\r\nimport { addSources } from \"@utils/media\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\nimport { AUDIO_EXTENSIONS } from \"@utils/match\";\r\nimport { capitalize, isSameURL } from \"@t007/utils\";\r\nimport { CtlrState } from \"@tools/runtime\";\r\n\r\nexport class AutoPlug extends BasePlug<AutoConfig> {\r\n public static readonly plugName = \"auto\";\r\n public static readonly BUILD = AUTO_BUILD;\r\n protected nextPreview: HTMLVideoElement | null = null;\r\n protected canAutoMovePlaylist = true;\r\n\r\n public override wire(): void {\r\n // Plug Watchers\r\n this.ctlr.plug(\"playlist\")?.state.watch(\"currentIndex\", () => (this.canAutoMovePlaylist = true), { signal: this.signal });\r\n // Ctlr Config Watchers\r\n this.ctlr.config.watch(\"settings.auto.play.value\", (value) => silence(() => (this.media.intent.autoplay = value === true)), { init: \"auto\", signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"state.currentTime\", this.handleCurrentTimeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"mediaParentIntersecting\", this.handleMediaParentIntersecting, { signal: this.signal });\r\n this.ctlr.state.on(\"docVisibilityState\", this.handleDocVisibilityState, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.auto.next.preview.usePoster\", this.handleNextPreviewUsePoster, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.auto.next.preview.tease\", this.handleNextPreviewTease, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.auto.next.preview.time\", this.handleNextPreviewTime, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleCurrentTimeState({ value: curr }: REvent<CtlrMedia, \"state.currentTime\">): void {\r\n if (this.media.status.readyState && curr && this.ctlr.payload.wired && Math.floor((this.settings.time.end ?? this.media.status.duration) - curr) <= this.config.next.value / 1000) this.autonextMedia();\r\n }\r\n\r\n protected handleMediaParentIntersecting(): void {\r\n this.aptAutoplay(this.config.pause.value, false), this.aptAutoplay();\r\n }\r\n\r\n protected handleDocVisibilityState({ value }: REvent<CtlrState, \"docVisibilityState\">, p = value === \"visible\" ? (\"in\" as const) : (\"out\" as const)): void {\r\n if (Array.isArray(this.config.pause.value) && this.config.pause.value.includes(`${p}-window-always`)) this.media.intent.paused = true;\r\n if (Array.isArray(this.config.play.value) && this.config.play.value.includes(`${p}-window-always`) && this.ctlr.state.mediaIntersecting) this.media.intent.paused = false;\r\n }\r\n\r\n protected handleNextPreviewUsePoster({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.usePoster\">): void {\r\n if (!this.nextPreview || (value && this.usingPreviewPoster)) return;\r\n if (object.tease) this.config.next.preview.tease = true;\r\n else this.nextPreview.currentTime = object.time;\r\n }\r\n\r\n protected handleNextPreviewTease({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.tease\">): void {\r\n if (!this.nextPreview) return;\r\n this.nextPreview.ontimeupdate = () => this.nextPreview && Number(this.nextPreview.currentTime) >= object.time && this.nextPreview.pause();\r\n if (value && (!object.usePoster || !this.usingPreviewPoster)) this.nextPreview.play();\r\n }\r\n\r\n protected handleNextPreviewTime({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.time\">): void {\r\n if (!this.nextPreview || (object.usePoster && this.usingPreviewPoster)) return;\r\n this.nextPreview.currentTime = Number(value);\r\n }\r\n\r\n protected aptAutoplay(auto = this.config.play.value, bool = true, p = this.ctlr.state.mediaParentIntersecting ? (\"in\" as const) : (\"out\" as const)): void {\r\n if (!Array.isArray(auto)) return;\r\n if (auto.includes(`${p}-view-always`)) this.media.intent.paused = !bool;\r\n else if (auto.includes(`${p}-view`) && this.ctlr.state.readyState < 3) this.media.intent.paused = !bool; // #PATIENT: only before first play\r\n }\r\n\r\n protected autonextMedia(): void {\r\n if (!this.canAutoMovePlaylist || this.media.state.loop || !this.media.status.loadedMetadata || !this.ctlr.config.playlist.content || this.config.next.value < 0 || this.ctlr.plug(\"playlist\")!.state.currentIndex >= this.ctlr.config.playlist.content.length - 1 || this.media.state.paused || this.media.status.waiting) return;\r\n this.canAutoMovePlaylist = false;\r\n const count = clamp(1, Math.round(safeNum(this.settings.time.end ?? this.media.status.duration) - safeNum(this.media.state.currentTime)), this.config.next.value / 1000),\r\n m = this.ctlr.config.playlist.content[this.ctlr.plug(\"playlist\")!.state.currentIndex + 1].media,\r\n type = m.intent.src && AUDIO_EXTENSIONS.test(m.intent.src) ? \"audio\" : \"video\";\r\n const nVTId = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"\", {\r\n autoClose: count * 1000,\r\n hideProgressBar: false,\r\n position: \"bottom-right\",\r\n bodyHTML: `<span title=\"Play next ${type}\" class=\"tmg-media-next-preview-wrapper\">\r\n <button type=\"button\"><svg viewBox=\"0 0 25 25\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /></svg></button>\r\n <video class=\"tmg-media-next-preview\" poster=\"${m.intent.poster || m.settings.metadata.artwork?.[0]?.src || window.TMG_MEDIA_ALT_IMG_SRC || \"\"}\" src=\"${m.intent.src || \"\"}\" muted playsinline webkit-playsinline preload=\"metadata\"></video>\r\n <p>${this.ctlr.plug(\"settings.time\")?.toTimeText(NaN) ?? \"0:00\"}</p>\r\n </span>\r\n <span class=\"tmg-media-next-info\"><h2>Next ${capitalize(type)} in <span class=\"tmg-media-next-countdown\">${count}</span></h2>${m.settings.metadata.title ? `<p class=\"tmg-media-next-title\">${m.settings.metadata.title}</p>` : \"\"}</span>`,\r\n onTimeUpdate: (time: number, el = this.ctlr.queryDOM(\".tmg-media-next-countdown\")) => el && (el.textContent = String(Math.round((count * 1000 - time) / 1000) || 1)),\r\n onClose: (elapsed?: boolean) => void (removeListeners(), elapsed && this.ctlr.plug(\"playlist\")?.next()),\r\n tag: \"tmg-anvi\",\r\n signal: this.signal,\r\n });\r\n const cleanUp = (permanent = false) => (nVTId && t007.toast?.dismiss(nVTId, \"instant\"), (this.nextPreview = null), (this.canAutoMovePlaylist = !permanent)),\r\n strictCleanUp = () => !this.media.status.ended && cleanUp(),\r\n autoCleanUp = () => Math.floor(safeNum((this.settings.time.end ?? this.media.status.duration) - this.media.state.currentTime)) > this.config.next.value / 1000 && cleanUp(),\r\n removeListeners = () => this.autonextPaths.forEach((e) => this.media.off(e, e === this.autonextPaths[0] ? autoCleanUp : strictCleanUp));\r\n for (const e of this.autonextPaths) this.media.on(e, e === this.autonextPaths[0] ? autoCleanUp : strictCleanUp, { signal: this.signal });\r\n const nVP = type === \"video\" ? (this.nextPreview = this.ctlr.queryDOM<HTMLVideoElement>(\".tmg-media-next-preview\"))! : null;\r\n if (nVP && m.intent.sources?.length) addSources(m.intent.sources, nVP);\r\n for (const e of [\"loadedmetadata\", \"loaded\", \"durationchange\"] as const) nVP?.addEventListener(e, ({ target: p }) => ((p as HTMLVideoElement).nextElementSibling!.textContent = this.ctlr.plug(\"settings.time\")?.toTimeText((p as HTMLVideoElement).duration) ?? \"-:--\"), { signal: this.signal });\r\n this.config.next.preview.usePoster = this.config.next.preview.usePoster; // force update\r\n nVP?.previousElementSibling?.addEventListener(\"click\", () => (cleanUp(true), this.ctlr.plug(\"playlist\")?.next()), { capture: true, signal: this.signal });\r\n }\r\n private autonextPaths = [\"state.currentTime\", \"state.paused\", \"status.waiting\"] as const;\r\n private get usingPreviewPoster(): boolean {\r\n return !!this.nextPreview?.poster && !isSameURL(this.nextPreview.poster, window.TMG_MEDIA_ALT_IMG_SRC);\r\n }\r\n\r\n protected override registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.registerFirst(MenuRegistry.get(\"settings.auto\")?.(this));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.auto\": typeof AutoPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n auto: AutoConfig;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
// src/ts/init.ts
|
|
9
9
|
if ("undefined" !== typeof window) {
|
|
10
10
|
window.tmg ?? (window.tmg = {});
|
|
11
|
-
window.TMG_MEDIA_ALT_IMG_SRC ?? (window.TMG_MEDIA_ALT_IMG_SRC = "https://cdn.jsdelivr.net/npm/tmg-media-player/assets/movie-tape.png");
|
|
12
11
|
window.TMG_MEDIA_CSS_SRC ?? (window.TMG_MEDIA_CSS_SRC = "https://cdn.jsdelivr.net/npm/tmg-media-player@latest/dist/index.min.css");
|
|
13
12
|
window.TMG_SHAKA_JS_SRC ?? (window.TMG_SHAKA_JS_SRC = "https://cdn.jsdelivr.net/npm/shaka-player/dist/shaka-player.compiled.js");
|
|
14
13
|
window.TMG_HLS_JS_SRC ?? (window.TMG_HLS_JS_SRC = "https://cdn.jsdelivr.net/npm/hls.js@1/dist/hls.min.js");
|
|
@@ -16,10 +15,11 @@ if ("undefined" !== typeof window) {
|
|
|
16
15
|
window.TMG_YT_API_SRC ?? (window.TMG_YT_API_SRC = "https://www.youtube.com/iframe_api");
|
|
17
16
|
window.TMG_VIMEO_API_SRC ?? (window.TMG_VIMEO_API_SRC = "https://player.vimeo.com/api/player.js");
|
|
18
17
|
window.TMG_CAST_SENDER_SRC ?? (window.TMG_CAST_SENDER_SRC = "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1");
|
|
18
|
+
window.TMG_MEDIA_ALT_IMG_SRC ?? (window.TMG_MEDIA_ALT_IMG_SRC = "https://cdn.jsdelivr.net/npm/tmg-media-player@latest/dist/assets/icons/movie-tape.png");
|
|
19
19
|
init(), loadResource(window.TMG_MEDIA_CSS_SRC), loadResource(window.T007_TOAST_JS_SRC, "script"), loadResource(window.T007_INPUT_JS_SRC, "script"), loadResource(window.T007_DIALOG_JS_SRC, "script");
|
|
20
20
|
console.log("%cTMG Media Player Available", "color: darkturquoise");
|
|
21
21
|
} else {
|
|
22
22
|
console.log("\x1B[38;2;139;69;19mTMG Media Player Unavailable\x1B[0m");
|
|
23
23
|
console.error("TMG Media Player cannot run in a terminal!"), console.warn("Consider moving to a browser environment to use the TMG Media Player");
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
25
|
+
//# sourceMappingURL=chunk-DDFE4KEG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/init.ts"],"sourcesContent":["import \"./types/global.d.ts\"; // bundler handles the stylesheet side effect\r\nimport { init } from \"./tools/runtime\";\r\nimport { loadResource } from \"./utils/dom\";\r\n\r\nif (\"undefined\" !== typeof window) {\r\n window.tmg ??= {} as any; // bundler will handle the rest\r\n window.TMG_MEDIA_CSS_SRC ??= \"https://cdn.jsdelivr.net/npm/tmg-media-player@latest/dist/index.min.css\";\r\n window.TMG_SHAKA_JS_SRC ??= \"https://cdn.jsdelivr.net/npm/shaka-player/dist/shaka-player.compiled.js\";\r\n window.TMG_HLS_JS_SRC ??= \"https://cdn.jsdelivr.net/npm/hls.js@1/dist/hls.min.js\";\r\n window.TMG_DASH_JS_SRC ??= \"https://cdn.jsdelivr.net/npm/dashjs@4/dist/dash.all.min.js\";\r\n window.TMG_YT_API_SRC ??= \"https://www.youtube.com/iframe_api\";\r\n window.TMG_VIMEO_API_SRC ??= \"https://player.vimeo.com/api/player.js\";\r\n window.TMG_CAST_SENDER_SRC ??= \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\r\n window.TMG_MEDIA_ALT_IMG_SRC ??= \"https://cdn.jsdelivr.net/npm/tmg-media-player@latest/dist/assets/icons/movie-tape.png\";\r\n init(), loadResource(window.TMG_MEDIA_CSS_SRC), loadResource(window.T007_TOAST_JS_SRC!, \"script\"), loadResource(window.T007_INPUT_JS_SRC!, \"script\"), loadResource(window.T007_DIALOG_JS_SRC!, \"script\");\r\n console.log(\"%cTMG Media Player Available\", \"color: darkturquoise\");\r\n} else {\r\n console.log(\"\\x1b[38;2;139;69;19mTMG Media Player Unavailable\\x1b[0m\");\r\n console.error(\"TMG Media Player cannot run in a terminal!\"), console.warn(\"Consider moving to a browser environment to use the TMG Media Player\");\r\n}\r\n"],"mappings":";;;;;;;;AAIA,IAAI,gBAAgB,OAAO,QAAQ;AACjC,SAAO,QAAP,OAAO,MAAQ,CAAC;AAChB,SAAO,sBAAP,OAAO,oBAAsB;AAC7B,SAAO,qBAAP,OAAO,mBAAqB;AAC5B,SAAO,mBAAP,OAAO,iBAAmB;AAC1B,SAAO,oBAAP,OAAO,kBAAoB;AAC3B,SAAO,mBAAP,OAAO,iBAAmB;AAC1B,SAAO,sBAAP,OAAO,oBAAsB;AAC7B,SAAO,wBAAP,OAAO,sBAAwB;AAC/B,SAAO,0BAAP,OAAO,wBAA0B;AACjC,OAAK,GAAG,aAAa,OAAO,iBAAiB,GAAG,aAAa,OAAO,mBAAoB,QAAQ,GAAG,aAAa,OAAO,mBAAoB,QAAQ,GAAG,aAAa,OAAO,oBAAqB,QAAQ;AACvM,UAAQ,IAAI,gCAAgC,sBAAsB;AACpE,OAAO;AACL,UAAQ,IAAI,yDAAyD;AACrE,UAAQ,MAAM,4CAA4C,GAAG,QAAQ,KAAK,sEAAsE;AAClJ;","names":[]}
|
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TouchTimelineNotifier
|
|
3
|
-
} from "./chunk-AEP5HJTD.js";
|
|
4
|
-
import {
|
|
5
|
-
TouchVolumeNotifier
|
|
6
|
-
} from "./chunk-E2N7MRFO.js";
|
|
7
|
-
import {
|
|
8
|
-
VolumeNotifier
|
|
9
|
-
} from "./chunk-W62D57H6.js";
|
|
10
|
-
import {
|
|
11
|
-
FwdBwdNotifier
|
|
12
|
-
} from "./chunk-RDAPNHMM.js";
|
|
13
|
-
import {
|
|
14
|
-
ObjectFitNotifier
|
|
15
|
-
} from "./chunk-W6ZMMBY3.js";
|
|
16
|
-
import {
|
|
17
|
-
PlaybackRateNotifier
|
|
18
|
-
} from "./chunk-FTG7BDND.js";
|
|
19
1
|
import {
|
|
20
2
|
PlayPauseNotifier
|
|
21
3
|
} from "./chunk-SMURNKQZ.js";
|
|
@@ -29,11 +11,14 @@ import {
|
|
|
29
11
|
TouchBrightnessNotifier
|
|
30
12
|
} from "./chunk-UKG5RUA3.js";
|
|
31
13
|
import {
|
|
32
|
-
|
|
33
|
-
} from "./chunk-
|
|
14
|
+
TouchTimelineNotifier
|
|
15
|
+
} from "./chunk-AEP5HJTD.js";
|
|
34
16
|
import {
|
|
35
|
-
|
|
36
|
-
} from "./chunk-
|
|
17
|
+
TouchVolumeNotifier
|
|
18
|
+
} from "./chunk-E2N7MRFO.js";
|
|
19
|
+
import {
|
|
20
|
+
VolumeNotifier
|
|
21
|
+
} from "./chunk-W62D57H6.js";
|
|
37
22
|
import {
|
|
38
23
|
CaptionsNotifier
|
|
39
24
|
} from "./chunk-VF5SUWPG.js";
|
|
@@ -49,6 +34,15 @@ import {
|
|
|
49
34
|
import {
|
|
50
35
|
FastPlayNotifier
|
|
51
36
|
} from "./chunk-H4VKNFSA.js";
|
|
37
|
+
import {
|
|
38
|
+
FwdBwdNotifier
|
|
39
|
+
} from "./chunk-RDAPNHMM.js";
|
|
40
|
+
import {
|
|
41
|
+
ObjectFitNotifier
|
|
42
|
+
} from "./chunk-W6ZMMBY3.js";
|
|
43
|
+
import {
|
|
44
|
+
PlaybackRateNotifier
|
|
45
|
+
} from "./chunk-FTG7BDND.js";
|
|
52
46
|
import {
|
|
53
47
|
volumehigh
|
|
54
48
|
} from "./chunk-JRWYWTTT.js";
|
|
@@ -61,6 +55,12 @@ import {
|
|
|
61
55
|
import {
|
|
62
56
|
AirPlayNotifier
|
|
63
57
|
} from "./chunk-MDEH7YMI.js";
|
|
58
|
+
import {
|
|
59
|
+
BrightnessNotifier
|
|
60
|
+
} from "./chunk-APS5SUUK.js";
|
|
61
|
+
import {
|
|
62
|
+
CancelScrubNotifier
|
|
63
|
+
} from "./chunk-NKIBSEUG.js";
|
|
64
64
|
import {
|
|
65
65
|
BaseNotifier
|
|
66
66
|
} from "./chunk-254AE7UJ.js";
|
|
@@ -218,26 +218,17 @@ import {
|
|
|
218
218
|
add
|
|
219
219
|
} from "./chunk-ID72UAJE.js";
|
|
220
220
|
import {
|
|
221
|
-
|
|
222
|
-
} from "./chunk-
|
|
221
|
+
BrightnessControl
|
|
222
|
+
} from "./chunk-DU4OZCVE.js";
|
|
223
223
|
import {
|
|
224
224
|
VolumeControl
|
|
225
225
|
} from "./chunk-ZAMGOESA.js";
|
|
226
226
|
import {
|
|
227
|
-
|
|
228
|
-
} from "./chunk-
|
|
227
|
+
Timeline
|
|
228
|
+
} from "./chunk-6AFKS7SE.js";
|
|
229
229
|
import {
|
|
230
230
|
RangeInput
|
|
231
231
|
} from "./chunk-AQMEXSBY.js";
|
|
232
|
-
import {
|
|
233
|
-
RemoveMiniplayerButton
|
|
234
|
-
} from "./chunk-BGHTG5PC.js";
|
|
235
|
-
import {
|
|
236
|
-
SettingsButton
|
|
237
|
-
} from "./chunk-QSQ3MYN3.js";
|
|
238
|
-
import {
|
|
239
|
-
TheaterButton
|
|
240
|
-
} from "./chunk-XP6LM2B7.js";
|
|
241
232
|
import {
|
|
242
233
|
TimeButton
|
|
243
234
|
} from "./chunk-2QSACBJ3.js";
|
|
@@ -245,14 +236,14 @@ import {
|
|
|
245
236
|
TimeAndDurationButton
|
|
246
237
|
} from "./chunk-ORXXCDRO.js";
|
|
247
238
|
import {
|
|
248
|
-
|
|
249
|
-
} from "./chunk-
|
|
239
|
+
AirPlayPlaceholder
|
|
240
|
+
} from "./chunk-BD5DVRTH.js";
|
|
250
241
|
import {
|
|
251
|
-
|
|
252
|
-
} from "./chunk-
|
|
242
|
+
CastPlaceholder
|
|
243
|
+
} from "./chunk-SCDBAXRE.js";
|
|
253
244
|
import {
|
|
254
|
-
|
|
255
|
-
} from "./chunk-
|
|
245
|
+
PiPPlaceholder
|
|
246
|
+
} from "./chunk-HAHMA6KJ.js";
|
|
256
247
|
import {
|
|
257
248
|
NextButton
|
|
258
249
|
} from "./chunk-X4ANPN2X.js";
|
|
@@ -269,14 +260,14 @@ import {
|
|
|
269
260
|
PreviousButton
|
|
270
261
|
} from "./chunk-Z3472QRR.js";
|
|
271
262
|
import {
|
|
272
|
-
|
|
273
|
-
} from "./chunk-
|
|
263
|
+
RemoveMiniplayerButton
|
|
264
|
+
} from "./chunk-BGHTG5PC.js";
|
|
274
265
|
import {
|
|
275
|
-
|
|
276
|
-
} from "./chunk-
|
|
266
|
+
SettingsButton
|
|
267
|
+
} from "./chunk-QSQ3MYN3.js";
|
|
277
268
|
import {
|
|
278
|
-
|
|
279
|
-
} from "./chunk-
|
|
269
|
+
TheaterButton
|
|
270
|
+
} from "./chunk-XP6LM2B7.js";
|
|
280
271
|
import {
|
|
281
272
|
ChapterButton
|
|
282
273
|
} from "./chunk-NM254BRR.js";
|
|
@@ -293,14 +284,14 @@ import {
|
|
|
293
284
|
FullscreenButton
|
|
294
285
|
} from "./chunk-FEXBUKCU.js";
|
|
295
286
|
import {
|
|
296
|
-
|
|
297
|
-
} from "./chunk-
|
|
287
|
+
FullscreenLockButton
|
|
288
|
+
} from "./chunk-3SG7NEMG.js";
|
|
298
289
|
import {
|
|
299
|
-
|
|
300
|
-
} from "./chunk-
|
|
290
|
+
FullscreenOrientationButton
|
|
291
|
+
} from "./chunk-TPA6MG7H.js";
|
|
301
292
|
import {
|
|
302
|
-
|
|
303
|
-
} from "./chunk-
|
|
293
|
+
Meta
|
|
294
|
+
} from "./chunk-BYENKVXX.js";
|
|
304
295
|
import {
|
|
305
296
|
AirPlayButton
|
|
306
297
|
} from "./chunk-PU4VNV5O.js";
|
|
@@ -316,6 +307,15 @@ import {
|
|
|
316
307
|
import {
|
|
317
308
|
BigPreviousButton
|
|
318
309
|
} from "./chunk-EDLECZEJ.js";
|
|
310
|
+
import {
|
|
311
|
+
CaptionsButton
|
|
312
|
+
} from "./chunk-3ORZUFBV.js";
|
|
313
|
+
import {
|
|
314
|
+
CaptureButton
|
|
315
|
+
} from "./chunk-OTKQMNBH.js";
|
|
316
|
+
import {
|
|
317
|
+
CastButton
|
|
318
|
+
} from "./chunk-Q5D7TB6T.js";
|
|
319
319
|
import {
|
|
320
320
|
Buffer
|
|
321
321
|
} from "./chunk-VOBM2BKO.js";
|
|
@@ -468,4 +468,4 @@ __export(components_exports, {
|
|
|
468
468
|
export {
|
|
469
469
|
components_exports
|
|
470
470
|
};
|
|
471
|
-
//# sourceMappingURL=chunk-
|
|
471
|
+
//# sourceMappingURL=chunk-IS4FCH6B.js.map
|
|
@@ -34,7 +34,7 @@ var getMainPlaylistMenu = (plug) => ({
|
|
|
34
34
|
if (await t007.confirm?.(`Delete "${itemTitle}" from your playlist? This cannot be undone.`, { id: `${plug.ctlr.config.id}-playlist-del-confirm`, rootElement: plug.ctlr.plug("settings.settingsView")?.menu?.element ?? plug.media.container, confirmText: "Delete" })) plug.remove(idx);
|
|
35
35
|
},
|
|
36
36
|
onEdit: (idx) => plug.config.allowOverride.edit ? (plug.state.editIndex = idx, plug.ctlr.plug("settings.settingsView")?.menu?.goTo("playlist-edit")) : void 0,
|
|
37
|
-
getTipHTML: () => plug.config.allowOverride.move ? "You can drag to reorder
|
|
37
|
+
getTipHTML: () => plug.config.allowOverride.move ? "You can drag items to reorder your playlist" : "",
|
|
38
38
|
actions: [...plug.config.allowOverride.move ? [{ id: "sort", getLabel: () => "Sort", icon: "sort", onClick: plug.sort }, { id: "shuffle", getLabel: () => "Shuffle", icon: "shuffle", onClick: plug.shuffle }] : [], ...plug.config.allowOverride.add ? [{ id: "add", getLabel: () => "Add", icon: "add", onClick: () => plug.ctlr.plug("settings.settingsView")?.menu?.goTo("playlist-add") }] : []],
|
|
39
39
|
items: [
|
|
40
40
|
{
|
|
@@ -68,4 +68,4 @@ var getMainPlaylistMenu = (plug) => ({
|
|
|
68
68
|
export {
|
|
69
69
|
getMainPlaylistMenu
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-K22NHK7L.js.map
|