From 26bbd48d4d18443a1d26f5ab2311675f8c02e838 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 7 Feb 2021 15:51:11 -0800 Subject: [PATCH] Add reset YP setting. Closes https://github.com/owncast/owncast/issues/701 --- web/components/config/edit-server-details.tsx | 48 ++++++++++++++- web/utils/apis.ts | 59 ++++++++----------- 2 files changed, 72 insertions(+), 35 deletions(-) diff --git a/web/components/config/edit-server-details.tsx b/web/components/config/edit-server-details.tsx index afe2223ee..6bbecfc9d 100644 --- a/web/components/config/edit-server-details.tsx +++ b/web/components/config/edit-server-details.tsx @@ -1,6 +1,7 @@ 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'; +const { Panel } = Collapse; import { TEXTFIELD_TYPE_NUMBER, TEXTFIELD_TYPE_PASSWORD } from './form-textfield'; import TextFieldWithSubmit from './form-textfield-with-submit'; @@ -14,6 +15,7 @@ import { TEXTFIELD_PROPS_STREAM_KEY, TEXTFIELD_PROPS_WEB_PORT, } from '../../utils/config-constants'; +import { fetchData, API_YP_RESET } from '../../utils/apis'; import { UpdateArgs } from '../../types/config-section'; @@ -24,7 +26,7 @@ export default function EditInstanceDetails() { const { serverConfig } = serverStatusData || {}; - const { streamKey, ffmpegPath, rtmpServerPort, webServerPort } = serverConfig; + const { streamKey, ffmpegPath, rtmpServerPort, webServerPort, yp } = serverConfig; 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 ( +
+ Reset Directory: + + + +

+ 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. +

+
+ ); + // } + // return null; + } + function generateStreamKey() { let key = ''; for (let i = 0; i < 3; i += 1) { @@ -135,6 +172,13 @@ export default function EditInstanceDetails() { onChange={handleFieldChange} onSubmit={showConfigurationRestartMessage} /> + + +
+ +
+
+
); } diff --git a/web/utils/apis.ts b/web/utils/apis.ts index 1972f5745..83e193c0c 100644 --- a/web/utils/apis.ts +++ b/web/utils/apis.ts @@ -63,6 +63,8 @@ export const CREATE_WEBHOOK = `${API_LOCATION}webhooks/create`; // hard coded social icons list 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; const GITHUB_RELEASE_URL = 'https://api.github.com/repos/owncast/owncast/releases/latest'; @@ -71,14 +73,10 @@ interface FetchOptions { data?: any; method?: string; auth?: boolean; -}; +} export async function fetchData(url: string, options?: FetchOptions) { - const { - data, - method = 'GET', - auth = true, - } = options || {}; + const { data, method = 'GET', auth = true } = options || {}; const requestOptions: RequestInit = { method, @@ -114,7 +112,6 @@ export async function fetchData(url: string, options?: FetchOptions) { return {}; } - export async function getGithubRelease() { try { const response = await fetch(GITHUB_RELEASE_URL); @@ -133,29 +130,25 @@ export async function getGithubRelease() { // 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; + 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; } // Make a request to the server status API and the Github releases API @@ -165,12 +158,12 @@ export async function upgradeVersionAvailable(currentVersion) { let recentReleaseVersion = recentRelease.tag_name; if (recentReleaseVersion.substr(0, 1) === 'v') { - recentReleaseVersion = recentReleaseVersion.substr(1) + recentReleaseVersion = recentReleaseVersion.substr(1); } if (!upToDate(currentVersion, recentReleaseVersion)) { - return recentReleaseVersion + return recentReleaseVersion; } return null; -} \ No newline at end of file +}