Incremental removal of Desktop code #252
This commit is contained in:
commit
f0591b8956
6 changed files with 3 additions and 248 deletions
|
@ -1,5 +1,4 @@
|
||||||
import { app, Menu, shell } from 'electron';
|
import { app, Menu, shell } from 'electron';
|
||||||
import { ZOOM } from 'util/zoomWindow';
|
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const template = [
|
const template = [
|
||||||
|
@ -23,38 +22,6 @@ export default () => {
|
||||||
label: 'View',
|
label: 'View',
|
||||||
submenu: [
|
submenu: [
|
||||||
{ role: 'reload' },
|
{ role: 'reload' },
|
||||||
{
|
|
||||||
label: 'Zoom',
|
|
||||||
submenu: [
|
|
||||||
{
|
|
||||||
label: 'Zoom In',
|
|
||||||
accelerator: 'CmdOrCtrl+=',
|
|
||||||
click: (menuItem, browserWindow) => {
|
|
||||||
if (browserWindow) {
|
|
||||||
browserWindow.webContents.send('zoom-window', ZOOM.INCREMENT);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Zoom Out',
|
|
||||||
accelerator: 'CmdOrCtrl+-',
|
|
||||||
click: (menuItem, browserWindow) => {
|
|
||||||
if (browserWindow) {
|
|
||||||
browserWindow.webContents.send('zoom-window', ZOOM.DECREMENT);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Reset Zoom',
|
|
||||||
accelerator: 'CmdOrCtrl+0',
|
|
||||||
click: (menuItem, browserWindow) => {
|
|
||||||
if (browserWindow) {
|
|
||||||
browserWindow.webContents.send('zoom-window', ZOOM.RESET);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'Developer',
|
label: 'Developer',
|
||||||
submenu: [{ role: 'forcereload' }, { role: 'toggledevtools' }],
|
submenu: [{ role: 'forcereload' }, { role: 'toggledevtools' }],
|
||||||
|
|
|
@ -20,12 +20,6 @@ import REWARDS from 'rewards';
|
||||||
import usePersistedState from 'effects/use-persisted-state';
|
import usePersistedState from 'effects/use-persisted-state';
|
||||||
import Spinner from 'component/spinner';
|
import Spinner from 'component/spinner';
|
||||||
import LANGUAGES from 'constants/languages';
|
import LANGUAGES from 'constants/languages';
|
||||||
|
|
||||||
// @if TARGET='app'
|
|
||||||
import useZoom from 'effects/use-zoom';
|
|
||||||
import useHistoryNav from 'effects/use-history-nav';
|
|
||||||
// @endif
|
|
||||||
// @if TARGET='web'
|
|
||||||
import YoutubeWelcome from 'web/component/youtubeReferralWelcome';
|
import YoutubeWelcome from 'web/component/youtubeReferralWelcome';
|
||||||
import {
|
import {
|
||||||
useDegradedPerformance,
|
useDegradedPerformance,
|
||||||
|
@ -34,22 +28,17 @@ import {
|
||||||
STATUS_FAILING,
|
STATUS_FAILING,
|
||||||
STATUS_DOWN,
|
STATUS_DOWN,
|
||||||
} from 'web/effects/use-degraded-performance';
|
} from 'web/effects/use-degraded-performance';
|
||||||
// @endif
|
|
||||||
import LANGUAGE_MIGRATIONS from 'constants/language-migrations';
|
import LANGUAGE_MIGRATIONS from 'constants/language-migrations';
|
||||||
|
|
||||||
const FileDrop = lazyImport(() => import('component/fileDrop' /* webpackChunkName: "fileDrop" */));
|
const FileDrop = lazyImport(() => import('component/fileDrop' /* webpackChunkName: "fileDrop" */));
|
||||||
const NagContinueFirstRun = lazyImport(() => import('component/nagContinueFirstRun' /* webpackChunkName: "nagCFR" */));
|
const NagContinueFirstRun = lazyImport(() => import('component/nagContinueFirstRun' /* webpackChunkName: "nagCFR" */));
|
||||||
const OpenInAppLink = lazyImport(() => import('web/component/openInAppLink' /* webpackChunkName: "openInAppLink" */));
|
const OpenInAppLink = lazyImport(() => import('web/component/openInAppLink' /* webpackChunkName: "openInAppLink" */));
|
||||||
|
|
||||||
// @if TARGET='web'
|
|
||||||
const NagDataCollection = lazyImport(() => import('web/component/nag-data-collection' /* webpackChunkName: "nagDC" */));
|
const NagDataCollection = lazyImport(() => import('web/component/nag-data-collection' /* webpackChunkName: "nagDC" */));
|
||||||
const NagDegradedPerformance = lazyImport(() =>
|
const NagDegradedPerformance = lazyImport(() =>
|
||||||
import('web/component/nag-degraded-performance' /* webpackChunkName: "NagDegradedPerformance" */)
|
import('web/component/nag-degraded-performance' /* webpackChunkName: "NagDegradedPerformance" */)
|
||||||
);
|
);
|
||||||
const NagNoUser = lazyImport(() => import('web/component/nag-no-user' /* webpackChunkName: "nag-no-user" */));
|
const NagNoUser = lazyImport(() => import('web/component/nag-no-user' /* webpackChunkName: "nag-no-user" */));
|
||||||
const NagSunset = lazyImport(() => import('web/component/nag-sunset' /* webpackChunkName: "nag-sunset" */));
|
const NagSunset = lazyImport(() => import('web/component/nag-sunset' /* webpackChunkName: "nag-sunset" */));
|
||||||
// @endif
|
|
||||||
|
|
||||||
const SyncFatalError = lazyImport(() => import('component/syncFatalError' /* webpackChunkName: "syncFatalError" */));
|
const SyncFatalError = lazyImport(() => import('component/syncFatalError' /* webpackChunkName: "syncFatalError" */));
|
||||||
|
|
||||||
// ****************************************************************************
|
// ****************************************************************************
|
||||||
|
@ -154,10 +143,10 @@ function App(props: Props) {
|
||||||
const isRewardApproved = user && user.is_reward_approved;
|
const isRewardApproved = user && user.is_reward_approved;
|
||||||
const previousHasVerifiedEmail = usePrevious(hasVerifiedEmail);
|
const previousHasVerifiedEmail = usePrevious(hasVerifiedEmail);
|
||||||
const previousRewardApproved = usePrevious(isRewardApproved);
|
const previousRewardApproved = usePrevious(isRewardApproved);
|
||||||
// @if TARGET='web'
|
|
||||||
const [showAnalyticsNag, setShowAnalyticsNag] = usePersistedState('analytics-nag', true);
|
const [showAnalyticsNag, setShowAnalyticsNag] = usePersistedState('analytics-nag', true);
|
||||||
const [lbryTvApiStatus, setLbryTvApiStatus] = useState(STATUS_OK);
|
const [lbryTvApiStatus, setLbryTvApiStatus] = useState(STATUS_OK);
|
||||||
// @endif
|
|
||||||
const { pathname, hash, search } = props.location;
|
const { pathname, hash, search } = props.location;
|
||||||
const [upgradeNagClosed, setUpgradeNagClosed] = useState(false);
|
const [upgradeNagClosed, setUpgradeNagClosed] = useState(false);
|
||||||
const [resolvedSubscriptions, setResolvedSubscriptions] = useState(false);
|
const [resolvedSubscriptions, setResolvedSubscriptions] = useState(false);
|
||||||
|
@ -187,12 +176,10 @@ function App(props: Props) {
|
||||||
uri = newpath + hash;
|
uri = newpath + hash;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
// @if TARGET='web'
|
|
||||||
function handleAnalyticsDismiss() {
|
function handleAnalyticsDismiss() {
|
||||||
setShowAnalyticsNag(false);
|
setShowAnalyticsNag(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @endif
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (userId) {
|
if (userId) {
|
||||||
analytics.setUser(userId);
|
analytics.setUser(userId);
|
||||||
|
@ -236,16 +223,6 @@ function App(props: Props) {
|
||||||
return () => window.removeEventListener('keydown', handleKeyPress);
|
return () => window.removeEventListener('keydown', handleKeyPress);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Enable ctrl +/- zooming on Desktop.
|
|
||||||
// @if TARGET='app'
|
|
||||||
useZoom();
|
|
||||||
// @endif
|
|
||||||
|
|
||||||
// Enable 'Alt + Left/Right' for history navigation on Desktop.
|
|
||||||
// @if TARGET='app'
|
|
||||||
useHistoryNav(history);
|
|
||||||
// @endif
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (referredRewardAvailable && sanitizedReferrerParam && isRewardApproved) {
|
if (referredRewardAvailable && sanitizedReferrerParam && isRewardApproved) {
|
||||||
setReferrer(sanitizedReferrerParam, true);
|
setReferrer(sanitizedReferrerParam, true);
|
||||||
|
@ -324,7 +301,6 @@ function App(props: Props) {
|
||||||
}, [previousRewardApproved, isRewardApproved]);
|
}, [previousRewardApproved, isRewardApproved]);
|
||||||
|
|
||||||
// Load IMA3 SDK for aniview
|
// Load IMA3 SDK for aniview
|
||||||
// @if TARGET='web'
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const script = document.createElement('script');
|
const script = document.createElement('script');
|
||||||
script.src = imaLibraryPath;
|
script.src = imaLibraryPath;
|
||||||
|
@ -336,7 +312,6 @@ function App(props: Props) {
|
||||||
document.body.removeChild(script);
|
document.body.removeChild(script);
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
// @endif
|
|
||||||
|
|
||||||
// @if TARGET='app'
|
// @if TARGET='app'
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -357,15 +332,11 @@ function App(props: Props) {
|
||||||
if (readyForSync && hasVerifiedEmail) {
|
if (readyForSync && hasVerifiedEmail) {
|
||||||
// In case we are syncing.
|
// In case we are syncing.
|
||||||
syncLoop();
|
syncLoop();
|
||||||
// @if TARGET='web'
|
|
||||||
window.addEventListener('focus', syncLoopWithoutInterval);
|
window.addEventListener('focus', syncLoopWithoutInterval);
|
||||||
// @endif
|
|
||||||
}
|
}
|
||||||
// @if TARGET='web'
|
|
||||||
return () => {
|
return () => {
|
||||||
window.removeEventListener('focus', syncLoopWithoutInterval);
|
window.removeEventListener('focus', syncLoopWithoutInterval);
|
||||||
};
|
};
|
||||||
// @endif
|
|
||||||
}, [readyForSync, hasVerifiedEmail, syncLoop]);
|
}, [readyForSync, hasVerifiedEmail, syncLoop]);
|
||||||
|
|
||||||
// We know someone is logging in or not when we get their user object
|
// We know someone is logging in or not when we get their user object
|
||||||
|
@ -403,11 +374,8 @@ function App(props: Props) {
|
||||||
}
|
}
|
||||||
}, [sidebarOpen, isPersonalized, resolvedSubscriptions, subscriptions, resolveUris, setResolvedSubscriptions]);
|
}, [sidebarOpen, isPersonalized, resolvedSubscriptions, subscriptions, resolveUris, setResolvedSubscriptions]);
|
||||||
|
|
||||||
// @if TARGET='web'
|
|
||||||
useDegradedPerformance(setLbryTvApiStatus, user);
|
useDegradedPerformance(setLbryTvApiStatus, user);
|
||||||
// @endif
|
|
||||||
|
|
||||||
// @if TARGET='web'
|
|
||||||
// Require an internal-api user on lbry.tv
|
// Require an internal-api user on lbry.tv
|
||||||
// This also prevents the site from loading in the un-authed state while we wait for internal-apis to return for the first time
|
// This also prevents the site from loading in the un-authed state while we wait for internal-apis to return for the first time
|
||||||
// It's not needed on desktop since there is no un-authed state
|
// It's not needed on desktop since there is no un-authed state
|
||||||
|
@ -418,16 +386,11 @@ function App(props: Props) {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// @endif
|
|
||||||
|
|
||||||
if (syncFatalError) {
|
if (syncFatalError) {
|
||||||
return (
|
return (
|
||||||
<React.Suspense fallback={null}>
|
<React.Suspense fallback={null}>
|
||||||
<SyncFatalError
|
<SyncFatalError lbryTvApiStatus={lbryTvApiStatus} />
|
||||||
// @if TARGET='web'
|
|
||||||
lbryTvApiStatus={lbryTvApiStatus}
|
|
||||||
// @endif
|
|
||||||
/>
|
|
||||||
</React.Suspense>
|
</React.Suspense>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -469,7 +432,6 @@ function App(props: Props) {
|
||||||
)}
|
)}
|
||||||
{/* @endif */}
|
{/* @endif */}
|
||||||
|
|
||||||
{/* @if TARGET='web' */}
|
|
||||||
<YoutubeWelcome />
|
<YoutubeWelcome />
|
||||||
{!SIMPLE_SITE && !shouldHideNag && <OpenInAppLink uri={uri} />}
|
{!SIMPLE_SITE && !shouldHideNag && <OpenInAppLink uri={uri} />}
|
||||||
{!shouldHideNag && <NagContinueFirstRun />}
|
{!shouldHideNag && <NagContinueFirstRun />}
|
||||||
|
@ -483,7 +445,6 @@ function App(props: Props) {
|
||||||
<NagDataCollection onClose={handleAnalyticsDismiss} />
|
<NagDataCollection onClose={handleAnalyticsDismiss} />
|
||||||
)}
|
)}
|
||||||
{user === null && <NagNoUser />}
|
{user === null && <NagNoUser />}
|
||||||
{/* @endif */}
|
|
||||||
</React.Suspense>
|
</React.Suspense>
|
||||||
|
|
||||||
{isReloadRequired && (
|
{isReloadRequired && (
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
import { useEffect } from 'react';
|
|
||||||
|
|
||||||
export default function useHistoryNav(history) {
|
|
||||||
useEffect(() => {
|
|
||||||
const handleKeyPress = e => {
|
|
||||||
if ((e.metaKey || e.altKey) && !e.ctrlKey && !e.shiftKey) {
|
|
||||||
switch (e.code) {
|
|
||||||
case 'ArrowLeft':
|
|
||||||
e.preventDefault();
|
|
||||||
history.goBack();
|
|
||||||
break;
|
|
||||||
case 'ArrowRight':
|
|
||||||
e.preventDefault();
|
|
||||||
history.goForward();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Do nothing
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
window.addEventListener('keydown', handleKeyPress);
|
|
||||||
return () => window.removeEventListener('keydown', handleKeyPress);
|
|
||||||
}, []);
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
import { useEffect } from 'react';
|
|
||||||
import { changeZoomFactor, ZOOM } from 'util/zoomWindow';
|
|
||||||
|
|
||||||
export default function useHover(ref) {
|
|
||||||
useEffect(() => {
|
|
||||||
const handleKeyPress = e => {
|
|
||||||
if (e.ctrlKey && !e.shiftKey) {
|
|
||||||
switch (e.code) {
|
|
||||||
case 'NumpadAdd':
|
|
||||||
case 'Equal':
|
|
||||||
e.preventDefault();
|
|
||||||
changeZoomFactor(ZOOM.INCREMENT);
|
|
||||||
break;
|
|
||||||
case 'NumpadSubtract':
|
|
||||||
case 'Minus':
|
|
||||||
e.preventDefault();
|
|
||||||
changeZoomFactor(ZOOM.DECREMENT);
|
|
||||||
break;
|
|
||||||
case 'Numpad0':
|
|
||||||
case 'Digit0':
|
|
||||||
e.preventDefault();
|
|
||||||
changeZoomFactor(ZOOM.RESET);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Do nothing
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
window.addEventListener('keydown', handleKeyPress);
|
|
||||||
return () => window.removeEventListener('keydown', handleKeyPress);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const handleWheel = e => {
|
|
||||||
if (e.ctrlKey && !e.shiftKey) {
|
|
||||||
if (e.deltaY < 0) {
|
|
||||||
changeZoomFactor(ZOOM.INCREMENT);
|
|
||||||
} else {
|
|
||||||
changeZoomFactor(ZOOM.DECREMENT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
window.addEventListener('wheel', handleWheel);
|
|
||||||
return () => window.removeEventListener('wheel', handleWheel);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
changeZoomFactor(ZOOM.LOAD_FROM_LOCAL_STORAGE);
|
|
||||||
}, []);
|
|
||||||
}
|
|
|
@ -6,7 +6,6 @@ import SnackBar from 'component/snackBar';
|
||||||
// @if TARGET='app'
|
// @if TARGET='app'
|
||||||
import SplashScreen from 'component/splash';
|
import SplashScreen from 'component/splash';
|
||||||
import * as ACTIONS from 'constants/action_types';
|
import * as ACTIONS from 'constants/action_types';
|
||||||
import { changeZoomFactor } from 'util/zoomWindow';
|
|
||||||
// @endif
|
// @endif
|
||||||
import { ipcRenderer, remote, shell } from 'electron';
|
import { ipcRenderer, remote, shell } from 'electron';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
@ -179,10 +178,6 @@ ipcRenderer.on('open-menu', (event, uri) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcRenderer.on('zoom-window', (event, action) => {
|
|
||||||
changeZoomFactor(action);
|
|
||||||
});
|
|
||||||
|
|
||||||
const { dock } = remote.app;
|
const { dock } = remote.app;
|
||||||
|
|
||||||
ipcRenderer.on('window-is-focused', () => {
|
ipcRenderer.on('window-is-focused', () => {
|
||||||
|
|
92
web/.env.ody
92
web/.env.ody
|
@ -1,92 +0,0 @@
|
||||||
# Copy this file to .env to make modifications
|
|
||||||
|
|
||||||
# Base config
|
|
||||||
|
|
||||||
WEBPACK_WEB_PORT=9090
|
|
||||||
WEBPACK_ELECTRON_PORT=9091
|
|
||||||
WEB_SERVER_PORT=1337
|
|
||||||
|
|
||||||
WELCOME_VERSION=1.0
|
|
||||||
|
|
||||||
# Custom Site info
|
|
||||||
DOMAIN=lbry.tv
|
|
||||||
URL=https://lbry.tv
|
|
||||||
|
|
||||||
# UI
|
|
||||||
SITE_TITLE=lbry.tv
|
|
||||||
SITE_NAME=local.lbry.tv
|
|
||||||
SITE_DESCRIPTION=Meet LBRY, an open, free, and community-controlled content wonderland.
|
|
||||||
LOGO_TITLE=local.lbry.tv
|
|
||||||
|
|
||||||
##### ODYSEE SETTINGS #######
|
|
||||||
|
|
||||||
MATOMO_URL=https://analytics.lbry.com/
|
|
||||||
MATOMO_ID=4
|
|
||||||
|
|
||||||
# Base config
|
|
||||||
WEBPACK_WEB_PORT=9090
|
|
||||||
WEBPACK_ELECTRON_PORT=9091
|
|
||||||
WEB_SERVER_PORT=1337
|
|
||||||
|
|
||||||
## APIS
|
|
||||||
LBRY_API_URL=https://api.odysee.com
|
|
||||||
#LBRY_WEB_API=https://api.na-backend.odysee.com
|
|
||||||
#LBRY_WEB_STREAMING_API=https://cdn.lbryplayer.xyz
|
|
||||||
# deprecated:
|
|
||||||
#LBRY_WEB_BUFFER_API=https://collector-service.api.lbry.tv/api/v1/events/video
|
|
||||||
#COMMENT_SERVER_API=https://comments.lbry.com/api/v2
|
|
||||||
WELCOME_VERSION=1.0
|
|
||||||
|
|
||||||
# STRIPE
|
|
||||||
STRIPE_PUBLIC_KEY='pk_live_e8M4dRNnCCbmpZzduEUZBgJO'
|
|
||||||
|
|
||||||
## UI
|
|
||||||
|
|
||||||
LOADING_BAR_COLOR=#e50054
|
|
||||||
|
|
||||||
# IMAGE ASSETS
|
|
||||||
YRBL_HAPPY_IMG_URL=https://spee.ch/spaceman-happy:a.png
|
|
||||||
YRBL_SAD_IMG_URL=https://spee.ch/spaceman-sad:d.png
|
|
||||||
LOGIN_IMG_URL=https://spee.ch/login:b.png
|
|
||||||
LOGO=https://spee.ch/odysee-logo-png:3.png
|
|
||||||
LOGO_TEXT_LIGHT=https://spee.ch/odysee-white-png:f.png
|
|
||||||
LOGO_TEXT_DARK=https://spee.ch/odysee-png:2.png
|
|
||||||
AVATAR_DEFAULT=https://spee.ch/spaceman-png:2.png
|
|
||||||
FAVICON=https://spee.ch/favicon-png:c.png
|
|
||||||
|
|
||||||
# LOCALE
|
|
||||||
DEFAULT_LANGUAGE=en
|
|
||||||
|
|
||||||
## LINKED CONTENT WHITELIST
|
|
||||||
KNOWN_APP_DOMAINS=open.lbry.com,lbry.tv,lbry.lat,odysee.com
|
|
||||||
|
|
||||||
## CUSTOM CONTENT
|
|
||||||
# If the following is true, copy custom/homepage.example.js to custom/homepage.js and modify
|
|
||||||
CUSTOM_HOMEPAGE=true
|
|
||||||
|
|
||||||
# Add channels to auto-follow on firstrun (space delimited)
|
|
||||||
AUTO_FOLLOW_CHANNELS=lbry://@Odysee#80d2590ad04e36fb1d077a9b9e3a8bba76defdf8 lbry://@OdyseeHelp#b58dfaeab6c70754d792cdd9b56ff59b90aea334
|
|
||||||
|
|
||||||
## FEATURES AND LIMITS
|
|
||||||
SIMPLE_SITE=true
|
|
||||||
BRANDED_SITE=odysee
|
|
||||||
# SIMPLE_SITE REPLACEMENTS
|
|
||||||
ENABLE_MATURE=false
|
|
||||||
ENABLE_UI_NOTIFICATIONS=true
|
|
||||||
ENABLE_WILD_WEST=true
|
|
||||||
SHOW_TAGS_INTRO=false
|
|
||||||
|
|
||||||
# CENTRALIZED FEATURES
|
|
||||||
ENABLE_COMMENT_REACTIONS=true
|
|
||||||
ENABLE_FILE_REACTIONS=true
|
|
||||||
ENABLE_CREATOR_REACTIONS=true
|
|
||||||
ENABLE_NO_SOURCE_CLAIMS=true
|
|
||||||
ENABLE_PREROLL_ADS=false
|
|
||||||
SHOW_ADS=true
|
|
||||||
|
|
||||||
CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS=4
|
|
||||||
CHANNEL_STAKED_LEVEL_LIVESTREAM=3
|
|
||||||
WEB_PUBLISH_SIZE_LIMIT_GB=4
|
|
||||||
|
|
||||||
#SEARCH TYPES - comma-delimited
|
|
||||||
LIGHTHOUSE_DEFAULT_TYPES=audio,video
|
|
Loading…
Reference in a new issue