nuvio-tizen 1.8.0 → 1.8.2
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/README.md +11 -9
- package/css/style.css +5 -2
- package/index.html +11 -9
- package/js/app.js +25 -1
- package/js/player.js +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,15 +21,17 @@ core behaviour, targeting 2017 Samsung TVs (Tizen 3.0, ~Chromium 47).
|
|
|
21
21
|
- **Stream aggregation** across all installed stream addons, each source showing
|
|
22
22
|
**size + languages/description** (from `behaviorHints.videoSize` and the addon's own text,
|
|
23
23
|
e.g. MediaFusion / Torrentio).
|
|
24
|
-
- **
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
- **Player menu** (press **DOWN**): *Configure subtitles* (Language → tracks, Size, Style),
|
|
25
|
+
*Audio track* (when >1), *Select source* (2-line, switches mid-playback keeping position),
|
|
26
|
+
*Playback* (Restart, Rewind 10′/5′, Forward 5′/10′). Transport keys
|
|
27
|
+
(Play/Pause/Stop/FF/Rew) keep working even while the menu is open.
|
|
28
|
+
- **Contextual bar** (press **UP**): Play/Pause · Restart · Previous · Next (Prev/Next for series).
|
|
29
|
+
- **Skip Intro / Recap / Credits** via [TheIntroDB](https://theintrodb.org) — transient buttons
|
|
30
|
+
appear when a segment is reached; Credits offers *Skip → Next* or *Watch Credits*.
|
|
31
|
+
- **Watched tracking**: passing the credits threshold marks an item watched and queues the
|
|
32
|
+
next episode into Continue Watching; **hold OK on a series episode** to toggle watched.
|
|
33
|
+
- **Settings** organised into *Addons*, *Integrations* (TMDB v3 & MDBList API keys),
|
|
34
|
+
*Subtitle Options*, *Display* (poster **portrait/landscape**).
|
|
33
35
|
- **Subtitles from addons**: fetched per title/episode, SRT + VTT parsed and rendered as a
|
|
34
36
|
timed overlay; press **UP** during playback to pick a track (or turn them Off).
|
|
35
37
|
Configurable in Settings: **default language** (auto-loads a matching track),
|
package/css/style.css
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
/* Nuvio for Tizen 3.0 — conservative CSS (no CSS grid gap edge cases, flexbox is fine on Chromium 47) */
|
|
2
|
+
/* Sentinel: app.js checks this element's width to confirm the stylesheet applied. */
|
|
3
|
+
#css-sentinel { width: 11px; }
|
|
4
|
+
|
|
2
5
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
3
6
|
|
|
4
7
|
html, body {
|
|
@@ -146,12 +149,12 @@ html, body {
|
|
|
146
149
|
.search-empty { font-size: 24px; color: #8b93a5; margin-top: 30px; }
|
|
147
150
|
|
|
148
151
|
/* --- Contextual quick-action bar (UP) --- */
|
|
149
|
-
#player-bar { position: absolute; left: 0; right: 0; bottom:
|
|
152
|
+
#player-bar { position: absolute; left: 0; right: 0; bottom: 250px; z-index: 22; text-align: center; }
|
|
150
153
|
#player-bar .pb-btn { display: inline-block; margin: 0 12px; padding: 16px 34px; font-size: 26px; border-radius: 40px; background: rgba(22,27,38,0.95); border: 4px solid transparent; color: #e6e9ef; }
|
|
151
154
|
#player-bar .pb-btn.sel { background: #818cf8; color: #0e1117; border-color: #fff; }
|
|
152
155
|
|
|
153
156
|
/* --- Skip intro/recap/credits prompt --- */
|
|
154
|
-
#skip-prompt { position: absolute; right: 60px; bottom:
|
|
157
|
+
#skip-prompt { position: absolute; right: 60px; bottom: 250px; z-index: 24; text-align: right; }
|
|
155
158
|
#skip-prompt .skip-btn { display: inline-block; margin-left: 12px; padding: 16px 30px; font-size: 26px; font-weight: bold; border-radius: 10px; background: rgba(22,27,38,0.96); border: 4px solid #818cf8; color: #e6e9ef; }
|
|
156
159
|
#skip-prompt .skip-btn.sel { background: #818cf8; color: #0e1117; border-color: #fff; }
|
|
157
160
|
|
package/index.html
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=1920, height=1080, user-scalable=no">
|
|
6
6
|
<title>Nuvio</title>
|
|
7
|
-
<link rel="stylesheet" href="css/style.css?v=1.8.
|
|
7
|
+
<link rel="stylesheet" href="css/style.css?v=1.8.2">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
10
|
+
<!-- CSS-applied sentinel (kept off-screen); app.js waits for its width before rendering -->
|
|
11
|
+
<div id="css-sentinel" style="position:absolute;left:-9999px;top:0;height:1px;overflow:hidden;"></div>
|
|
10
12
|
<!-- AVPlay video plane (Tizen). Sits behind the UI; shown only during playback. -->
|
|
11
13
|
<object type="application/avplayer" id="av-player"></object>
|
|
12
14
|
<!-- HTML5 fallback for desktop/dev testing when webapis.avplay is absent -->
|
|
@@ -45,13 +47,13 @@
|
|
|
45
47
|
|
|
46
48
|
<!-- Load order matters: polyfills -> util -> data -> input -> player -> views -> app -->
|
|
47
49
|
<!-- ?v= busts the TV webview cache on every release (keep in sync with package.json) -->
|
|
48
|
-
<script src="js/polyfills.js?v=1.8.
|
|
49
|
-
<script src="js/util.js?v=1.8.
|
|
50
|
-
<script src="js/stremio.js?v=1.8.
|
|
51
|
-
<script src="js/keys.js?v=1.8.
|
|
52
|
-
<script src="js/focus.js?v=1.8.
|
|
53
|
-
<script src="js/player.js?v=1.8.
|
|
54
|
-
<script src="js/views.js?v=1.8.
|
|
55
|
-
<script src="js/app.js?v=1.8.
|
|
50
|
+
<script src="js/polyfills.js?v=1.8.2"></script>
|
|
51
|
+
<script src="js/util.js?v=1.8.2"></script>
|
|
52
|
+
<script src="js/stremio.js?v=1.8.2"></script>
|
|
53
|
+
<script src="js/keys.js?v=1.8.2"></script>
|
|
54
|
+
<script src="js/focus.js?v=1.8.2"></script>
|
|
55
|
+
<script src="js/player.js?v=1.8.2"></script>
|
|
56
|
+
<script src="js/views.js?v=1.8.2"></script>
|
|
57
|
+
<script src="js/app.js?v=1.8.2"></script>
|
|
56
58
|
</body>
|
|
57
59
|
</html>
|
package/js/app.js
CHANGED
|
@@ -86,7 +86,7 @@ var App = (function () {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
function
|
|
89
|
+
function actualStart() {
|
|
90
90
|
Player.init();
|
|
91
91
|
Keys.init();
|
|
92
92
|
Keys.setHandler(onKey);
|
|
@@ -94,6 +94,30 @@ var App = (function () {
|
|
|
94
94
|
Views.renderHome();
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
// On a cold launch the stylesheet fetch can race/fail, leaving the app unstyled.
|
|
98
|
+
// Confirm the CSS applied (sentinel width) before rendering; re-request it if not.
|
|
99
|
+
function start() {
|
|
100
|
+
function styled() {
|
|
101
|
+
var s = document.getElementById('css-sentinel');
|
|
102
|
+
return s && s.offsetWidth === 11;
|
|
103
|
+
}
|
|
104
|
+
function reloadCss() {
|
|
105
|
+
var l = document.createElement('link');
|
|
106
|
+
l.rel = 'stylesheet';
|
|
107
|
+
l.href = 'css/style.css?rl=' + Date.now();
|
|
108
|
+
document.head.appendChild(l);
|
|
109
|
+
}
|
|
110
|
+
if (styled()) { actualStart(); return; }
|
|
111
|
+
var tries = 0;
|
|
112
|
+
reloadCss();
|
|
113
|
+
var iv = setInterval(function () {
|
|
114
|
+
tries++;
|
|
115
|
+
if (styled()) { clearInterval(iv); actualStart(); return; }
|
|
116
|
+
if (tries % 8 === 0) { reloadCss(); } // re-attempt every ~2s
|
|
117
|
+
if (tries > 60) { clearInterval(iv); actualStart(); } // ~15s: render anyway
|
|
118
|
+
}, 250);
|
|
119
|
+
}
|
|
120
|
+
|
|
97
121
|
return {
|
|
98
122
|
start: start, back: back,
|
|
99
123
|
openDetail: openDetail, openSettings: openSettings, openSearch: openSearch,
|
package/js/player.js
CHANGED
|
@@ -715,6 +715,7 @@ var Player = (function () {
|
|
|
715
715
|
}
|
|
716
716
|
|
|
717
717
|
function handleKey(action) {
|
|
718
|
+
if (!_active) { return true; }
|
|
718
719
|
// Dedicated transport keys ALWAYS control playback, even with an overlay open (#9).
|
|
719
720
|
switch (action) {
|
|
720
721
|
case 'PLAY': play_(); if (_barOpen) { renderBar(); } showOSD(false); return true;
|