This commit is contained in:
Gabe Kangas
2021-02-07 15:51:11 -08:00
parent cbe1dd0e0a
commit 26bbd48d4d
2 changed files with 72 additions and 35 deletions

View File

@@ -1,6 +1,7 @@
import React, { useState, useContext, useEffect } from 'react'; import React, { useState, useContext, useEffect } from 'react';
import { Button, Tooltip } from 'antd'; import { Button, Tooltip, Collapse, Popconfirm } from 'antd';
import { CopyOutlined, RedoOutlined } from '@ant-design/icons'; import { CopyOutlined, RedoOutlined } from '@ant-design/icons';
const { Panel } = Collapse;
import { TEXTFIELD_TYPE_NUMBER, TEXTFIELD_TYPE_PASSWORD } from './form-textfield'; import { TEXTFIELD_TYPE_NUMBER, TEXTFIELD_TYPE_PASSWORD } from './form-textfield';
import TextFieldWithSubmit from './form-textfield-with-submit'; import TextFieldWithSubmit from './form-textfield-with-submit';
@@ -14,6 +15,7 @@ import {
TEXTFIELD_PROPS_STREAM_KEY, TEXTFIELD_PROPS_STREAM_KEY,
TEXTFIELD_PROPS_WEB_PORT, TEXTFIELD_PROPS_WEB_PORT,
} from '../../utils/config-constants'; } from '../../utils/config-constants';
import { fetchData, API_YP_RESET } from '../../utils/apis';
import { UpdateArgs } from '../../types/config-section'; import { UpdateArgs } from '../../types/config-section';
@@ -24,7 +26,7 @@ export default function EditInstanceDetails() {
const { serverConfig } = serverStatusData || {}; const { serverConfig } = serverStatusData || {};
const { streamKey, ffmpegPath, rtmpServerPort, webServerPort } = serverConfig; const { streamKey, ffmpegPath, rtmpServerPort, webServerPort, yp } = serverConfig;
const [copyIsVisible, setCopyVisible] = useState(false); const [copyIsVisible, setCopyVisible] = useState(false);
@@ -66,6 +68,41 @@ export default function EditInstanceDetails() {
} }
}; };
const resetDirectoryRegistration = async () => {
try {
await fetchData(API_YP_RESET);
setMessage('');
} catch (error) {
alert(error);
}
};
function ResetYP() {
// TODO: Uncomment this after it's styled.
// if (yp.enabled) {
return (
<div className="field-container">
Reset Directory:
<Popconfirm
placement="topLeft"
title={'Are you sure you want to reset your connection to the Owncast directory?'}
onConfirm={resetDirectoryRegistration}
okText="Yes"
cancelText="No"
>
<Button>Reset Directory Connection</Button>
</Popconfirm>
<p>
If you are experiencing issues with your listing on the Owncast Directory and were asked
to "reset" your connection to the service, you can do that here. The next time you go live
it will try and re-register your server with the directory from scratch.
</p>
</div>
);
// }
// return null;
}
function generateStreamKey() { function generateStreamKey() {
let key = ''; let key = '';
for (let i = 0; i < 3; i += 1) { for (let i = 0; i < 3; i += 1) {
@@ -135,6 +172,13 @@ export default function EditInstanceDetails() {
onChange={handleFieldChange} onChange={handleFieldChange}
onSubmit={showConfigurationRestartMessage} onSubmit={showConfigurationRestartMessage}
/> />
<Collapse>
<Panel header="Advanced Settings" key="1">
<div className="form-fields">
<ResetYP />
</div>
</Panel>
</Collapse>
</div> </div>
); );
} }

View File

@@ -63,6 +63,8 @@ export const CREATE_WEBHOOK = `${API_LOCATION}webhooks/create`;
// hard coded social icons list // hard coded social icons list
export const SOCIAL_PLATFORMS_LIST = `${NEXT_PUBLIC_API_HOST}api/socialplatforms`; export const SOCIAL_PLATFORMS_LIST = `${NEXT_PUBLIC_API_HOST}api/socialplatforms`;
export const API_YP_RESET = `${API_LOCATION}yp/reset`;
export const TEMP_UPDATER_API = LOGS_ALL; export const TEMP_UPDATER_API = LOGS_ALL;
const GITHUB_RELEASE_URL = 'https://api.github.com/repos/owncast/owncast/releases/latest'; const GITHUB_RELEASE_URL = 'https://api.github.com/repos/owncast/owncast/releases/latest';
@@ -71,14 +73,10 @@ interface FetchOptions {
data?: any; data?: any;
method?: string; method?: string;
auth?: boolean; auth?: boolean;
}; }
export async function fetchData(url: string, options?: FetchOptions) { export async function fetchData(url: string, options?: FetchOptions) {
const { const { data, method = 'GET', auth = true } = options || {};
data,
method = 'GET',
auth = true,
} = options || {};
const requestOptions: RequestInit = { const requestOptions: RequestInit = {
method, method,
@@ -114,7 +112,6 @@ export async function fetchData(url: string, options?: FetchOptions) {
return {}; return {};
} }
export async function getGithubRelease() { export async function getGithubRelease() {
try { try {
const response = await fetch(GITHUB_RELEASE_URL); const response = await fetch(GITHUB_RELEASE_URL);
@@ -133,17 +130,13 @@ export async function getGithubRelease() {
// Stolen from https://gist.github.com/prenagha/98bbb03e27163bc2f5e4 // Stolen from https://gist.github.com/prenagha/98bbb03e27163bc2f5e4
const VPAT = /^\d+(\.\d+){0,2}$/; const VPAT = /^\d+(\.\d+){0,2}$/;
function upToDate(local, remote) { function upToDate(local, remote) {
if (!local || !remote || local.length === 0 || remote.length === 0) if (!local || !remote || local.length === 0 || remote.length === 0) return false;
return false; if (local === remote) return true;
if (local === remote)
return true;
if (VPAT.test(local) && VPAT.test(remote)) { if (VPAT.test(local) && VPAT.test(remote)) {
const lparts = local.split('.'); const lparts = local.split('.');
while(lparts.length < 3) while (lparts.length < 3) lparts.push('0');
lparts.push("0");
const rparts = remote.split('.'); const rparts = remote.split('.');
while (rparts.length < 3) while (rparts.length < 3) rparts.push('0');
rparts.push("0");
// eslint-disable-next-line no-plusplus // eslint-disable-next-line no-plusplus
for (let i = 0; i < 3; i++) { for (let i = 0; i < 3; i++) {
const l = parseInt(lparts[i], 10); const l = parseInt(lparts[i], 10);
@@ -165,11 +158,11 @@ export async function upgradeVersionAvailable(currentVersion) {
let recentReleaseVersion = recentRelease.tag_name; let recentReleaseVersion = recentRelease.tag_name;
if (recentReleaseVersion.substr(0, 1) === 'v') { if (recentReleaseVersion.substr(0, 1) === 'v') {
recentReleaseVersion = recentReleaseVersion.substr(1) recentReleaseVersion = recentReleaseVersion.substr(1);
} }
if (!upToDate(currentVersion, recentReleaseVersion)) { if (!upToDate(currentVersion, recentReleaseVersion)) {
return recentReleaseVersion return recentReleaseVersion;
} }
return null; return null;