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 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
- - **In-player menu** (press **UP**):
25
- - *Select source* switch stream mid-playback (keeps your position), each source shown
26
- on two lines (name + size / seeds / languages).
27
- - *Audio track* shown only when the stream has more than one audio track
28
- (AVPlay `getTotalTrackInfo` / `setSelectTrack`).
29
- - *Restart from beginning*, *Skip back 10 minutes*, *Skip forward 10 minutes*
30
- (hidden for live streams).
31
- - *Configure subtitles* *Language* (2 levels: language the tracks within it),
32
- *Size*, *Style*.
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: 60px; z-index: 22; text-align: center; }
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: 200px; z-index: 24; text-align: right; }
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.0">
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.0"></script>
49
- <script src="js/util.js?v=1.8.0"></script>
50
- <script src="js/stremio.js?v=1.8.0"></script>
51
- <script src="js/keys.js?v=1.8.0"></script>
52
- <script src="js/focus.js?v=1.8.0"></script>
53
- <script src="js/player.js?v=1.8.0"></script>
54
- <script src="js/views.js?v=1.8.0"></script>
55
- <script src="js/app.js?v=1.8.0"></script>
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 start() {
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuvio-tizen",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "description": "Nuvio-style Stremio-addon streaming client for Tizen 3.0+ Samsung TVs (TizenBrew app module).",
5
5
  "packageType": "app",
6
6
  "appName": "Nuvio",