mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-08-05 20:58:27 +02:00
Add "Check for update" feature (#21)
This commit is contained in:
@@ -173,6 +173,9 @@ class StreamStats {
|
|||||||
|
|
||||||
|
|
||||||
class Preferences {
|
class Preferences {
|
||||||
|
static get LAST_UPDATE_CHECK() { return 'last_update_check'; }
|
||||||
|
static get LATEST_VERSION() { return 'latest_version'; }
|
||||||
|
|
||||||
static get SERVER_REGION() { return 'server_region'; }
|
static get SERVER_REGION() { return 'server_region'; }
|
||||||
static get PREFER_IPV6_SERVER() { return 'prefer_ipv6_server'; }
|
static get PREFER_IPV6_SERVER() { return 'prefer_ipv6_server'; }
|
||||||
static get FORCE_1080P_STREAM() { return 'force_1080p_stream'; }
|
static get FORCE_1080P_STREAM() { return 'force_1080p_stream'; }
|
||||||
@@ -325,6 +328,26 @@ class Preferences {
|
|||||||
const PREFS = new Preferences();
|
const PREFS = new Preferences();
|
||||||
|
|
||||||
|
|
||||||
|
function checkForUpdate() {
|
||||||
|
const CHECK_INTERVAL_SECONDS = 4 * 3600 * 1000; // check every 4 hours
|
||||||
|
const lastCheck = PREFS.get(Preferences.LAST_UPDATE_CHECK, 0);
|
||||||
|
const now = +new Date;
|
||||||
|
|
||||||
|
if (now - lastCheck < CHECK_INTERVAL_SECONDS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start checking
|
||||||
|
PREFS.set(Preferences.LAST_UPDATE_CHECK, now);
|
||||||
|
fetch('https://api.github.com/repos/redphx/better-xcloud/releases/latest')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(json => {
|
||||||
|
// Store the latest version
|
||||||
|
PREFS.set(Preferences.LATEST_VERSION, json.tag_name.substring(1));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function addCss() {
|
function addCss() {
|
||||||
let css = `
|
let css = `
|
||||||
.better_xcloud_settings_button {
|
.better_xcloud_settings_button {
|
||||||
@@ -341,6 +364,10 @@ function addCss() {
|
|||||||
background-color: #515863;
|
background-color: #515863;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.better_xcloud_settings_button[data-update-available]::after {
|
||||||
|
content: ' 🌟';
|
||||||
|
}
|
||||||
|
|
||||||
.better_xcloud_settings {
|
.better_xcloud_settings {
|
||||||
background-color: #151515;
|
background-color: #151515;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
@@ -362,7 +389,11 @@ function addCss() {
|
|||||||
outline: none !important;
|
outline: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.better_xcloud_settings_wrapper a {
|
.better_xcloud_settings_wrapper .better_xcloud_settings_title_wrapper {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.better_xcloud_settings_wrapper a.better_xcloud_settings_title {
|
||||||
font-family: Bahnschrift, Arial, Helvetica, sans-serif;
|
font-family: Bahnschrift, Arial, Helvetica, sans-serif;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -370,18 +401,37 @@ function addCss() {
|
|||||||
display: block;
|
display: block;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
color: #5dc21e;
|
color: #5dc21e;
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (hover: hover) {
|
@media (hover: hover) {
|
||||||
.better_xcloud_settings_wrapper a:hover {
|
.better_xcloud_settings_wrapper a.better_xcloud_settings_title:hover {
|
||||||
color: #83f73a;
|
color: #83f73a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.better_xcloud_settings_wrapper a:focus {
|
.better_xcloud_settings_wrapper a.better_xcloud_settings_title:focus {
|
||||||
color: #83f73a;
|
color: #83f73a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.better_xcloud_settings_wrapper a.better_xcloud_settings_update {
|
||||||
|
display: none;
|
||||||
|
color: #ff834b;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (hover: hover) {
|
||||||
|
.better_xcloud_settings_wrapper a.better_xcloud_settings_update:hover {
|
||||||
|
color: #ff9869;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.better_xcloud_settings_wrapper a.better_xcloud_settings_update:focus {
|
||||||
|
color: #ff9869;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
.better_xcloud_settings_wrapper .setting_row {
|
.better_xcloud_settings_wrapper .setting_row {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
@@ -841,30 +891,47 @@ function injectSettingsButton($parent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CE = createElement;
|
const CE = createElement;
|
||||||
const preferredRegion = getPreferredServerRegion();
|
const PREF_PREFERRED_REGION = getPreferredServerRegion();
|
||||||
|
const PREF_LATEST_VERSION = PREFS.get(Preferences.LATEST_VERSION, null);
|
||||||
|
|
||||||
const $button = CE('button', {'class': 'better_xcloud_settings_button'}, preferredRegion);
|
const $button = CE('button', {'class': 'better_xcloud_settings_button'}, PREF_PREFERRED_REGION);
|
||||||
$button.addEventListener('click', e => {
|
$button.addEventListener('click', e => {
|
||||||
const $settings = document.querySelector('.better_xcloud_settings');
|
const $settings = document.querySelector('.better_xcloud_settings');
|
||||||
$settings.classList.toggle('better_xcloud_settings_gone');
|
$settings.classList.toggle('better_xcloud_settings_gone');
|
||||||
$settings.scrollIntoView();
|
$settings.scrollIntoView();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (PREF_LATEST_VERSION && PREF_LATEST_VERSION !== SCRIPT_VERSION) {
|
||||||
|
$button.setAttribute('data-update-available', true);
|
||||||
|
}
|
||||||
|
|
||||||
$parent.appendChild($button);
|
$parent.appendChild($button);
|
||||||
|
|
||||||
const $container = CE('div', {
|
const $container = CE('div', {
|
||||||
'class': 'better_xcloud_settings better_xcloud_settings_gone',
|
'class': 'better_xcloud_settings better_xcloud_settings_gone',
|
||||||
});
|
});
|
||||||
|
|
||||||
const $wrapper = CE('div', {
|
let $updateAvailable;
|
||||||
'class': 'better_xcloud_settings_wrapper',
|
const $wrapper = CE('div', {'class': 'better_xcloud_settings_wrapper'},
|
||||||
});
|
CE('div', {'class': 'better_xcloud_settings_title_wrapper'},
|
||||||
|
CE('a', {
|
||||||
|
'class': 'better_xcloud_settings_title',
|
||||||
|
'href': SCRIPT_HOME,
|
||||||
|
'target': '_blank',
|
||||||
|
}, 'Better xCloud ' + SCRIPT_VERSION),
|
||||||
|
$updateAvailable = CE('a', {
|
||||||
|
'class': 'better_xcloud_settings_update',
|
||||||
|
'href': 'https://github.com/redphx/better-xcloud/releases',
|
||||||
|
'target': '_blank',
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
$container.appendChild($wrapper);
|
$container.appendChild($wrapper);
|
||||||
|
|
||||||
const $title = CE('a', {
|
if (PREF_LATEST_VERSION && PREF_LATEST_VERSION != SCRIPT_VERSION) {
|
||||||
href: SCRIPT_HOME,
|
$updateAvailable.textContent = `🌟 Version ${PREF_LATEST_VERSION} available`;
|
||||||
target: '_blank',
|
$updateAvailable.style.display = 'block';
|
||||||
}, 'Better xCloud ' + SCRIPT_VERSION);
|
}
|
||||||
$wrapper.appendChild($title);
|
|
||||||
|
|
||||||
for (let setting of Preferences.SETTINGS) {
|
for (let setting of Preferences.SETTINGS) {
|
||||||
if (setting.hidden) {
|
if (setting.hidden) {
|
||||||
@@ -882,7 +949,7 @@ function injectSettingsButton($parent) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (setting.id === Preferences.SERVER_REGION) {
|
if (setting.id === Preferences.SERVER_REGION) {
|
||||||
selectedValue = preferredRegion;
|
selectedValue = PREF_PREFERRED_REGION;
|
||||||
setting.options = {};
|
setting.options = {};
|
||||||
for (let regionName in SERVER_REGIONS) {
|
for (let regionName in SERVER_REGIONS) {
|
||||||
const region = SERVER_REGIONS[regionName];
|
const region = SERVER_REGIONS[regionName];
|
||||||
@@ -1543,6 +1610,10 @@ if (PREFS.get(Preferences.DISABLE_BANDWIDTH_CHECKING)) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for Update
|
||||||
|
checkForUpdate();
|
||||||
|
|
||||||
|
// Monkey patches
|
||||||
patchRtcCodecs();
|
patchRtcCodecs();
|
||||||
interceptHttpRequests();
|
interceptHttpRequests();
|
||||||
patchVideoApi();
|
patchVideoApi();
|
||||||
|
Reference in New Issue
Block a user