|
87 | 87 | font-weight: bold; |
88 | 88 |
|
89 | 89 | } |
| 90 | + |
| 91 | + #version-notice { |
| 92 | + width: 100%; |
| 93 | + position: absolute; |
| 94 | + top: 0; |
| 95 | + left: 0; |
| 96 | + background: #ffc39a; |
| 97 | + padding: 1rem; |
| 98 | + font-size: 2rem; |
| 99 | + font-weight: bold; |
| 100 | + color: #950000; |
| 101 | + box-sizing: border-box; |
| 102 | + } |
90 | 103 | </style> |
91 | 104 |
|
92 | 105 | <style type="text" id="enable-bubbles"> |
|
180 | 193 |
|
181 | 194 | <body> |
182 | 195 | <div id="chat"></div> |
| 196 | + <div id="version-notice" style="display: none;"></div> |
183 | 197 |
|
184 | 198 | <script> |
| 199 | + const STREAMCHAT_VERSION = '0.2.0'; |
| 200 | + const STREAMCHAT_GH_USER = 'izzy'; |
| 201 | + const STREAMCHAT_GH_REPO = 'stream-chat'; |
| 202 | + |
| 203 | + /** |
| 204 | + * Checks the current version of streamchat against the latest release on GitHub. |
| 205 | + * @returns {string} A message indicating whether the current version is up to date or not. |
| 206 | + */ |
| 207 | + async function version_check() { |
| 208 | + const res = await fetch(`https://api.github.com/repos/${STREAMCHAT_GH_USER}/${STREAMCHAT_GH_REPO}/releases/latest`) |
| 209 | + .then(response => response.json()) |
| 210 | + .then(data => { |
| 211 | + const version = data.tag_name.replace(/^v/i, ""); |
| 212 | + const version_parts = version.split('.'); |
| 213 | + const current_version_parts = STREAMCHAT_VERSION.split('.'); |
| 214 | + let upToDate = true; |
| 215 | + |
| 216 | + if (version_parts[0] > current_version_parts[0]) { |
| 217 | + console.debug(`${STREAMCHAT_GH_REPO} version ${STREAMCHAT_VERSION} is outdated. There is a major update to version ${data.tag_name} available.`); |
| 218 | + upToDate = false; |
| 219 | + } else if ((version_parts[0] === current_version_parts[0] && version_parts[1] > current_version_parts[1]) || |
| 220 | + (version_parts[0] === current_version_parts[0] && version_parts[1] === current_version_parts[1] && version_parts[2] > current_version_parts[2])) |
| 221 | + { |
| 222 | + console.debug(`${STREAMCHAT_GH_REPO} version ${STREAMCHAT_VERSION} is outdated. Please update to version ${data.tag_name}`); |
| 223 | + upToDate = false; |
| 224 | + } else { |
| 225 | + console.debug(`${STREAMCHAT_GH_REPO} version ${STREAMCHAT_VERSION} is up to date or newer than the latest release ${data.tag_name}`); |
| 226 | + } |
| 227 | + |
| 228 | + return {version: version, upToDate: upToDate, error: null}; |
| 229 | + }).catch(error => { |
| 230 | + console.error(error); |
| 231 | + return {version: 'unknown', upToDate: false, error: error}; |
| 232 | + }); |
| 233 | + return res; |
| 234 | + } |
| 235 | + |
185 | 236 | function getRnd(max, min = 0) { |
186 | 237 | return Math.floor(Math.random() * (max - min + 1) + min); |
187 | 238 | } |
188 | 239 |
|
| 240 | + /** |
| 241 | + * @param {string} p The search parameter name |
| 242 | + * @param {boolean} d The default value |
| 243 | + * @returns {boolean} The value of the search parameter, or the default value if the parameter is not set. |
| 244 | + */ |
189 | 245 | function searchParamIsTrue(p, d = false) { |
190 | 246 | let v = new URLSearchParams(window.location.search).get(p); |
191 | 247 | if (v === undefined || v === null) { |
|
299 | 355 | 'youtube': false, |
300 | 356 | 'websocket': '', |
301 | 357 | }; |
302 | | - if (streamerbotEnabled === searchParamIsTrue("sb_enabled")) { |
| 358 | + if (streamerbotEnabled === searchParamIsTrue("sb_enabled", true)) { |
303 | 359 | let sb_ws_uri = 'ws://localhost:8080/'; |
304 | 360 | if (url.searchParams.get("sb_ws_uri") !== null) { |
305 | 361 | sb_ws_uri = decodeURI(url.searchParams.get("sb_ws_uri")); |
306 | 362 | } |
307 | 363 |
|
308 | 364 | streamerbotConfig = { |
309 | 365 | 'enabled': streamerbotEnabled, |
310 | | - 'twitch': searchParamIsTrue("sb_twitch", false), |
311 | | - 'youtube': searchParamIsTrue("sb_youtube", false), |
| 366 | + 'twitch': searchParamIsTrue("sb_twitch", true), |
| 367 | + 'youtube': searchParamIsTrue("sb_youtube", true), |
312 | 368 | 'websocket': sb_ws_uri |
313 | 369 | } |
314 | 370 | } |
|
340 | 396 | 'max_messages': searchParamOrDefault("max_messages", false), |
341 | 397 | 'pronouns': searchParamIsTrue("pronouns", true), |
342 | 398 | 'highlights': searchParamIsTrue("highlights", true), |
343 | | - 'announcements': searchParamIsTrue("announcements", false), |
| 399 | + 'announcements': searchParamIsTrue("announcements", true), |
344 | 400 | 'badges': { |
345 | 401 | 'enabled': searchParamIsTrue("badges", true), |
346 | 402 | 'left': searchParamIsTrue("badges_left"), |
|
356 | 412 | 'bots': bot_list, |
357 | 413 | }, |
358 | 414 | 'debug': searchParamIsTrue("debug"), |
359 | | - |
| 415 | + 'version': { |
| 416 | + 'current': STREAMCHAT_VERSION, |
| 417 | + 'check': searchParamIsTrue("version_check", true), |
| 418 | + 'alert': searchParamIsTrue("version_alert", false), |
| 419 | + } |
360 | 420 | } |
361 | 421 | } |
362 | 422 |
|
363 | 423 | const config = parseURL(); |
364 | 424 |
|
| 425 | + console.debug(`Starting stream chat version ${STREAMCHAT_VERSION}`); |
365 | 426 | console.debug(['Loaded config', config]); |
366 | 427 |
|
367 | 428 | let socket, pronouns_users = {}, |
|
1263 | 1324 | } else { |
1264 | 1325 | initializeConnections(); |
1265 | 1326 | } |
| 1327 | + |
| 1328 | + if (config["version"]["check"] === true) { |
| 1329 | + version_check().then(version => { |
| 1330 | + let version_el = document.getElementById("version-notice"); |
| 1331 | + let message = ''; |
| 1332 | + let display = 'none'; |
| 1333 | + |
| 1334 | + console.log(version); |
| 1335 | + if (version.upToDate === false) { |
| 1336 | + display = "block"; |
| 1337 | + message = `You are using version ${STREAMCHAT_VERSION} of ${STREAMCHAT_GH_REPO}.` + |
| 1338 | + `There is a new version available. Please update to the latest version ${version.version}.`; |
| 1339 | + } else if (version.error) { |
| 1340 | + display = "block"; |
| 1341 | + message = `There was an error checking for updates. Error: ${version.error}`; |
| 1342 | + } |
| 1343 | + |
| 1344 | + if (config["version"]["alert"] === true && message !== '') { |
| 1345 | + alert(message); |
| 1346 | + } else { |
| 1347 | + version_el.style.display = display; |
| 1348 | + version_el.innerHTML = message; |
| 1349 | + } |
| 1350 | + }); |
| 1351 | + } |
1266 | 1352 | </script> |
1267 | 1353 | </body> |
1268 | 1354 |
|
|
0 commit comments