Replace broadcaster API call with generic server status call. Add upgrade check bool
This commit is contained in:
@@ -8,7 +8,7 @@ const API_LOCATION = `${NEXT_PUBLIC_API_HOST}api/admin/`;
|
||||
export const FETCH_INTERVAL = 15000;
|
||||
|
||||
// Current inbound broadcaster info
|
||||
export const BROADCASTER = `${API_LOCATION}broadcaster`;
|
||||
export const STATUS = `${API_LOCATION}status`;
|
||||
|
||||
// Disconnect inbound stream
|
||||
export const DISCONNECT = `${API_LOCATION}disconnect`;
|
||||
@@ -36,11 +36,6 @@ 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.
|
||||
export const STREAM_STATUS = `${API_LOCATION}status`;
|
||||
|
||||
export async function fetchData(url) {
|
||||
const encoded = btoa(`${ADMIN_USERNAME}:${ADMIN_STREAMKEY}`);
|
||||
|
||||
@@ -81,8 +76,7 @@ export async function getGithubRelease() {
|
||||
|
||||
// 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)
|
||||
export async function upgradeVersionAvailable(currentVersion) {
|
||||
const recentRelease = await getGithubRelease();
|
||||
let recentReleaseVersion = recentRelease.tag_name;
|
||||
|
||||
@@ -90,7 +84,7 @@ export async function upgradeVersionAvailable() {
|
||||
recentReleaseVersion = recentReleaseVersion.substr(1)
|
||||
}
|
||||
|
||||
if (!upToDate(serverVersion.versionNumber, recentReleaseVersion)) {
|
||||
if (!upToDate(currentVersion, recentReleaseVersion)) {
|
||||
return recentReleaseVersion
|
||||
}
|
||||
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { BROADCASTER, fetchData, FETCH_INTERVAL } from './apis';
|
||||
|
||||
const initialState = {
|
||||
broadcastActive: false,
|
||||
message: '',
|
||||
broadcaster: null,
|
||||
};
|
||||
|
||||
export const BroadcastStatusContext = React.createContext(initialState);
|
||||
|
||||
const BroadcastStatusProvider = ({ children }) => {
|
||||
const [broadcasterStatus, setBroadcasterStatus] = useState(initialState);
|
||||
|
||||
const getBroadcastStatus = async () => {
|
||||
try {
|
||||
const result = await fetchData(BROADCASTER);
|
||||
const broadcastActive = !!result.broadcaster || result.success;
|
||||
setBroadcasterStatus({ ...result, broadcastActive });
|
||||
|
||||
} catch (error) {
|
||||
setBroadcasterStatus({ ...broadcasterStatus, message: error.message });
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
let getStatusIntervalId = null;
|
||||
|
||||
getBroadcastStatus();
|
||||
getStatusIntervalId = setInterval(getBroadcastStatus, FETCH_INTERVAL);
|
||||
|
||||
// returned function will be called on component unmount
|
||||
return () => {
|
||||
clearInterval(getStatusIntervalId);
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<BroadcastStatusContext.Provider value={broadcasterStatus}>
|
||||
{children}
|
||||
</BroadcastStatusContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
BroadcastStatusProvider.propTypes = {
|
||||
children: PropTypes.element.isRequired,
|
||||
};
|
||||
|
||||
export default BroadcastStatusProvider;
|
||||
55
web/utils/server-status-context.tsx
Normal file
55
web/utils/server-status-context.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { STATUS, fetchData, FETCH_INTERVAL } from './apis';
|
||||
|
||||
const initialState = {
|
||||
broadcastActive: false,
|
||||
broadcaster: null,
|
||||
online: false,
|
||||
viewerCount: 0,
|
||||
sessionPeakViewerCount: 0,
|
||||
overallPeakViewerCount: 0,
|
||||
disableUpgradeChecks: true,
|
||||
versionNumber: '0.0.0',
|
||||
};
|
||||
|
||||
export const ServerStatusContext = React.createContext(initialState);
|
||||
|
||||
const ServerStatusProvider = ({ children }) => {
|
||||
const [status, setStatus] = useState(initialState);
|
||||
|
||||
const getStatus = async () => {
|
||||
try {
|
||||
const result = await fetchData(STATUS);
|
||||
setStatus({ ...result });
|
||||
|
||||
} catch (error) {
|
||||
// setBroadcasterStatus({ ...broadcasterStatus, message: error.message });
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
let getStatusIntervalId = null;
|
||||
|
||||
getStatus();
|
||||
getStatusIntervalId = setInterval(getStatus, FETCH_INTERVAL);
|
||||
|
||||
// returned function will be called on component unmount
|
||||
return () => {
|
||||
clearInterval(getStatusIntervalId);
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<ServerStatusContext.Provider value={status}>
|
||||
{children}
|
||||
</ServerStatusContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
ServerStatusProvider.propTypes = {
|
||||
children: PropTypes.element.isRequired,
|
||||
};
|
||||
|
||||
export default ServerStatusProvider;
|
||||
Reference in New Issue
Block a user