Show/hide upgrade sidebar item
This commit is contained in:
@@ -34,6 +34,8 @@ export const LOGS_ALL = `${API_LOCATION}logs`;
|
||||
// Get warnings + errors
|
||||
export const LOGS_WARN = `${API_LOCATION}logs/warnings`;
|
||||
|
||||
const GITHUB_RELEASE_URL = "https://api.github.com/repos/owncast/owncast/releases/latest";
|
||||
|
||||
// Current Stream status.
|
||||
// This is literally the same as /api/status except it supports
|
||||
// auth.
|
||||
@@ -61,3 +63,65 @@ export async function fetchData(url) {
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
export async function getGithubRelease() {
|
||||
try {
|
||||
const response = await fetch(GITHUB_RELEASE_URL);
|
||||
if (!response.ok) {
|
||||
const message = `An error has occured: ${response.status}`;
|
||||
throw new Error(message);
|
||||
}
|
||||
const json = await response.json();
|
||||
return json;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// Make a request to the server status API and the Github releases API
|
||||
// and return a release if it's newer than the server version.
|
||||
export async function upgradeVersionAvailable() {
|
||||
const serverVersion = await fetchData(STREAM_STATUS)
|
||||
const recentRelease = await getGithubRelease();
|
||||
let recentReleaseVersion = recentRelease.tag_name;
|
||||
|
||||
if (recentReleaseVersion.substr(0, 1) === 'v') {
|
||||
recentReleaseVersion = recentReleaseVersion.substr(1)
|
||||
}
|
||||
|
||||
if (!upToDate(serverVersion.versionNumber, recentReleaseVersion)) {
|
||||
return recentReleaseVersion
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Stolen from https://gist.github.com/prenagha/98bbb03e27163bc2f5e4
|
||||
const VPAT = /^\d+(\.\d+){0,2}$/;
|
||||
function upToDate(local, remote) {
|
||||
if (!local || !remote || local.length === 0 || remote.length === 0)
|
||||
return false;
|
||||
if (local === remote)
|
||||
return true;
|
||||
if (VPAT.test(local) && VPAT.test(remote)) {
|
||||
const lparts = local.split('.');
|
||||
while(lparts.length < 3)
|
||||
lparts.push("0");
|
||||
const rparts = remote.split('.');
|
||||
while (rparts.length < 3)
|
||||
rparts.push("0");
|
||||
// eslint-disable-next-line no-plusplus
|
||||
for (let i=0; i<3; i++) {
|
||||
const l = parseInt(lparts[i], 10);
|
||||
const r = parseInt(rparts[i], 10);
|
||||
if (l === r)
|
||||
// eslint-disable-next-line no-continue
|
||||
continue;
|
||||
return l > r;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return local >= remote;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user