0

Prettified Code!

This commit is contained in:
gabek 2021-05-21 03:29:32 +00:00 committed by GitHub Action
parent 91f6dcd0f6
commit 6cb73b7aec
2 changed files with 70 additions and 75 deletions

View File

@ -12,10 +12,7 @@ import { OwncastPlayer } from './components/player.js';
import Websocket from './utils/websocket.js'; import Websocket from './utils/websocket.js';
const websocket = new Websocket(); const websocket = new Websocket();
import { import { addNewlines, pluralize } from './utils/helpers.js';
addNewlines,
pluralize,
} from './utils/helpers.js';
import { import {
URL_CONFIG, URL_CONFIG,
URL_STATUS, URL_STATUS,
@ -35,7 +32,7 @@ export default class VideoOnly extends Component {
configData: {}, configData: {},
playerActive: false, // player object is active playerActive: false, // player object is active
streamOnline: false, // stream is active/online streamOnline: false, // stream is active/online
isPlaying: false, isPlaying: false,
@ -88,42 +85,42 @@ export default class VideoOnly extends Component {
// fetch /config data // fetch /config data
getConfig() { getConfig() {
fetch(URL_CONFIG) fetch(URL_CONFIG)
.then(response => { .then((response) => {
if (!response.ok) {
throw new Error(`Network response was not ok ${response.ok}`);
}
return response.json();
})
.then(json => {
this.setConfigData(json);
})
.catch(error => {
this.handleNetworkingError(`Fetch config: ${error}`);
});
}
// fetch stream status
getStreamStatus() {
fetch(URL_STATUS)
.then(response => {
if (!response.ok) { if (!response.ok) {
throw new Error(`Network response was not ok ${response.ok}`); throw new Error(`Network response was not ok ${response.ok}`);
} }
return response.json(); return response.json();
}) })
.then(json => { .then((json) => {
this.setConfigData(json);
})
.catch((error) => {
this.handleNetworkingError(`Fetch config: ${error}`);
});
}
// fetch stream status
getStreamStatus() {
fetch(URL_STATUS)
.then((response) => {
if (!response.ok) {
throw new Error(`Network response was not ok ${response.ok}`);
}
return response.json();
})
.then((json) => {
this.updateStreamStatus(json); this.updateStreamStatus(json);
}) })
.catch(error => { .catch((error) => {
this.handleOfflineMode(); this.handleOfflineMode();
this.handleNetworkingError(`Stream status: ${error}`); this.handleNetworkingError(`Stream status: ${error}`);
}); });
// Ping the API to let them know we're an active viewer // Ping the API to let them know we're an active viewer
fetch(URL_VIEWER_PING).catch((error) => { fetch(URL_VIEWER_PING).catch((error) => {
this.handleOfflineMode(); this.handleOfflineMode();
this.handleNetworkingError(`Viewer PING error: ${error}`); this.handleNetworkingError(`Viewer PING error: ${error}`);
}); });
} }
setConfigData(data = {}) { setConfigData(data = {}) {
@ -144,10 +141,7 @@ export default class VideoOnly extends Component {
if (!status) { if (!status) {
return; return;
} }
const { const { viewerCount, online } = status;
viewerCount,
online,
} = status;
this.lastDisconnectTime = status.lastDisconnectTime; this.lastDisconnectTime = status.lastDisconnectTime;
@ -204,8 +198,10 @@ export default class VideoOnly extends Component {
handleOnlineMode() { handleOnlineMode() {
this.player.startPlayer(); this.player.startPlayer();
this.streamDurationTimer = this.streamDurationTimer = setInterval(
setInterval(this.setCurrentStreamDuration, TIMER_STREAM_DURATION_COUNTER); this.setCurrentStreamDuration,
TIMER_STREAM_DURATION_COUNTER
);
this.setState({ this.setState({
playerActive: true, playerActive: true,
@ -233,35 +229,36 @@ export default class VideoOnly extends Component {
const mainClass = playerActive ? 'online' : ''; const mainClass = playerActive ? 'online' : '';
const poster = isPlaying ? null : html` const poster = isPlaying
<${VideoPoster} offlineImage=${logo} active=${streamOnline} /> ? null
`; : html` <${VideoPoster} offlineImage=${logo} active=${streamOnline} /> `;
return ( return html`
html` <main class=${mainClass}>
<main class=${mainClass}> <div
<div id="video-container"
id="video-container" class="flex owncast-video-container bg-black w-full bg-center bg-no-repeat flex flex-col items-center justify-start"
class="flex owncast-video-container bg-black w-full bg-center bg-no-repeat flex flex-col items-center justify-start" >
> <video
<video class="video-js vjs-big-play-centered display-block w-full h-full"
class="video-js vjs-big-play-centered display-block w-full h-full" id="video"
id="video" preload="auto"
preload="auto" controls
controls playsinline
playsinline ></video>
></video> ${poster}
${poster} </div>
</div>
<section <section
id="stream-info" id="stream-info"
aria-label="Stream status" aria-label="Stream status"
class="flex text-center flex-row justify-between font-mono py-2 px-8 bg-gray-900 text-indigo-200 shadow-md border-b border-gray-100 border-solid" class="flex text-center flex-row justify-between font-mono py-2 px-8 bg-gray-900 text-indigo-200 shadow-md border-b border-gray-100 border-solid"
>
<span>${streamStatusMessage}</span>
<span id="stream-viewer-count"
>${viewerCount} ${pluralize('viewer', viewerCount)}.</span
> >
<span>${streamStatusMessage}</span> </section>
<span id="stream-viewer-count">${viewerCount} ${pluralize('viewer', viewerCount)}.</span> </main>
</section> `;
</main>
`);
} }
} }

View File

@ -8,12 +8,15 @@ export const URL_VIEWER_PING = `/api/ping`;
// TODO: This directory is customizable in the config. So we should expose this via the config API. // TODO: This directory is customizable in the config. So we should expose this via the config API.
export const URL_STREAM = `/hls/stream.m3u8`; export const URL_STREAM = `/hls/stream.m3u8`;
export const URL_WEBSOCKET = `${location.protocol === 'https:' ? 'wss' : 'ws'}://${location.host}/entry`; export const URL_WEBSOCKET = `${
location.protocol === 'https:' ? 'wss' : 'ws'
}://${location.host}/entry`;
export const TIMER_STATUS_UPDATE = 5000; // ms export const TIMER_STATUS_UPDATE = 5000; // ms
export const TIMER_DISABLE_CHAT_AFTER_OFFLINE = 5 * 60 * 1000; // 5 mins export const TIMER_DISABLE_CHAT_AFTER_OFFLINE = 5 * 60 * 1000; // 5 mins
export const TIMER_STREAM_DURATION_COUNTER = 1000; export const TIMER_STREAM_DURATION_COUNTER = 1000;
export const TEMP_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; export const TEMP_IMAGE =
'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
export const OWNCAST_LOGO_LOCAL = '/img/logo.svg'; export const OWNCAST_LOGO_LOCAL = '/img/logo.svg';
@ -23,12 +26,12 @@ export const MESSAGE_ONLINE = 'Stream is online.';
export const URL_OWNCAST = 'https://owncast.online'; // used in footer export const URL_OWNCAST = 'https://owncast.online'; // used in footer
export const PLAYER_VOLUME = 'owncast_volume'; export const PLAYER_VOLUME = 'owncast_volume';
export const KEY_USERNAME = 'owncast_username'; export const KEY_USERNAME = 'owncast_username';
export const KEY_CUSTOM_USERNAME_SET = 'owncast_custom_username_set' export const KEY_CUSTOM_USERNAME_SET = 'owncast_custom_username_set';
export const KEY_CHAT_DISPLAYED = 'owncast_chat'; export const KEY_CHAT_DISPLAYED = 'owncast_chat';
export const KEY_CHAT_FIRST_MESSAGE_SENT = 'owncast_first_message_sent'; export const KEY_CHAT_FIRST_MESSAGE_SENT = 'owncast_first_message_sent';
export const CHAT_INITIAL_PLACEHOLDER_TEXT = 'Type here to chat, no account necessary.'; export const CHAT_INITIAL_PLACEHOLDER_TEXT =
'Type here to chat, no account necessary.';
export const CHAT_PLACEHOLDER_TEXT = 'Message'; export const CHAT_PLACEHOLDER_TEXT = 'Message';
export const CHAT_PLACEHOLDER_OFFLINE = 'Chat is offline.'; export const CHAT_PLACEHOLDER_OFFLINE = 'Chat is offline.';
export const CHAT_MAX_MESSAGE_LENGTH = 500; export const CHAT_MAX_MESSAGE_LENGTH = 500;
@ -44,12 +47,7 @@ export const CHAT_OK_KEYCODES = [
'Delete', 'Delete',
'Backspace', 'Backspace',
]; ];
export const CHAT_KEY_MODIFIERS = [ export const CHAT_KEY_MODIFIERS = ['Control', 'Shift', 'Meta', 'Alt'];
'Control',
'Shift',
'Meta',
'Alt',
];
export const MESSAGE_JUMPTOBOTTOM_BUFFER = 300; export const MESSAGE_JUMPTOBOTTOM_BUFFER = 300;
// app styling // app styling