[Comments] Batch resolve #7236
This commit is contained in:
commit
b8cc60697b
40 changed files with 1967 additions and 412 deletions
|
@ -15,7 +15,10 @@ COMMENT_SERVER_API=https://comments.odysee.com/api/v2
|
|||
COMMENT_SERVER_NAME=Odysee
|
||||
SEARCH_SERVER_API=https://lighthouse.odysee.com/search
|
||||
SOCKETY_SERVER_API=wss://sockety.odysee.com/ws
|
||||
THUMBNAIL_CDN_URL=https://image-processor.vanwanet.com/optimize/
|
||||
THUMBNAIL_CDN_URL=https://thumbnails.odysee.com/optimize/
|
||||
THUMBNAIL_HEIGHT=220
|
||||
THUMBNAIL_WIDTH=390
|
||||
THUMBNAIL_QUALITY=85
|
||||
WELCOME_VERSION=1.0
|
||||
|
||||
# STRIPE
|
||||
|
|
92
.env.ody
92
.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
|
100
.github/workflows/deploy.yml
vendored
100
.github/workflows/deploy.yml
vendored
|
@ -1,100 +0,0 @@
|
|||
name: Node.js CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: Borales/actions-yarn@v2.3.0
|
||||
- run: yarn lint
|
||||
|
||||
build:
|
||||
needs: ['lint']
|
||||
name: 'build'
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- macos-latest
|
||||
- windows-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2-beta
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- uses: maxim-lobanov/setup-xcode@v1
|
||||
if: startsWith(runner.os, 'mac')
|
||||
with:
|
||||
xcode-version: '10.3.0'
|
||||
|
||||
- name: Download blockchain headers
|
||||
run: |
|
||||
mkdir -p ./static/daemon
|
||||
curl -o ./static/daemon/headers https://headers.lbry.io/blockchain_headers_latest
|
||||
ls ./static/daemon
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
yarn global add cross-env
|
||||
yarn
|
||||
yarn build
|
||||
node ./build/afterSignHook.js
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
NOTARIZATION_USERNAME: ${{ secrets.NOTARIZATION_USERNAME }}
|
||||
NOTARIZATION_PASSWORD: ${{ secrets.NOTARIZATION_PASSWORD }}
|
||||
WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||
WIN_CSC_LINK: https://s3.amazonaws.com/files.lbry.io/cert/win-csc-2020-2021-08.p12
|
||||
CSC_LINK: https://s3.amazonaws.com/files.lbry.io/cert/osx-csc-2021-2022.p12
|
||||
|
||||
# UI
|
||||
MATOMO_URL: https://analytics.lbry.com/
|
||||
MATOMO_ID: 4
|
||||
WELCOME_VERSION: 1.0
|
||||
DOMAIN: lbry.tv
|
||||
URL: https://lbry.tv
|
||||
SHARE_DOMAIN_URL: https://open.lbry.com
|
||||
SITE_TITLE: lbry.tv
|
||||
SITE_NAME: lbry.tv
|
||||
SHOW_ADS: false
|
||||
YRBL_HAPPY_IMG_URL: https://cdn.lbryplayer.xyz/api/v3/streams/free/yrbl-happy/7aa50a7e5adaf48691935d55e45d697547392929/839d9a
|
||||
YRBL_SAD_IMG_URL: https://cdn.lbryplayer.xyz/api/v3/streams/free/yrbl-sad/c2d9649633d974e5ffb503925e1f17d951f1bd0f/f262dd
|
||||
ENABLE_COMMENT_REACTIONS: true
|
||||
ENABLE_NO_SOURCE_CLAIMS: false
|
||||
|
||||
DEFAULT_LANGUAGE: en
|
||||
KNOWN_APP_DOMAINS: lbry.tv,lbry.lat,odysee.com
|
||||
CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS: 0
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: |
|
||||
startsWith(runner.os, 'linux')
|
||||
with:
|
||||
name: Linux
|
||||
path: ./dist/electron/*.*
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: |
|
||||
startsWith(runner.os, 'mac')
|
||||
with:
|
||||
name: macOS
|
||||
path: ./dist/electron/*.*
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: |
|
||||
github.event.pull_request.head.repo.full_name == github.repository
|
||||
with:
|
||||
name: Windows
|
||||
path: ./dist/electron/*.*
|
59
.github/workflows/node.js.yml
vendored
Normal file
59
.github/workflows/node.js.yml
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Node.js CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: Borales/actions-yarn@v2.3.0
|
||||
- run: yarn lint
|
||||
|
||||
build:
|
||||
needs: ['lint']
|
||||
name: 'build'
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
os:
|
||||
- ubuntu-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2-beta
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
yarn global add cross-env
|
||||
yarn
|
||||
yarn compile:web
|
||||
env:
|
||||
# UI
|
||||
MATOMO_URL: https://analytics.lbry.com/
|
||||
MATOMO_ID: 4
|
||||
WELCOME_VERSION: 1.0
|
||||
DOMAIN: odysee.com
|
||||
URL: https://odysee.com
|
||||
SHARE_DOMAIN_URL: https://odysee.com
|
||||
SITE_TITLE: Odysee
|
||||
SITE_NAME: Odysee
|
||||
SHOW_ADS: false
|
||||
YRBL_HAPPY_IMG_URL: https://cdn.lbryplayer.xyz/api/v3/streams/free/yrbl-happy/7aa50a7e5adaf48691935d55e45d697547392929/839d9a
|
||||
YRBL_SAD_IMG_URL: https://cdn.lbryplayer.xyz/api/v3/streams/free/yrbl-sad/c2d9649633d974e5ffb503925e1f17d951f1bd0f/f262dd
|
||||
ENABLE_COMMENT_REACTIONS: true
|
||||
ENABLE_NO_SOURCE_CLAIMS: true
|
||||
DEFAULT_LANGUAGE: en
|
||||
KNOWN_APP_DOMAINS: lbry.tv,lbry.lat,odysee.com
|
||||
CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS: 4
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -33,6 +33,6 @@ package-lock.json
|
|||
!/custom/robots.disallowall
|
||||
!/custom/robots.allowall
|
||||
.env
|
||||
!.env.ody
|
||||
.env.ody
|
||||
.env.desktop
|
||||
.env.lbrytv
|
||||
|
|
14
README.md
14
README.md
|
@ -1,11 +1,7 @@
|
|||
<img width="40%" src="https://miro.medium.com/max/5198/1*bTVuL2THG_0mpwmE-n7Ezg.png" />
|
||||
|
||||
# LBRY App - https://lbry.tv
|
||||
# Odysee Frontend - Odysee.com
|
||||
|
||||
This repo contains the UI code that powers the official LBRY desktop app, as well as lbry.tv. The LBRY app is a graphical browser for the decentralized content marketplace provided by the
|
||||
[LBRY](https://lbry.com) protocol. It is essentially the
|
||||
[lbry daemon](https://github.com/lbryio/lbry) bundled with a UI using
|
||||
[Electron](https://electron.atom.io/).
|
||||
This repo contains the UI and front end code that powers Odysee.com.
|
||||
|
||||
<a href="https://github.com/lbryio/lbry-desktop/blob/master/LICENSE" title="MIT licensed">
|
||||
<img alt="npm" src="https://img.shields.io/dub/l/vibe-d.svg?style=flat">
|
||||
|
@ -29,7 +25,6 @@ This repo contains the UI code that powers the official LBRY desktop app, as wel
|
|||
</a>
|
||||
</h2>
|
||||
|
||||
![App GIF](https://spee.ch/ba/lbry-joule.gif)
|
||||
|
||||
## Table of Contents
|
||||
|
||||
|
@ -170,9 +165,6 @@ This project is MIT licensed. For the full license, see [LICENSE](LICENSE).
|
|||
|
||||
## Security
|
||||
|
||||
We take security seriously. Please contact security@lbry.com regarding any security issues. Our PGP key is [here](https://lbry.com/faq/pgp-key) if you need it. Previous versions up to v0.50.2 were signed by [Sean Yesmunt](https://keybase.io/seanyesmunt/key.asc).
|
||||
We take security seriously. Please contact security@odysee.com regarding any security issues. Our PGP key is [here](https://lbry.com/faq/pgp-key) if you need it. Previous versions up to v0.50.2 were signed by [Sean Yesmunt](https://keybase.io/seanyesmunt/key.asc).
|
||||
New Releases are signed by [Jessop Breth](https://keybase.io/jessopb/key.asc).
|
||||
|
||||
## Contact
|
||||
|
||||
The primary contact for this project is [@jessopb](https://github.com/jessopb).
|
||||
|
|
|
@ -22,6 +22,9 @@ const config = {
|
|||
SHARE_DOMAIN_URL: process.env.SHARE_DOMAIN_URL,
|
||||
URL: process.env.URL,
|
||||
THUMBNAIL_CDN_URL: process.env.THUMBNAIL_CDN_URL,
|
||||
THUMBNAIL_HEIGHT: process.env.THUMBNAIL_HEIGHT,
|
||||
THUMBNAIL_WIDTH: process.env.THUMBNAIL_WIDTH,
|
||||
THUMBNAIL_QUALITY: process.env.THUMBNAIL_QUALITY,
|
||||
SITE_TITLE: process.env.SITE_TITLE,
|
||||
SITE_NAME: process.env.SITE_NAME,
|
||||
SITE_DESCRIPTION: process.env.SITE_DESCRIPTION,
|
||||
|
|
|
@ -157,7 +157,7 @@
|
|||
"imagesloaded": "^4.1.4",
|
||||
"json-loader": "^0.5.4",
|
||||
"lbry-format": "https://github.com/lbryio/lbry-format.git",
|
||||
"lbry-redux": "lbryio/lbry-redux#32b578707116d45f5b51b7ab523d200e75668676",
|
||||
"lbry-redux": "lbryio/lbry-redux#0f930c4a7bfc7f164e6b3c6044050c1bc73f6ab8",
|
||||
"lbryinc": "lbryio/lbryinc#0b4e41ef90d6347819dd3453f2f9398a5c1b4f36",
|
||||
"lint-staged": "^7.0.2",
|
||||
"localforage": "^1.7.1",
|
||||
|
|
|
@ -450,7 +450,7 @@ function ClaimListDiscover(props: Props) {
|
|||
<p>
|
||||
<I18nMessage
|
||||
tokens={{
|
||||
contact_support: <Button button="link" label={__('contact support')} href="https://lbry.com/faq/support" />,
|
||||
contact_support: <Button button="link" label={__('contact support')} href="https://odysee.com/@OdyseeHelp:b?view=about" />,
|
||||
}}
|
||||
>
|
||||
If you continue to have issues, please %contact_support%.
|
||||
|
|
|
@ -117,12 +117,18 @@ function Comment(props: Props) {
|
|||
location: { pathname, search },
|
||||
} = useHistory();
|
||||
|
||||
const isInLinkedCommentChain =
|
||||
linkedCommentId &&
|
||||
linkedCommentAncestors[linkedCommentId] &&
|
||||
linkedCommentAncestors[linkedCommentId].includes(commentId);
|
||||
const showRepliesOnMount = isInLinkedCommentChain || AUTO_EXPAND_ALL_REPLIES;
|
||||
|
||||
const [isReplying, setReplying] = React.useState(false);
|
||||
const [isEditing, setEditing] = useState(false);
|
||||
const [editedMessage, setCommentValue] = useState(message);
|
||||
const [charCount, setCharCount] = useState(editedMessage.length);
|
||||
const [showReplies, setShowReplies] = useState(false);
|
||||
const [page, setPage] = useState(0);
|
||||
const [showReplies, setShowReplies] = useState(showRepliesOnMount);
|
||||
const [page, setPage] = useState(showRepliesOnMount ? 1 : 0);
|
||||
const [advancedEditor] = usePersistedState('comment-editor-mode', false);
|
||||
const [displayDeadComment, setDisplayDeadComment] = React.useState(false);
|
||||
const hasChannels = myChannels && myChannels.length > 0;
|
||||
|
@ -140,19 +146,6 @@ function Comment(props: Props) {
|
|||
}
|
||||
} catch (e) {}
|
||||
|
||||
// Auto-expand (limited to linked-comments for now, but can be for all)
|
||||
useEffect(() => {
|
||||
const isInLinkedCommentChain =
|
||||
linkedCommentId &&
|
||||
linkedCommentAncestors[linkedCommentId] &&
|
||||
linkedCommentAncestors[linkedCommentId].includes(commentId);
|
||||
|
||||
if (isInLinkedCommentChain || AUTO_EXPAND_ALL_REPLIES) {
|
||||
setShowReplies(true);
|
||||
setPage(1);
|
||||
}
|
||||
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
useEffect(() => {
|
||||
if (isEditing) {
|
||||
setCharCount(editedMessage.length);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { connect } from 'react-redux';
|
||||
import {
|
||||
doResolveUris,
|
||||
makeSelectClaimForUri,
|
||||
makeSelectClaimIsMine,
|
||||
selectFetchingMyChannels,
|
||||
|
@ -24,11 +25,21 @@ import CommentsList from './view';
|
|||
|
||||
const select = (state, props) => {
|
||||
const activeChannelClaim = selectActiveChannelClaim(state);
|
||||
const topLevelComments = makeSelectTopLevelCommentsForUri(props.uri)(state);
|
||||
const resolvedComments = [];
|
||||
|
||||
if (topLevelComments.length > 0) {
|
||||
topLevelComments.map(
|
||||
(comment) => Boolean(makeSelectClaimForUri(comment.channel_url)(state)) && resolvedComments.push(comment)
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
topLevelComments,
|
||||
resolvedComments,
|
||||
myChannels: selectMyChannelClaims(state),
|
||||
allCommentIds: makeSelectCommentIdsForUri(props.uri)(state),
|
||||
pinnedComments: makeSelectPinnedCommentsForUri(props.uri)(state),
|
||||
topLevelComments: makeSelectTopLevelCommentsForUri(props.uri)(state),
|
||||
topLevelTotalPages: makeSelectTopLevelTotalPagesForUri(props.uri)(state),
|
||||
totalComments: makeSelectTotalCommentsCountForUri(props.uri)(state),
|
||||
claim: makeSelectClaimForUri(props.uri)(state),
|
||||
|
@ -49,6 +60,7 @@ const perform = (dispatch) => ({
|
|||
fetchComment: (commentId) => dispatch(doCommentById(commentId)),
|
||||
fetchReacts: (commentIds) => dispatch(doCommentReactList(commentIds)),
|
||||
resetComments: (claimId) => dispatch(doCommentReset(claimId)),
|
||||
doResolveUris: (uris) => dispatch(doResolveUris(uris, true)),
|
||||
});
|
||||
|
||||
export default connect(select, perform)(CommentsList);
|
||||
|
|
|
@ -32,6 +32,7 @@ type Props = {
|
|||
allCommentIds: any,
|
||||
pinnedComments: Array<Comment>,
|
||||
topLevelComments: Array<Comment>,
|
||||
resolvedComments: Array<Comment>,
|
||||
topLevelTotalPages: number,
|
||||
uri: string,
|
||||
claim: ?Claim,
|
||||
|
@ -47,8 +48,9 @@ type Props = {
|
|||
othersReactsById: ?{ [string]: { [REACTION_TYPES.LIKE | REACTION_TYPES.DISLIKE]: number } },
|
||||
activeChannelId: ?string,
|
||||
settingsByChannelId: { [channelId: string]: PerChannelSettings },
|
||||
fetchReacts: (Array<string>) => Promise<any>,
|
||||
commentsAreExpanded?: boolean,
|
||||
fetchReacts: (Array<string>) => Promise<any>,
|
||||
doResolveUris: (Array<string>) => void,
|
||||
fetchTopLevelComments: (string, number, number, number) => void,
|
||||
fetchComment: (string) => void,
|
||||
resetComments: (string) => void,
|
||||
|
@ -60,6 +62,7 @@ function CommentList(props: Props) {
|
|||
uri,
|
||||
pinnedComments,
|
||||
topLevelComments,
|
||||
resolvedComments,
|
||||
topLevelTotalPages,
|
||||
claim,
|
||||
claimIsMine,
|
||||
|
@ -74,8 +77,9 @@ function CommentList(props: Props) {
|
|||
othersReactsById,
|
||||
activeChannelId,
|
||||
settingsByChannelId,
|
||||
fetchReacts,
|
||||
commentsAreExpanded,
|
||||
fetchReacts,
|
||||
doResolveUris,
|
||||
fetchTopLevelComments,
|
||||
fetchComment,
|
||||
resetComments,
|
||||
|
@ -221,8 +225,16 @@ function CommentList(props: Props) {
|
|||
}
|
||||
}, [hasDefaultExpansion, isFetchingComments, moreBelow, page, readyToDisplayComments, topLevelTotalPages]);
|
||||
|
||||
const getCommentElems = (comments) => {
|
||||
return comments.map((comment) => (
|
||||
// Batch resolve comment channel urls
|
||||
useEffect(() => {
|
||||
const urisToResolve = [];
|
||||
topLevelComments.map(({ channel_url }) => channel_url !== undefined && urisToResolve.push(channel_url));
|
||||
|
||||
if (urisToResolve.length > 0) doResolveUris(urisToResolve);
|
||||
}, [topLevelComments, doResolveUris]);
|
||||
|
||||
const getCommentElems = (comments) =>
|
||||
comments.map((comment) => (
|
||||
<CommentView
|
||||
isTopLevel
|
||||
threadDepth={3}
|
||||
|
@ -247,22 +259,19 @@ function CommentList(props: Props) {
|
|||
isFiat={comment.is_fiat}
|
||||
/>
|
||||
));
|
||||
};
|
||||
|
||||
const sortButton = (label, icon, sortOption) => {
|
||||
return (
|
||||
<Button
|
||||
button="alt"
|
||||
label={label}
|
||||
icon={icon}
|
||||
iconSize={18}
|
||||
onClick={() => changeSort(sortOption)}
|
||||
className={classnames(`button-toggle`, {
|
||||
'button-toggle--active': sort === sortOption,
|
||||
})}
|
||||
/>
|
||||
);
|
||||
};
|
||||
const sortButton = (label, icon, sortOption) => (
|
||||
<Button
|
||||
button="alt"
|
||||
label={label}
|
||||
icon={icon}
|
||||
iconSize={18}
|
||||
onClick={() => changeSort(sortOption)}
|
||||
className={classnames(`button-toggle`, {
|
||||
'button-toggle--active': sort === sortOption,
|
||||
})}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<Card
|
||||
|
@ -299,7 +308,7 @@ function CommentList(props: Props) {
|
|||
})}
|
||||
>
|
||||
{readyToDisplayComments && pinnedComments && getCommentElems(pinnedComments)}
|
||||
{readyToDisplayComments && topLevelComments && getCommentElems(topLevelComments)}
|
||||
{readyToDisplayComments && resolvedComments && getCommentElems(resolvedComments)}
|
||||
</ul>
|
||||
|
||||
{!hasDefaultExpansion && (
|
||||
|
|
|
@ -1,15 +1,29 @@
|
|||
import { connect } from 'react-redux';
|
||||
import { makeSelectClaimIsMine, selectMyChannelClaims } from 'lbry-redux';
|
||||
import { makeSelectClaimIsMine, selectMyChannelClaims, makeSelectClaimForUri, doResolveUris } from 'lbry-redux';
|
||||
import { selectIsFetchingCommentsByParentId, makeSelectRepliesForParentId } from 'redux/selectors/comments';
|
||||
import { selectUserVerifiedEmail } from 'redux/selectors/user';
|
||||
import CommentsReplies from './view';
|
||||
|
||||
const select = (state, props) => ({
|
||||
fetchedReplies: makeSelectRepliesForParentId(props.parentId)(state),
|
||||
claimIsMine: makeSelectClaimIsMine(props.uri)(state),
|
||||
commentingEnabled: IS_WEB ? Boolean(selectUserVerifiedEmail(state)) : true,
|
||||
myChannels: selectMyChannelClaims(state),
|
||||
isFetchingByParentId: selectIsFetchingCommentsByParentId(state),
|
||||
});
|
||||
const select = (state, props) => {
|
||||
const fetchedReplies = makeSelectRepliesForParentId(props.parentId)(state);
|
||||
const resolvedReplies = [];
|
||||
|
||||
export default connect(select)(CommentsReplies);
|
||||
if (fetchedReplies && fetchedReplies.length > 0) {
|
||||
fetchedReplies.map(
|
||||
(comment) => Boolean(makeSelectClaimForUri(comment.channel_url)(state)) && resolvedReplies.push(comment)
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
fetchedReplies,
|
||||
resolvedReplies,
|
||||
claimIsMine: makeSelectClaimIsMine(props.uri)(state),
|
||||
userCanComment: IS_WEB ? Boolean(selectUserVerifiedEmail(state)) : true,
|
||||
myChannels: selectMyChannelClaims(state),
|
||||
isFetchingByParentId: selectIsFetchingCommentsByParentId(state),
|
||||
};
|
||||
};
|
||||
|
||||
const perform = (dispatch) => ({ doResolveUris: (uris) => dispatch(doResolveUris(uris, true)) });
|
||||
|
||||
export default connect(select, perform)(CommentsReplies);
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
// @flow
|
||||
import * as ICONS from 'constants/icons';
|
||||
import React from 'react';
|
||||
import Comment from 'component/comment';
|
||||
import Button from 'component/button';
|
||||
import Comment from 'component/comment';
|
||||
import React from 'react';
|
||||
import Spinner from 'component/spinner';
|
||||
|
||||
type Props = {
|
||||
fetchedReplies: Array<any>,
|
||||
fetchedReplies: Array<Comment>,
|
||||
resolvedReplies: Array<Comment>,
|
||||
uri: string,
|
||||
parentId: string,
|
||||
claimIsMine: boolean,
|
||||
myChannels: ?Array<ChannelClaim>,
|
||||
linkedCommentId?: string,
|
||||
commentingEnabled: boolean,
|
||||
userCanComment: boolean,
|
||||
threadDepth: number,
|
||||
numDirectReplies: number, // Total replies for parentId as reported by 'comment[replies]'. Includes blocked items.
|
||||
isFetchingByParentId: { [string]: boolean },
|
||||
onShowMore?: () => void,
|
||||
hasMore: boolean,
|
||||
supportDisabled: boolean,
|
||||
doResolveUris: (Array<string>) => void,
|
||||
onShowMore?: () => void,
|
||||
};
|
||||
|
||||
function CommentsReplies(props: Props) {
|
||||
|
@ -26,102 +28,98 @@ function CommentsReplies(props: Props) {
|
|||
uri,
|
||||
parentId,
|
||||
fetchedReplies,
|
||||
resolvedReplies,
|
||||
claimIsMine,
|
||||
myChannels,
|
||||
linkedCommentId,
|
||||
commentingEnabled,
|
||||
userCanComment,
|
||||
threadDepth,
|
||||
numDirectReplies,
|
||||
isFetchingByParentId,
|
||||
onShowMore,
|
||||
hasMore,
|
||||
supportDisabled,
|
||||
doResolveUris,
|
||||
onShowMore,
|
||||
} = props;
|
||||
|
||||
const [isExpanded, setExpanded] = React.useState(true);
|
||||
const isResolvingReplies = fetchedReplies && resolvedReplies.length !== fetchedReplies.length;
|
||||
|
||||
function showMore() {
|
||||
if (onShowMore) {
|
||||
onShowMore();
|
||||
}
|
||||
}
|
||||
// Batch resolve comment channel urls
|
||||
React.useEffect(() => {
|
||||
if (!fetchedReplies) return;
|
||||
|
||||
// todo: implement comment_list --mine in SDK so redux can grab with selectCommentIsMine
|
||||
function isMyComment(channelId: string) {
|
||||
if (myChannels != null && channelId != null) {
|
||||
for (let i = 0; i < myChannels.length; i++) {
|
||||
if (myChannels[i].claim_id === channelId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
const urisToResolve = [];
|
||||
fetchedReplies.map(({ channel_url }) => channel_url !== undefined && urisToResolve.push(channel_url));
|
||||
|
||||
const displayedComments = fetchedReplies;
|
||||
if (urisToResolve.length > 0) doResolveUris(urisToResolve);
|
||||
}, [fetchedReplies, doResolveUris]);
|
||||
|
||||
return (
|
||||
Boolean(numDirectReplies) && (
|
||||
<div className="comment__replies-container">
|
||||
{Boolean(numDirectReplies) && !isExpanded && (
|
||||
return !numDirectReplies ? null : (
|
||||
<div className="comment__replies-container">
|
||||
{!isExpanded ? (
|
||||
<div className="comment__actions--nested">
|
||||
<Button
|
||||
className="comment__action"
|
||||
label={__('Show Replies')}
|
||||
onClick={() => setExpanded(!isExpanded)}
|
||||
icon={isExpanded ? ICONS.UP : ICONS.DOWN}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div className="comment__replies">
|
||||
<Button className="comment__threadline" aria-label="Hide Replies" onClick={() => setExpanded(false)} />
|
||||
|
||||
<ul className="comments--replies">
|
||||
{!isResolvingReplies &&
|
||||
resolvedReplies.length > 0 &&
|
||||
resolvedReplies.map((comment) => (
|
||||
<Comment
|
||||
threadDepth={threadDepth}
|
||||
uri={uri}
|
||||
authorUri={comment.channel_url}
|
||||
author={comment.channel_name}
|
||||
claimId={comment.claim_id}
|
||||
commentId={comment.comment_id}
|
||||
key={comment.comment_id}
|
||||
message={comment.comment}
|
||||
timePosted={comment.timestamp * 1000}
|
||||
claimIsMine={claimIsMine}
|
||||
commentIsMine={
|
||||
comment.channel_id &&
|
||||
myChannels &&
|
||||
myChannels.some(({ claim_id }) => claim_id === comment.channel_id)
|
||||
}
|
||||
linkedCommentId={linkedCommentId}
|
||||
commentingEnabled={userCanComment}
|
||||
supportAmount={comment.support_amount}
|
||||
numDirectReplies={comment.replies}
|
||||
isModerator={comment.is_moderator}
|
||||
isGlobalMod={comment.is_global_mod}
|
||||
supportDisabled={supportDisabled}
|
||||
/>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{isExpanded && fetchedReplies && hasMore && (
|
||||
<div className="comment__actions--nested">
|
||||
<Button
|
||||
button="link"
|
||||
label={__('Show more')}
|
||||
onClick={() => onShowMore && onShowMore()}
|
||||
className="button--uri-indicator"
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{(isFetchingByParentId[parentId] || isResolvingReplies) && (
|
||||
<div className="comment__replies-container">
|
||||
<div className="comment__actions--nested">
|
||||
<Button
|
||||
className="comment__action"
|
||||
label={__('Show Replies')}
|
||||
onClick={() => setExpanded(!isExpanded)}
|
||||
icon={isExpanded ? ICONS.UP : ICONS.DOWN}
|
||||
/>
|
||||
<Spinner type="small" />
|
||||
</div>
|
||||
)}
|
||||
{isExpanded && (
|
||||
<div>
|
||||
<div className="comment__replies">
|
||||
<Button className="comment__threadline" aria-label="Hide Replies" onClick={() => setExpanded(false)} />
|
||||
|
||||
<ul className="comments--replies">
|
||||
{displayedComments &&
|
||||
displayedComments.map((comment) => {
|
||||
return (
|
||||
<Comment
|
||||
threadDepth={threadDepth}
|
||||
uri={uri}
|
||||
authorUri={comment.channel_url}
|
||||
author={comment.channel_name}
|
||||
claimId={comment.claim_id}
|
||||
commentId={comment.comment_id}
|
||||
key={comment.comment_id}
|
||||
message={comment.comment}
|
||||
timePosted={comment.timestamp * 1000}
|
||||
claimIsMine={claimIsMine}
|
||||
commentIsMine={comment.channel_id && isMyComment(comment.channel_id)}
|
||||
linkedCommentId={linkedCommentId}
|
||||
commentingEnabled={commentingEnabled}
|
||||
supportAmount={comment.support_amount}
|
||||
numDirectReplies={comment.replies}
|
||||
isModerator={comment.is_moderator}
|
||||
isGlobalMod={comment.is_global_mod}
|
||||
supportDisabled={supportDisabled}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{isExpanded && fetchedReplies && hasMore && (
|
||||
<div className="comment__actions--nested">
|
||||
<Button button="link" label={__('Show more')} onClick={showMore} className="button--uri-indicator" />
|
||||
</div>
|
||||
)}
|
||||
{isFetchingByParentId[parentId] && (
|
||||
<div className="comment__replies-container">
|
||||
<div className="comment__actions--nested">
|
||||
<Spinner type="small" />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ type MarkdownProps = {
|
|||
className?: string,
|
||||
parentCommentId?: string,
|
||||
isMarkdownPost?: boolean,
|
||||
disableTimestamps?: boolean,
|
||||
stakedLevel?: number,
|
||||
};
|
||||
|
||||
|
@ -132,7 +133,17 @@ function isStakeEnoughForPreview(stakedLevel) {
|
|||
// ****************************************************************************
|
||||
|
||||
const MarkdownPreview = (props: MarkdownProps) => {
|
||||
const { content, strip, simpleLinks, noDataStore, className, parentCommentId, isMarkdownPost, stakedLevel } = props;
|
||||
const {
|
||||
content,
|
||||
strip,
|
||||
simpleLinks,
|
||||
noDataStore,
|
||||
className,
|
||||
parentCommentId,
|
||||
isMarkdownPost,
|
||||
disableTimestamps,
|
||||
stakedLevel,
|
||||
} = props;
|
||||
const strippedContent = content
|
||||
? content.replace(REPLACE_REGEX, (iframeHtml, y, iframeSrc) => {
|
||||
// Let the browser try to create an iframe to see if the markup is valid
|
||||
|
@ -217,8 +228,8 @@ const MarkdownPreview = (props: MarkdownProps) => {
|
|||
// Note: The order is important
|
||||
.use(formatedLinks)
|
||||
.use(inlineLinks)
|
||||
.use(isMarkdownPost ? null : inlineTimestamp)
|
||||
.use(isMarkdownPost ? null : formattedTimestamp)
|
||||
.use(disableTimestamps || isMarkdownPost ? null : inlineTimestamp)
|
||||
.use(disableTimestamps || isMarkdownPost ? null : formattedTimestamp)
|
||||
// Emojis
|
||||
.use(remarkEmoji)
|
||||
// Render new lines without needing spaces.
|
||||
|
|
|
@ -12,7 +12,6 @@ import Icon from 'component/common/icon';
|
|||
import I18nMessage from 'component/i18nMessage';
|
||||
import Button from 'component/button';
|
||||
import FileDescription from 'component/fileDescription';
|
||||
import usePersistedState from 'effects/use-persisted-state';
|
||||
import { ENABLE_MATURE } from 'config';
|
||||
|
||||
type Props = {
|
||||
|
@ -41,7 +40,6 @@ function FileTitleSection(props: Props) {
|
|||
channelClaimId,
|
||||
fetchSubCount,
|
||||
} = props;
|
||||
const [hasAcknowledgedSec, setHasAcknowledgedSec] = usePersistedState('sec-nag', false);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (channelClaimId) {
|
||||
|
@ -51,16 +49,6 @@ function FileTitleSection(props: Props) {
|
|||
|
||||
return (
|
||||
<>
|
||||
{!hasAcknowledgedSec && (
|
||||
<div className="notice-message">
|
||||
<Button button="close" icon={ICONS.REMOVE} onClick={() => setHasAcknowledgedSec(true)} />
|
||||
<h1 className="section__title">{__('Help LBRY Save Crypto')}</h1>
|
||||
<p className="section__subtitle">
|
||||
{__('The US government is attempting to destroy the cryptocurrency industry. Can you help?')}{' '}
|
||||
<Button label={__('Learn more and sign petition')} button="link" href="https://helplbrysavecrypto.com" />
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
<Card
|
||||
isPageTitle
|
||||
noTitleWrap
|
||||
|
|
|
@ -104,7 +104,7 @@ function LivestreamComment(props: Props) {
|
|||
)}
|
||||
|
||||
<div className="livestream-comment__text">
|
||||
<MarkdownPreview content={message} promptLinks stakedLevel={stakedLevel} />
|
||||
<MarkdownPreview content={message} promptLinks stakedLevel={stakedLevel} disableTimestamps />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -14,11 +14,11 @@ const LIMITED = 'limited';
|
|||
const NONE = 'none';
|
||||
|
||||
type Props = {
|
||||
setWelcomeVersion: number => void,
|
||||
setWelcomeVersion: (number) => void,
|
||||
signOut: () => void,
|
||||
setShareDataInternal: boolean => void,
|
||||
setShareDataThirdParty: boolean => void,
|
||||
history: { replace: string => void },
|
||||
setShareDataInternal: (boolean) => void,
|
||||
setShareDataThirdParty: (boolean) => void,
|
||||
history: { replace: (string) => void },
|
||||
authenticated: boolean,
|
||||
authenticateIfSharingData: () => void,
|
||||
};
|
||||
|
@ -88,7 +88,7 @@ function PrivacyAgreement(props: Props) {
|
|||
helper={__(`Sending information to third parties (e.g. Google Analytics or Mixpanel) allows us to use detailed
|
||||
analytical reports to improve all aspects of LBRY.`)}
|
||||
checked={share === FREE}
|
||||
onChange={e => setShare(FREE)}
|
||||
onChange={(e) => setShare(FREE)}
|
||||
/>
|
||||
<FormField
|
||||
name={'shareWithLBRY'}
|
||||
|
@ -103,7 +103,7 @@ function PrivacyAgreement(props: Props) {
|
|||
`Sharing information with LBRY, Inc. allows us to report to publishers how their content is doing, as
|
||||
well as track basic usage and performance. This is the minimum required to earn rewards from LBRY, Inc.`
|
||||
)}
|
||||
onChange={e => setShare(LIMITED)}
|
||||
onChange={(e) => setShare(LIMITED)}
|
||||
/>
|
||||
<FormField
|
||||
disabled={authenticated}
|
||||
|
@ -118,7 +118,7 @@ function PrivacyAgreement(props: Props) {
|
|||
helper={__(`No information will be sent directly to LBRY, Inc. or third-parties about your usage. Note that as
|
||||
peer-to-peer software, your IP address and potentially other system information can be sent to other
|
||||
users, though this information is not stored permanently.`)}
|
||||
onChange={e => setShare(NONE)}
|
||||
onChange={(e) => setShare(NONE)}
|
||||
/>
|
||||
{authenticated && (
|
||||
<div className="card--inline section--padded">
|
||||
|
@ -139,9 +139,7 @@ function PrivacyAgreement(props: Props) {
|
|||
<p className="section__subtitle">
|
||||
<I18nMessage
|
||||
tokens={{
|
||||
terms: (
|
||||
<Button button="link" href="https://www.lbry.com/termsofservice" label={__('Terms of Service')} />
|
||||
),
|
||||
terms: <Button button="link" href="https://odysee.com/$/tos" label={__('Terms of Service')} />,
|
||||
}}
|
||||
>
|
||||
Do you agree to the %terms%?
|
||||
|
@ -153,14 +151,14 @@ function PrivacyAgreement(props: Props) {
|
|||
type="radio"
|
||||
label={'Yes'}
|
||||
checked={agree === true}
|
||||
onChange={e => setAgree(e.target.checked)}
|
||||
onChange={(e) => setAgree(e.target.checked)}
|
||||
/>
|
||||
<FormField
|
||||
name={'disagreeButton'}
|
||||
type="radio"
|
||||
checked={agree === false}
|
||||
label={__('No')}
|
||||
onChange={e => setAgree(!e.target.checked)}
|
||||
onChange={(e) => setAgree(!e.target.checked)}
|
||||
/>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
|
|
@ -667,7 +667,7 @@ function PublishForm(props: Props) {
|
|||
lbry_terms_of_service: (
|
||||
<Button
|
||||
button="link"
|
||||
href="https://www.lbry.com/termsofservice"
|
||||
href="https://odysee.com/$/tos"
|
||||
label={__('%site_name% Terms of Service', { site_name: SITE_NAME })}
|
||||
/>
|
||||
),
|
||||
|
|
|
@ -19,6 +19,9 @@ const BackupPage = lazyImport(() => import('page/backup' /* webpackChunkName: "b
|
|||
|
||||
// @if TARGET='web'
|
||||
const Code2257Page = lazyImport(() => import('web/page/code2257' /* webpackChunkName: "code2257" */));
|
||||
const PrivacyPolicyPage = lazyImport(() => import('web/page/privacypolicy' /* webpackChunkName: "privacypolicy" */));
|
||||
const TOSPage = lazyImport(() => import('web/page/tos' /* webpackChunkName: "tos" */));
|
||||
const YouTubeTOSPage = lazyImport(() => import('web/page/youtubetos' /* webpackChunkName: "youtubetos" */));
|
||||
// @endif
|
||||
|
||||
// Chunk: "secondary"
|
||||
|
@ -278,6 +281,9 @@ function AppRouter(props: Props) {
|
|||
{/* @endif */}
|
||||
{/* @if TARGET='web' */}
|
||||
<Route path={`/$/${PAGES.CODE_2257}`} exact component={Code2257Page} />
|
||||
<Route path={`/$/${PAGES.PRIVACY_POLICY}`} exact component={PrivacyPolicyPage} />
|
||||
<Route path={`/$/${PAGES.TOS}`} exact component={TOSPage} />
|
||||
<Route path={`/$/${PAGES.YOUTUBE_TOS}`} exact component={YouTubeTOSPage} />
|
||||
{/* @endif */}
|
||||
<Route path={`/$/${PAGES.AUTH_VERIFY}`} exact component={SignInVerifyPage} />
|
||||
<Route path={`/$/${PAGES.SEARCH}`} exact component={SearchPage} />
|
||||
|
|
|
@ -182,7 +182,7 @@ export default function SettingSystem(props: Props) {
|
|||
{__(
|
||||
`This is information like error logging, performance tracking, and usage statistics. It includes your IP address and basic system details, but no other identifying information (unless you sign in to lbry.tv)`
|
||||
)}{' '}
|
||||
<Button button="link" label={__('Learn more')} href="https://lbry.com/privacypolicy" />
|
||||
<Button button="link" label={__('Learn more')} href="https://odysee.com/$/privacypolicy" />
|
||||
</React.Fragment>
|
||||
}
|
||||
multirow
|
||||
|
|
|
@ -299,10 +299,7 @@ function SideNavigation(props: Props) {
|
|||
const helpLinks = (
|
||||
<ul className="navigation__tertiary navigation-links--small">
|
||||
<li className="navigation-link">
|
||||
<Button label={__('About --[link title in Sidebar or Footer]--')} href="https://lbry.com/about" />
|
||||
</li>
|
||||
<li className="navigation-link">
|
||||
<Button label={__('FAQ')} href="https://odysee.com/@OdyseeHelp:b" />
|
||||
<Button label={__('FAQ and Support')} href="https://odysee.com/@OdyseeHelp:b" />
|
||||
</li>
|
||||
{SIMPLE_SITE && ( // GUIDELINES_URL?
|
||||
<li className="navigation-link">
|
||||
|
@ -310,13 +307,10 @@ function SideNavigation(props: Props) {
|
|||
</li>
|
||||
)}
|
||||
<li className="navigation-link">
|
||||
<Button label={__('Support --[used in footer; general help/support]--')} href="https://lbry.com/support" />
|
||||
<Button label={__('Terms')} href="https://odysee.com/$/tos" />
|
||||
</li>
|
||||
<li className="navigation-link">
|
||||
<Button label={__('Terms')} href="https://lbry.com/termsofservice" />
|
||||
</li>
|
||||
<li className="navigation-link">
|
||||
<Button label={__('Privacy Policy')} href="https://lbry.com/privacy" />
|
||||
<Button label={__('Privacy Policy')} href="https://odysee.com/$/privacypolicy" />
|
||||
</li>
|
||||
</ul>
|
||||
);
|
||||
|
|
|
@ -177,7 +177,7 @@ function UserEmailNew(props: Props) {
|
|||
<p className="help--card-actions">
|
||||
<I18nMessage
|
||||
tokens={{
|
||||
terms: <Button button="link" href="https://www.lbry.com/termsofservice" label={__('terms')} />,
|
||||
terms: <Button button="link" href="https://odysee.com/$/tos" label={__('terms')} />,
|
||||
}}
|
||||
>
|
||||
By creating an account, you agree to our %terms% and confirm you're over the age of 13.
|
||||
|
|
|
@ -30,6 +30,9 @@ export const PAGE_TITLE = {
|
|||
[PAGES.CHANNEL_NEW]: 'Create a channel',
|
||||
[PAGES.CHECKOUT]: 'Checkout',
|
||||
[PAGES.CODE_2257]: '2257',
|
||||
[PAGES.PRIVACY_POLICY]: 'Privacy Policy',
|
||||
[PAGES.TOS]: 'Terms of Service',
|
||||
[PAGES.YOUTUBE_TOS]: 'YouTube Sync Terms of Service',
|
||||
[PAGES.CREATOR_DASHBOARD]: 'Creator Analytics',
|
||||
[PAGES.HELP]: 'Help',
|
||||
[PAGES.INVITE]: 'Invite',
|
||||
|
|
|
@ -66,6 +66,9 @@ exports.WELCOME = 'welcome';
|
|||
exports.CREATOR_DASHBOARD = 'dashboard';
|
||||
exports.CHECKOUT = 'checkout';
|
||||
exports.CODE_2257 = '2257';
|
||||
exports.PRIVACY_POLICY = 'privacypolicy';
|
||||
exports.TOS = 'tos';
|
||||
exports.YOUTUBE_TOS = 'youtubetos';
|
||||
exports.BUY = 'buy';
|
||||
exports.RECEIVE = 'receive';
|
||||
exports.SEND = 'send';
|
||||
|
|
|
@ -200,7 +200,9 @@ class HelpPage extends React.PureComponent<Props, State> {
|
|||
subtitle={
|
||||
<I18nMessage
|
||||
tokens={{
|
||||
support_link: <Button button="link" label={__('support')} href="https://lbry.com/faq/support" />,
|
||||
support_link: (
|
||||
<Button button="link" label={__('support')} href="https://odysee.com/@OdyseeHelp:b?view=about" />
|
||||
),
|
||||
}}
|
||||
>
|
||||
Did something go wrong? Have a look in your log file, or send it to %support_link%.
|
||||
|
|
|
@ -76,7 +76,7 @@ class RewardsPage extends PureComponent<Props> {
|
|||
<p>
|
||||
<I18nMessage
|
||||
tokens={{
|
||||
rewards_faq: <Button button="link" label={__('Rewards FAQ')} href="https://lbry.com/faq/support" />,
|
||||
rewards_faq: <Button button="link" label={__('Rewards FAQ')} href="https://odysee.com/@OdyseeHelp:b?view=about" />,
|
||||
help_email: SITE_HELP_EMAIL,
|
||||
site_name: SITE_NAME,
|
||||
}}
|
||||
|
|
|
@ -162,7 +162,7 @@ export default function YoutubeSync(props: Props) {
|
|||
<I18nMessage
|
||||
tokens={{
|
||||
terms: (
|
||||
<Button button="link" label={__('these terms')} href="https://lbry.com/faq/youtube-terms" />
|
||||
<Button button="link" label={__('these terms')} href="https://odysee.com/$/youtubetos" />
|
||||
),
|
||||
faq: (
|
||||
<Button
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
// @flow
|
||||
import { THUMBNAIL_CDN_URL } from 'config';
|
||||
|
||||
const THUMBNAIL_HEIGHT = 220;
|
||||
const THUMBNAIL_WIDTH = 390;
|
||||
const THUMBNAIL_QUALITY = 85;
|
||||
import { THUMBNAIL_CDN_URL, THUMBNAIL_HEIGHT, THUMBNAIL_WIDTH, THUMBNAIL_QUALITY } from 'config';
|
||||
|
||||
type Props = {
|
||||
thumbnail: ?string,
|
||||
|
@ -23,7 +19,11 @@ export function getThumbnailCdnUrl(props: Props) {
|
|||
return `${THUMBNAIL_CDN_URL}s:${width}:${height}/quality:${quality}/plain/${thumbnail}`;
|
||||
}
|
||||
|
||||
if (thumbnail && thumbnail.includes('https://spee.ch')) {
|
||||
if (thumbnail && thumbnail.includes('https://spee.ch') && !thumbnail.includes('?quality=')) {
|
||||
return `${thumbnail}?quality=${quality}&height=${height}&width=${width}`;
|
||||
}
|
||||
|
||||
if (thumbnail && thumbnail.includes('https://spee.ch')) {
|
||||
return thumbnail;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import React from 'react';
|
||||
import Button from 'component/button';
|
||||
import I18nMessage from 'component/i18nMessage';
|
||||
import { SIMPLE_SITE } from 'config';
|
||||
|
||||
export default function Footer() {
|
||||
|
@ -9,15 +8,7 @@ export default function Footer() {
|
|||
}
|
||||
return (
|
||||
<footer className="footer">
|
||||
<span className="footer__section-title">
|
||||
<I18nMessage tokens={{ lbry_link: <Button button="link" label={'LBRY'} href="https://lbry.com" /> }}>
|
||||
POWERED BY %lbry_link%
|
||||
</I18nMessage>
|
||||
</span>
|
||||
<ul className="navigation__tertiary footer__links">
|
||||
<li className="footer__link">
|
||||
<Button label={__('About --[link title in Sidebar or Footer]--')} href="https://lbry.com/about" />
|
||||
</li>
|
||||
<li className="footer__link">
|
||||
<Button label={__('Community Guidelines')} href="https://odysee.com/@OdyseeHelp:b/Community-Guidelines:c" />
|
||||
</li>
|
||||
|
@ -25,13 +16,16 @@ export default function Footer() {
|
|||
<Button label={__('FAQ')} href="https://odysee.com/@OdyseeHelp:b" />
|
||||
</li>
|
||||
<li className="footer__link">
|
||||
<Button label={__('Support --[used in footer; general help/support]--')} href="https://lbry.com/support" />
|
||||
<Button
|
||||
label={__('Support --[used in footer; general help/support]--')}
|
||||
href="https://odysee.com/@OdyseeHelp:b"
|
||||
/>
|
||||
</li>
|
||||
<li className="footer__link">
|
||||
<Button label={__('Terms')} href="https://lbry.com/termsofservice" />
|
||||
<Button label={__('Terms')} href="https://odysee.com/$/tos" />
|
||||
</li>
|
||||
<li className="footer__link">
|
||||
<Button label={__('Privacy Policy')} href="https://lbry.com/privacy" />
|
||||
<Button label={__('Privacy Policy')} href="https://odysee.com/$/privacypolicy" />
|
||||
</li>
|
||||
</ul>
|
||||
</footer>
|
||||
|
|
|
@ -24,7 +24,7 @@ export default function NagDegradedPerformance(props: Props) {
|
|||
<Button
|
||||
button="link"
|
||||
label={__('more --[value for "more_information"]--')}
|
||||
href="https://lbry.com/faq/privacy-and-data"
|
||||
href="https://odysee.com/$/privacypolicy"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
|
@ -44,7 +44,7 @@ export default function NagDegradedPerformance(props: Props) {
|
|||
<Button
|
||||
button="link"
|
||||
label={__('more --[value for "more_information"]--')}
|
||||
href="https://lbry.com/faq/privacy-and-data"
|
||||
href="https://odysee.com/$/privacypolicy"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
|
|
|
@ -7,21 +7,21 @@ const Code2257Page = () => {
|
|||
return (
|
||||
<Page>
|
||||
<Card
|
||||
title="18 USC 2257 Statement: lbry.tv"
|
||||
title="18 USC 2257 Statement: odysee.com"
|
||||
body={
|
||||
<div>
|
||||
<p>
|
||||
lbry.tv is not a producer (primary or secondary) of any and all of the content found on the website
|
||||
(lbry.tv). With respect to the records as per 18 USC 2257 for any and all content found on this site,
|
||||
odysee.com is not a producer (primary or secondary) of any and all of the content found on the website
|
||||
(odysee.com). With respect to the records as per 18 USC 2257 for any and all content found on this site,
|
||||
please kindly direct your request to the site for which the content was produced.
|
||||
</p>
|
||||
<p>
|
||||
lbry.tv is a video sharing site in which allows for the uploading, sharing and general viewing of various
|
||||
types of adult content and while lbry.tv does the best it can with verifying compliance, it may not be
|
||||
100% accurate.
|
||||
odysee.com is a video sharing site in which allows for the uploading, sharing and general viewing of
|
||||
various types of adult content and while odysee.com does the best it can with verifying compliance, it may
|
||||
not be 100% accurate.
|
||||
</p>
|
||||
<p>
|
||||
lbry.tv abides by the following procedures to ensure compliance:
|
||||
odysee.com abides by the following procedures to ensure compliance:
|
||||
<ul>
|
||||
<li>Requiring all users to be 18 years of age to upload videos.</li>
|
||||
<li>
|
||||
|
@ -32,10 +32,10 @@ const Code2257Page = () => {
|
|||
</p>
|
||||
<p>
|
||||
For further assistance and/or information in finding the content's originating site, please contact
|
||||
lbry.tv compliance at copyright@lbry.com
|
||||
odysee.com compliance at hello@odysee.com
|
||||
</p>
|
||||
<p>
|
||||
Users of lbry.tv who come across such content are urged to flag it as inappropriate by clicking 'Report
|
||||
Users of odysee.com who come across such content are urged to flag it as inappropriate by clicking 'Report
|
||||
this video' link found below each video.
|
||||
</p>
|
||||
</div>
|
||||
|
|
2
web/page/privacypolicy/index.js
Normal file
2
web/page/privacypolicy/index.js
Normal file
|
@ -0,0 +1,2 @@
|
|||
import PagePrivacyPolicy from './view';
|
||||
export default PagePrivacyPolicy;
|
394
web/page/privacypolicy/view.jsx
Normal file
394
web/page/privacypolicy/view.jsx
Normal file
|
@ -0,0 +1,394 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import Page from 'component/page';
|
||||
import Card from 'component/common/card';
|
||||
|
||||
const PrivacyPolicyPage = () => {
|
||||
return (
|
||||
<Page>
|
||||
<Card
|
||||
title="Privacy Policy"
|
||||
body={
|
||||
<div>
|
||||
<p>
|
||||
This privacy policy has been compiled to better serve those who are concerned with how their 'Personally
|
||||
Identifiable Information' (PII) is being used online. PII, as described in US privacy law and information
|
||||
security, is information that can be used on its own or with other information to identify, contact, or
|
||||
locate a single person, or to identify an individual in context. Please read our privacy policy carefully
|
||||
to get a clear understanding of how we collect, use, protect or otherwise handle your Personally
|
||||
Identifiable Information in accordance with our website.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
What personal information do we collect from the people that visit our blog, website or app?
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When ordering or registering on our site, as appropriate, you may be asked to enter your name, email
|
||||
address, mailing address, phone number, credit card information or other details to help you with your
|
||||
experience.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>When do we collect information?</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We collect information from you when you register on our site, place an order, subscribe to a newsletter,
|
||||
respond to a survey, fill out a form, open a support ticket or enter information on our site, or provide
|
||||
us with feedback on our products or services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>How do we use your information? </strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We may use the information we collect from you when you register, make a purchase, sign up for our
|
||||
newsletter, respond to a survey or marketing communication, surf the website, or use certain other site
|
||||
features in the following ways:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
To personalize your experience and to allow us to deliver the type of content and product offerings in
|
||||
which you are most interested.
|
||||
</li>
|
||||
<li>To improve our website in order to better serve you.</li>
|
||||
<li>To allow us to better service you in responding to your customer service requests.</li>
|
||||
<li>To administer a contest, promotion, survey or other site feature.</li>
|
||||
<li>To quickly process your transactions.</li>
|
||||
<li>To send periodic emails regarding your order or other products and services.</li>
|
||||
<li>To follow up with them after correspondence (live chat, email or phone inquiries)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>How do we protect your information?</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make
|
||||
your visit to our site as safe as possible.
|
||||
</p>
|
||||
|
||||
<p>We use regular Malware Scanning.</p>
|
||||
|
||||
<p>
|
||||
Your personal information is contained behind secured networks and is only accessible by a limited number
|
||||
of persons who have special access rights to such systems, and are required to keep the information
|
||||
confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket
|
||||
Layer (SSL) technology.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We implement a variety of security measures when a user places an order enters, submits, or accesses their
|
||||
information to maintain the safety of your personal information.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
All transactions are processed through a gateway provider and are not stored or processed on our servers.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Do we use "cookies"?</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive
|
||||
through your Web browser (if you allow) that enables the site's or service provider's systems to recognize
|
||||
your browser and capture and remember certain information. For instance, we use cookies to help us
|
||||
remember and process the items in your shopping cart. They are also used to help us understand your
|
||||
preferences based on previous or current site activity, which enables us to provide you with improved
|
||||
services. We also use cookies to help us compile aggregate data about site traffic and site interaction so
|
||||
that we can offer better site experiences and tools in the future.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>We use cookies to:</strong>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Help remember and process the items in the shopping cart.</li>
|
||||
<li>
|
||||
Compile aggregate data about site traffic and site interactions in order to offer better site
|
||||
experiences and tools in the future. We may also use trusted third-party services that track this
|
||||
information on our behalf.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
You can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn
|
||||
off all cookies. You do this through your browser settings. Since browser is a little different, look at
|
||||
your browser's Help Menu to learn the correct way to modify your cookies.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>If users disable cookies in their browser:</strong>
|
||||
</p>
|
||||
|
||||
<p>If you turn cookies off it will turn off some of the features of the site.</p>
|
||||
|
||||
<p>
|
||||
<strong>Third-party disclosure</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We do not sell, trade, or otherwise transfer to outside parties your Personally Identifiable Information
|
||||
unless we provide users with advance notice. This does not include website hosting partners and other
|
||||
parties who assist us in operating our website, conducting our business, or serving our users, so long as
|
||||
those parties agree to keep this information confidential. We may also release information when it's
|
||||
release is appropriate to comply with the law, enforce our site policies, or protect ours or others'
|
||||
rights, property or safety.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
However, non-personally identifiable visitor information may be provided to other parties for marketing,
|
||||
advertising, or other uses.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Third-party links</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Occasionally, at our discretion, we may include or offer third-party products or services on our website.
|
||||
These third-party sites have separate and independent privacy policies. We therefore have no
|
||||
responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to
|
||||
protect the integrity of our site and welcome any feedback about these sites.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Google</strong>
|
||||
</p>
|
||||
<p>
|
||||
{' '}
|
||||
As part of Odysee YouTube Sync Verification, we will only use read-only access to verify the ownership of
|
||||
YouTube channels and will not transfer this data to others unless doing so is necessary to comply with
|
||||
applicable law, or as part of a merger, acquisition, or sale of assets.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Google's advertising requirements can be summed up by Google's Advertising Principles. They are put in
|
||||
place to provide a positive experience for users.{' '}
|
||||
<code>https://support.google.com/adwordspolicy/answer/1316548?hl=en</code>
|
||||
</p>
|
||||
|
||||
<p>We use Google AdSense Advertising on our website.</p>
|
||||
|
||||
<p>
|
||||
Google, as a third-party vendor, uses cookies to serve ads on our site. Google's use of the DART cookie
|
||||
enables it to serve ads to our users based on previous visits to our site and other sites on the Internet.
|
||||
Users may opt-out of the use of the DART cookie by visiting the Google Ad and Content Network privacy
|
||||
policy.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>We have implemented the following:</strong>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Remarketing with Google AdSense</li>
|
||||
<li>Google Display Network Impression Reporting</li>
|
||||
<li>Demographics and Interests Reporting</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
We, along with third-party vendors such as Google use first-party cookies (such as the Google Analytics
|
||||
cookies) and third-party cookies (such as the DoubleClick cookie) or other third-party identifiers
|
||||
together to compile data regarding user interactions with ad impressions and other ad service functions as
|
||||
they relate to our website.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Opting out:</strong>
|
||||
</p>
|
||||
<p>
|
||||
Users can set preferences for how Google advertises to you using the Google Ad Settings page.
|
||||
Alternatively, you can opt out by visiting the Network Advertising Initiative Opt Out page or by using the
|
||||
Google Analytics Opt Out Browser add on.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>California Online Privacy Protection Act</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
CalOPPA is the first state law in the nation to require commercial websites and online services to post a
|
||||
privacy policy. The law's reach stretches well beyond California to require any person or company in the
|
||||
United States (and conceivably the world) that operates websites collecting Personally Identifiable
|
||||
Information from California consumers to post a conspicuous privacy policy on its website stating exactly
|
||||
the information being collected and those individuals or companies with whom it is being shared. - See
|
||||
more at:{' '}
|
||||
<code>http://consumercal.org/california-online-privacy-protection-act-caloppa/#sthash.0FdRbT51.dpuf</code>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>According to CalOPPA, we agree to the following:</strong>
|
||||
</p>
|
||||
|
||||
<p>Users can visit our site anonymously.</p>
|
||||
|
||||
<p>
|
||||
Once this privacy policy is created, we will add a link to it on our home page or as a minimum, on the
|
||||
first significant page after entering our website.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Our Privacy Policy link includes the word 'Privacy' and can easily be found on the page specified above.
|
||||
</p>
|
||||
|
||||
<p>You will be notified of any Privacy Policy changes:</p>
|
||||
|
||||
<ul>
|
||||
<li>On our Privacy Policy Page</li>
|
||||
</ul>
|
||||
|
||||
<p>Can change your personal information:</p>
|
||||
|
||||
<ul>
|
||||
<li>By emailing us</li>
|
||||
<li>By logging in to your account</li>
|
||||
<li>By chatting with us or by sending us a support ticket</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>How does our site handle Do Not Track signals?</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We honor Do Not Track signals and Do Not Track, plant cookies, or use advertising when a Do Not Track
|
||||
(DNT) browser mechanism is in place.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Does our site allow third-party behavioral tracking?</strong>
|
||||
</p>
|
||||
|
||||
<p>It's also important to note that we do not allow third-party behavioral tracking</p>
|
||||
|
||||
<p>
|
||||
<strong>COPPA (Children Online Privacy Protection Act)</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When it comes to the collection of personal information from children under the age of 13 years old, the
|
||||
Children's Online Privacy Protection Act (COPPA) puts parents in control. The Federal Trade Commission,
|
||||
United States' consumer protection agency, enforces the COPPA Rule, which spells out what operators of
|
||||
websites and online services must do to protect children's privacy and safety online.
|
||||
</p>
|
||||
|
||||
<p>We do not specifically market to children under the age of 13 years old.</p>
|
||||
|
||||
<p>Do we let third-parties, including ad networks or plug-ins collect PII from children under 13?</p>
|
||||
|
||||
<p>
|
||||
<strong>Fair Information Practices</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Fair Information Practices Principles form the backbone of privacy law in the United States and the
|
||||
concepts they include have played a significant role in the development of data protection laws around the
|
||||
globe. Understanding the Fair Information Practice Principles and how they should be implemented is
|
||||
critical to comply with the various privacy laws that protect personal information.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
In order to be in line with Fair Information Practices we will take the following responsive action,
|
||||
should a data breach occur:
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>We will notify you via email:</p>
|
||||
|
||||
<ul>
|
||||
<li>Within 7 business days</li>
|
||||
</ul>
|
||||
|
||||
<p>We will notify the users via in-site notification:</p>
|
||||
|
||||
<ul>
|
||||
<li>Within 7 business days</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
We also agree to the Individual Redress Principle which requires that individuals have the right to
|
||||
legally pursue enforceable rights against data collectors and processors who fail to adhere to the law.
|
||||
This principle requires not only that individuals have enforceable rights against data users, but also
|
||||
that individuals have recourse to courts or government agencies to investigate and/or prosecute
|
||||
non-compliance by data processors.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>CAN SPAM Act</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The CAN-SPAM Act is a law that sets the rules for commercial email, establishes requirements for
|
||||
commercial messages, gives recipients the right to have emails stopped from being sent to them, and spells
|
||||
out tough penalties for violations.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>We collect your email address in order to:</strong>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Send information, respond to inquiries, and/or other requests or questions</li>
|
||||
<li>Process orders and to send information and updates pertaining to orders.</li>
|
||||
<li>Send you additional information related to your product and/or service</li>
|
||||
<li>
|
||||
Market to our mailing list or continue to send emails to our clients after the original transaction has
|
||||
occurred.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>To be in accordance with CANSPAM, we agree to the following:</strong>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Not use false or misleading subjects or email addresses.</li>
|
||||
<li>Identify the message as an advertisement in some reasonable way.</li>
|
||||
<li>Include the physical address of our business or site headquarters.</li>
|
||||
<li>Monitor third-party email marketing services for compliance, if one is used.</li>
|
||||
<li>Honor opt-out/unsubscribe requests quickly.</li>
|
||||
<li>Allow users to unsubscribe by using the link at the bottom of each email.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
If at any time you would like to unsubscribe from receiving future emails, you can email us at:
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Follow the instructions at the bottom of each email.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
and we will promptly remove you from <strong>ALL</strong> correspondence.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Contacting Us</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If there are any questions regarding this privacy policy, you may contact us using the information below.
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>Odysee Inc. 99 Hanover St Manchester, New Hampshire 03101 United States hello@odysee.com</p>
|
||||
</blockquote>
|
||||
|
||||
<small>Last edited on 2021-10-08</small>
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
export default PrivacyPolicyPage;
|
2
web/page/tos/index.js
Normal file
2
web/page/tos/index.js
Normal file
|
@ -0,0 +1,2 @@
|
|||
import PageTOS from './view';
|
||||
export default PageTOS;
|
619
web/page/tos/view.jsx
Normal file
619
web/page/tos/view.jsx
Normal file
|
@ -0,0 +1,619 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import Page from 'component/page';
|
||||
import Card from 'component/common/card';
|
||||
|
||||
const TOSPage = () => {
|
||||
return (
|
||||
<Page>
|
||||
<Card
|
||||
title="Terms of Service"
|
||||
body={
|
||||
<div>
|
||||
<p>
|
||||
<strong>Last Updated: October 2021</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
PLEASE READ THESE TERMS OF SERVICE CAREFULLY. NOTE THAT SECTION 16 CONTAINS A BINDING ARBITRATION CLAUSE
|
||||
AND CLASS ACTION WAIVER, WHICH AFFECT YOUR LEGAL RIGHTS. IF YOU DO NOT AGREE TO THESE TERMS OF SERVICE,
|
||||
DO NOT ACCESS OR USE THE SERVICES.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
By clicking to agree to these Terms of Service (<strong>“Terms"</strong>) when running/installing our
|
||||
software, publishing content to Odysee, or by otherwise accessing or using the network [via proxy or
|
||||
direct], mobile applications and online services (collectively, our <strong>“Services"</strong>) of Odysee
|
||||
Inc. (<strong>“Company," “we," or “us"</strong>), you agree to be bound by these Terms. If you do not
|
||||
agree to these Terms, you may not access or use the Services for any purpose. Please refer to our Privacy
|
||||
Policy https://odysee.com/$/privacypolicy for information about how we collect, use and disclose
|
||||
information about you.
|
||||
</p>
|
||||
|
||||
<p>You and the Company agree as follows:</p>
|
||||
|
||||
<h3 id="toc_0">1. Overview of Odysee and the Services</h3>
|
||||
<p>
|
||||
<strong>“Odysee"</strong> is a decentralized, consensus-driven protocol that enables the publication and
|
||||
viewing of information, videos, music, data and other materials (<strong>“Content"</strong>). Content is
|
||||
distributed to Odysee by publishers and is stored in fragmented shards via a distributed network of
|
||||
third-party devices (<strong>“Hosts"</strong>) that utilize Odysee. Odysee also allows publishers to bid
|
||||
on and reserve names (<strong>“Names"</strong>), which can be used as a unique identifier for Content.
|
||||
Please consult Odysee.tech to learn more about the technical architecture of Odysee.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Services provide an interface for you to interact with Odysee, including to publish, access, or host
|
||||
Content through Odysee. The Odysee protocol is not owned, operated, or maintained by us. We have no
|
||||
responsibility or liability for Odysee, and the Company has no ability to control third parties’ use of
|
||||
Odysee. We are not able to delete or remove Content that has been published through Odysee and that may be
|
||||
accessible via the Services.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_1">2. Eligibility</h3>
|
||||
|
||||
<p>
|
||||
You must be at least 13 years of age to access or use our Services. If you are under 18 years of age (or
|
||||
the age of legal majority where you live), you may only access or use our Services under the supervision
|
||||
of a parent or legal guardian who agrees to be bound by these Terms. If you are a parent or legal guardian
|
||||
of a user under the age of 18 (or the age of legal majority), you will be fully responsible for the acts
|
||||
or omissions of such user in connection with our Services. If you are accessing or using our Services on
|
||||
behalf of another person or entity, you represent that you are authorized to accept these Terms on that
|
||||
person or entity’s behalf and that the person or entity agrees to be responsible to us if you or the other
|
||||
person or entity violates these Terms.
|
||||
</p>
|
||||
<h3 id="toc_2">3. Publishing Content</h3>
|
||||
|
||||
<p>This section applies if you use the Services to publish Content through Odysee. </p>
|
||||
|
||||
<p>
|
||||
a) You will make available via the Services a clear and accurate description of Content you publish, and
|
||||
provide the Content in accordance with any descriptions or representations you make available about the
|
||||
Content. You are solely responsible for resolving any disputes with users of your Content, including any
|
||||
chargebacks or refunds, and for any and all injuries, illnesses, damages, claims, liabilities and costs
|
||||
that are caused in whole or in part by you or your Content. Publishing to a blockchain is permanent. We
|
||||
cannot remove published content from the blockchain itself, although we can block content accessed via our
|
||||
app or other services on top of the blockchain.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) Odysee enables publishers to offer Content for sale to other users by setting contract terms within the
|
||||
metadata of the Content. Company, in its sole discretion, may from time to time impose limits on the
|
||||
ability to sell Content via the Services. Upon the purchase of Content, you and the purchaser of your
|
||||
Content will enter into a separate agreement, pursuant to which that purchaser agrees to pay the specified
|
||||
fees for the Content and you agree to enable access to your Content. You are solely responsible for
|
||||
providing refunds as required to comply with applicable law. You are responsible for determining what, if
|
||||
any, taxes apply to your sale of Content, including, for example, sales, use, value added, and similar
|
||||
taxes. It is also your responsibility to withhold, collect, report and remit the correct taxes to the
|
||||
appropriate tax authorities. The Company is not responsible for withholding, collecting, reporting, or
|
||||
remitting any sales, use, value added, or similar tax arising from any transaction completed via the
|
||||
Services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
c) The Company is not a party to and has no responsibility or liability with respect to any
|
||||
communications, transactions, interactions, disputes or any relations whatsoever between you and any users
|
||||
of the Content. We will not be responsible for any loss, misuse, or deletion of Content or any failure of
|
||||
any Content to be encrypted, stored or distributed.. You are solely responsible for your use of the
|
||||
Services, including for configurations that you deem appropriate to determine access to your Content by
|
||||
other users in a manner that meets your expectations. You are solely responsible for backing up any
|
||||
Content. We are not responsible for any user’s access to your Content or any user’s misuse or
|
||||
redistribution of Content.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
d) You will not use the Services to reserve a Name that infringes any patent, trademark, trade secret,
|
||||
copyright or other intellectual or proprietary right of any party.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
e) We make no representations or warranties regarding the suitability of the Services for the distribution
|
||||
and publishing of any particular types of data. By posting any Content or reserving a Name, you represent
|
||||
and warrant that you have the lawful right, including all necessary intellectual property rights, to
|
||||
distribute and reproduce such Content or use such Name for any purpose, commercial or otherwise. You will
|
||||
provide all notices to, and obtain any consents from third parties as required by applicable law in
|
||||
connection with the distribution and publishing of Content via the Services.{' '}
|
||||
</p>
|
||||
|
||||
<p>f) You will not use the Services to distribute or publish Content that:</p>
|
||||
<ul>
|
||||
<li>
|
||||
is unlawful, for example, copyrighted works, underage sexual content, revenge pornography, or any other
|
||||
content illegal under US or state law.
|
||||
</li>
|
||||
<li>
|
||||
would constitute, encourage or provide instructions for a criminal offense, violate the rights of any
|
||||
party, or that would otherwise create liability or violate any applicable local, state, national or
|
||||
international law;
|
||||
</li>
|
||||
<li>
|
||||
infringes any patent, trademark, trade secret, copyright or other intellectual or proprietary right of
|
||||
any party;
|
||||
</li>
|
||||
<li>
|
||||
impersonates any person or entity or otherwise misrepresents your affiliation with a person or entity;
|
||||
</li>
|
||||
<li>
|
||||
contains sensitive personal information, including "protected health information," as defined under
|
||||
HIPAA and its implementing rules; “cardholder data," as defined by the PCI DSS; “personal information"
|
||||
of a “child" as such terms are defined under the Children’s Online Privacy Protection Act and its
|
||||
implementing rules; or personal data revealing racial or ethnic origin, political opinions, religious or
|
||||
philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data for
|
||||
the purpose of uniquely identifying a natural person, data concerning health or data concerning a
|
||||
natural person's sex life or sexual orientation;
|
||||
</li>
|
||||
<li>
|
||||
contains viruses, corrupted data or other harmful, disruptive or destructive files; UNLESS CLEARLY
|
||||
LABELED AS SUCH
|
||||
</li>
|
||||
<li>
|
||||
in the sole judgment of the Company, is objectionable or which restricts or inhibits any other person
|
||||
from using or enjoying Odysee or the Services, or which may expose the Company or its users to any harm
|
||||
or liability of any type.
|
||||
</li>
|
||||
<li>
|
||||
USD equivalent of Odysee Credits [LBC] is determined by 3rd party markets such as Bittrex and Poloniex,
|
||||
not Odysee INC.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="toc_3">4. Accessing Content</h3>
|
||||
|
||||
<p>This section applies if you use the Services to access Content that has been stored through Odysee.</p>
|
||||
|
||||
<p>
|
||||
a) In using our Services, you may view or otherwise interact with Content provided by publishers. Your
|
||||
dealings or correspondence with any publisher of Content are solely between you and that publisher. The
|
||||
Company is not responsible or liable for any damage or loss of any sort caused, or alleged to be caused,
|
||||
by or in connection with any such dealings, including the delivery, quality, safety, legality or any other
|
||||
aspect of any Content that you may access using our Services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) In certain instances, your access to Content may be subject to sale terms set forth in the metadata of
|
||||
the Content. Company, in its sole discretion, may from time to time impose limits on the ability to
|
||||
purchase Content via the Services. Upon your access of any purchased Content, you and the publisher will
|
||||
enter into a separate agreement, pursuant to which you agree to pay the specified fees for the Content and
|
||||
the publisher agrees to make such Content available to you. THE COMPANY DOES NOT HAVE THE POWER OR
|
||||
RESPONSIBILITY TO PROVIDE ANY REFUNDS. You agree to look solely to the publisher to resolve any disputes
|
||||
regarding Content, and that publishers are solely responsible for providing any refunds.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
c) All payments for content will be made using LBC and occur on the Odysee blockchain. Purchaser is buying
|
||||
the right to access content for personal non-commercial use unless content creator provides a license for
|
||||
commercial use or remixing.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_4">5. Hosting Content</h3>
|
||||
|
||||
<p>
|
||||
This section applies to you if you host any Content via Odysee using the Services. The Services allow
|
||||
Hosts to make available storage space (<strong>“Space"</strong>) on the Host’s device for the storage of
|
||||
Content published through Odysee By making available Space on your device, you authorize any user of our
|
||||
Services to: (i) store Content published through Odysee onto your device; and (ii) access such Content
|
||||
from your device at any time.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
a) You represent and warrant that (i) you own or control your device, and have the right to provide the
|
||||
Space on your device pursuant to these Terms; and (ii) you will not breach any agreement to which you are
|
||||
a party in connection with your performance under these Terms, including any agreement you have with a
|
||||
third-party Internet service provider.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) By allowing Space to be utilized to store Content distributed through Odysee, you understand that your
|
||||
device may be impacted due to the additional constraints being placed on it by the processing of Content.
|
||||
In particular, your device may not operate as quickly as it would without making Space available for
|
||||
others to utilize.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
c) You will not: (i) reverse engineer any aspect of the Content stored on your device or do anything that
|
||||
might discover the contents or origin of the Content; (ii) attempt to bypass or circumvent measures
|
||||
employed to prevent or limit access to the Content, including attempting to defeat any encryption; or
|
||||
(iii) attempt to interfere with the storage or transmission of Content.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_5">6. General Conduct Restrictions</h3>
|
||||
|
||||
<p>
|
||||
You are solely responsible for your conduct while using the Services. You will comply with all applicable
|
||||
laws and third-party agreements to which you are bound. Further, you will not do any of the following in
|
||||
connection with the Services or any other users:{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
a) Use the Services in any manner that could interfere with, disrupt, negatively affect or inhibit other
|
||||
users from fully enjoying the Services or that could damage, disable, overburden or impair the functioning
|
||||
of the Services in any manner;
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) Impersonate or distribute Content on behalf or any person or entity or otherwise misrepresent your
|
||||
affiliation with a person or entity;
|
||||
</p>
|
||||
|
||||
<p>c) Cheat or utilize unauthorized exploits in connection with the Services; </p>
|
||||
|
||||
<p>d) Stalk, intimidate, threaten, or otherwise harass or cause discomfort to other users; </p>
|
||||
|
||||
<p>
|
||||
e) Send, distribute or post spam, unsolicited or bulk commercial electronic communications, chain letters,
|
||||
or pyramid schemes;
|
||||
</p>
|
||||
|
||||
<p>
|
||||
f) Harvest or otherwise collect information about users, including email addresses, without their consent;
|
||||
</p>
|
||||
|
||||
<p>
|
||||
g) Use the Services for any illegal or unauthorized purpose or engage in, encourage, or promote any
|
||||
illegal activity, or any activity that violates these Terms;{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
h) Use the Services to distribute Content that you do not have the lawful right to distribute or
|
||||
reproduce; or
|
||||
</p>
|
||||
|
||||
<p>
|
||||
i) Circumvent or attempt to circumvent any filtering, security measures or other features we may from time
|
||||
to time adopt to protect the Company, the Services, its users or third parties.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Company does not endorse or adopt any Content and you acknowledge and agree that the Company will have
|
||||
no responsibility for any Content, including without limitation, material that may be misleading,
|
||||
incomplete, erroneous, offensive, indecent or otherwise objectionable. Enforcement of the Content rules
|
||||
set forth in these Terms is solely at our discretion, and subject to our technical capabilities. Failure
|
||||
to enforce such rules in some instances does not constitute a waiver of our right to enforce such rules in
|
||||
other instances. In addition, these rules do not create any private right of action on the part of any
|
||||
third party or any reasonable expectation that the Services will not link to any Content that is
|
||||
prohibited by such rules.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_6">7. Limited License; Copyright and Trademark</h3>
|
||||
|
||||
<p>
|
||||
Our Services and the text, graphics, images, photographs, illustrations, trademarks, trade names, service
|
||||
marks, logos, slogans and other content contained therein (collectively, the{' '}
|
||||
<strong>“Company Marks"</strong>) are owned by Company and its licensors and are protected under both
|
||||
United States and foreign laws, and may not be copied, imitated or used, in whole or in part, without our
|
||||
or the applicable licensor’s prior written permission. You may not use any metatags or other “hidden text"
|
||||
utilizing any Company Marks without our prior written permission. Further, you may not use, frame or
|
||||
utilize framing techniques to enclose any Company Mark, the content of any text or the layout or design of
|
||||
any page or form contained on a page, on the Services without the Company’s express written consent.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_7">8. Open Source Software</h3>
|
||||
|
||||
<p>
|
||||
a) We may, from time to time, release the source code for certain of the software that supports our
|
||||
Services. You agree to be bound by, and comply with, any license agreement that applies to this open
|
||||
source software. You will not indicate that you are associated with Company in connection with any of your
|
||||
modifications or distributions of this open source software.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) The source code we release in connection with open source software is not part of the Services, and
|
||||
your use of that source code without interacting with our Services is not subject to these Terms. For
|
||||
clarity, though, when we host any software and enable you to access and use such software as a service
|
||||
through our Services, then these Terms will apply to such access and use.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_8">9. YouTube Sync Program Terms</h3>
|
||||
|
||||
<p>
|
||||
a) If you participate in the YouTube Sync Program, you also agree to{' '}
|
||||
<a href="https://www.youtube.com/t/terms" rel="noopener">
|
||||
YouTube's Terms of Service (https://www.youtube.com/t/terms)
|
||||
</a>{' '}
|
||||
and{' '}
|
||||
<a href="https://www.google.com/policies/privacy" rel="noopener">
|
||||
Google's Privacy Policy (https://www.google.com/policies/privacy).
|
||||
</a>{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) To revoke Odysee's access to your YouTube account or manage your security preferences, please{' '}
|
||||
<a href="https://security.google.com/settings/security/permissions" rel="noopener">
|
||||
refer to your Google Security and Permissions Page
|
||||
(https://security.google.com/settings/security/permissions).
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_9">10. Feedback</h3>
|
||||
|
||||
<p>
|
||||
Any questions, comments, suggestions, ideas, original or creative materials or other information you
|
||||
submit about the Company or our products or Services (collectively, <strong>“Feedback"</strong>), is
|
||||
non-confidential and will become the sole property of the Company. We will own exclusive rights,
|
||||
including, without limitation, all intellectual property rights, in and to Feedback and will be entitled
|
||||
to the unrestricted use and dissemination of Feedback for any purpose, commercial or otherwise, without
|
||||
acknowledgment or compensation to you.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_10">11. Copyright Complaints</h3>
|
||||
|
||||
<p>
|
||||
We have a policy of limiting access to our Services and terminating the accounts of users who infringe the
|
||||
intellectual property rights of others. If you believe that anything on our Services infringes any
|
||||
copyright that you own or control, you may notify the Company’s Designated Agent as follows:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Designated Agent: Odysee INC Address: 99 Hanover St, Manchester, NH 03101 Telephone Number: 907-318-5956
|
||||
Fax Number: 801-327-6808
|
||||
</p>
|
||||
|
||||
<p>E-Mail Address: hello@odysee.com</p>
|
||||
|
||||
<p>
|
||||
Please see 17 U.S.C. §512(c)(3) for the requirements of a proper notification. Also, please note that if
|
||||
you knowingly misrepresent that any activity or material on our Services is infringing, you may be liable
|
||||
to the Company for certain costs and damages.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_11">12. Indemnification</h3>
|
||||
|
||||
<p>
|
||||
To the fullest extent permitted by applicable law, you will indemnify, defend, and hold harmless the
|
||||
Company and our officers, directors, agents, partners and employees (individually and collectively, the{' '}
|
||||
<strong>“Company Parties"</strong>) from and against any loss, liability, claim, demand, damages, expenses
|
||||
or costs (including attorney’s fees) (<strong>“Claims"</strong>) arising out of or related to (a) your
|
||||
access to or use of our Services; (b) your Content or any Name that you have reserved; (c) your violation
|
||||
of these Terms; or (d) your violation, misappropriation or infringement of any rights of another
|
||||
(including intellectual property rights or privacy rights). You agree to promptly notify Company Parties
|
||||
of any third party Claims, cooperate with Company Parties in defending such Claims and pay all fees, costs
|
||||
and expenses associated with defending such Claims (including, but not limited to, attorneys' fees). You
|
||||
also agree that the Company Parties will have control of the defense or settlement of any third party
|
||||
Claims. This indemnity is in addition to, and not in lieu of, any other indemnities set forth in a written
|
||||
agreement between you and the Company or the other Company Parties.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_12">13. Disclaimers</h3>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
Your use of our Services is at your sole risk. Our Services are provided “as is" and “as available"
|
||||
without warranties of any kind, either express or implied, including, but not limited to, implied
|
||||
warranties of merchantability, fitness for a particular purpose, title, and non-infringement. In
|
||||
addition, the Company does not represent or warrant that our Services are accurate, complete, reliable,
|
||||
current or error-free. While the Company attempts to make your access to and use of our Services safe,
|
||||
we cannot and do not represent or warrant that our Services or servers are free of viruses or other
|
||||
harmful components. You assume the entire risk as to the quality and performance of the Services.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_13">14. Limitation of Liability</h3>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
The Company and the other Company Parties will not be liable to you under any theory of
|
||||
liability—whether based in contract, tort, negligence, strict liability, warranty, or otherwise—for any
|
||||
indirect, consequential, exemplary, incidental, special or punitive damages or lost profits, even if the
|
||||
Company or the other Company Parties have been advised of the possibility of such damages.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
The total liability of the Company and the other Company Parties, for any claim arising out of or
|
||||
relating to these Terms or our Services, regardless of the form of the action, is limited to the greater
|
||||
of any amount paid, if any, by you to access or use our Services or $100 USD.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
The limitations set forth in this section will not limit or exclude liability for the gross negligence,
|
||||
fraud or intentional misconduct of the Company or other Company Parties or for any other matters in
|
||||
which liability cannot be excluded or limited under applicable law. Additionally, some jurisdictions do
|
||||
not allow the exclusion or limitation of incidental or consequential damages, so the above limitations
|
||||
or exclusions may not apply to you.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_14">15. Release</h3>
|
||||
|
||||
<p>
|
||||
To the fullest extent permitted by applicable law, you release the Company and the other Company Parties
|
||||
from responsibility, liability, claims, demands and damages (actual and consequential) of every kind and
|
||||
nature, known and unknown (including, but not limited to, claims of negligence), arising out of or related
|
||||
to disputes between users and the acts or omissions of third parties.{' '}
|
||||
<strong>
|
||||
You expressly waive any rights you may have under California Civil Code § 1542 as well as any other
|
||||
statute or common law principles that would otherwise limit the coverage of this release to include only
|
||||
those claims which you may know or suspect to exist in your favor at the time of agreeing to this
|
||||
release.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_15">16. Dispute Resolution; Arbitration</h3>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
Please read the following section carefully because it requires you to arbitrate certain disputes and
|
||||
claims with the Company and limits the manner in which you can seek relief from us.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_16">16.1. Binding Arbitration</h3>
|
||||
|
||||
<p>
|
||||
Except for any disputes, claims, suits, actions, causes of action, demands or proceedings (collectively,{' '}
|
||||
<strong>“Disputes"</strong>) in which either party seeks to bring an individual action in small claims
|
||||
court or seeks injunctive or other equitable relief for the alleged unlawful use of intellectual property,
|
||||
including, without limitation, copyrights, trademarks, trade names, logos, trade secrets or patents, you
|
||||
and the Company (a) waive your and the Company’s respective rights to have any and all Disputes arising
|
||||
from or related to these Terms or the Services resolved in a court, and (b) waive your and the Company’s
|
||||
respective rights to a jury trial. Instead, you and the Company will arbitrate Disputes through binding
|
||||
arbitration (which is the referral of a Dispute to one or more persons charged with reviewing the Dispute
|
||||
and making a final and binding determination to resolve it instead of having the Dispute decided by a
|
||||
judge or jury in court).
|
||||
</p>
|
||||
|
||||
<h3 id="toc_17">16.2. No Class Arbitrations, Class Actions or Representative Actions</h3>
|
||||
|
||||
<p>
|
||||
Any Dispute arising out of or related to these Terms or the Services is personal to you and the Company
|
||||
and will be resolved solely through individual arbitration and will not be brought as a class arbitration,
|
||||
class action or any other type of representative proceeding. There will be no class arbitration or
|
||||
arbitration in which an individual attempts to resolve a Dispute as a representative of another individual
|
||||
or group of individuals. Further, a Dispute cannot be brought as a class or other type of representative
|
||||
action, whether within or outside of arbitration, or on behalf of any other individual or group of
|
||||
individuals.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_18">16.3. Federal Arbitration Act</h3>
|
||||
|
||||
<p>
|
||||
These Terms affect interstate commerce and the enforceability of this Section 16 will be both
|
||||
substantively and procedurally governed by and construed and enforced in accordance with the Federal
|
||||
Arbitration Act, 9 U.S.C. § 1 et seq. (the <strong>“FAA"</strong>), to the maximum extent permitted by
|
||||
applicable law.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_19">16.4. Notice; Informal Dispute Resolution</h3>
|
||||
|
||||
<p>
|
||||
Each party will notify the other party in writing of any arbitrable or small claims Dispute within thirty
|
||||
(30) days of the date it arises, so that the parties can attempt in good faith to resolve the Dispute
|
||||
informally. Notice to the Company will be sent by e-mail to the Company at hello@odysee.com. Notice to you
|
||||
will be by email to the then-current email address in your Account. Your notice must include (a) your
|
||||
name, postal address, email address and telephone number, (b) a description in reasonable detail of the
|
||||
nature or basis of the Dispute, and (c) the specific relief that you are seeking. If you and the Company
|
||||
cannot agree how to resolve the Dispute within thirty (30) days after the date notice is received by the
|
||||
applicable party, then either you or the Company may, as appropriate and in accordance with this Section
|
||||
16, commence an arbitration proceeding or, to the extent specifically provided for in Section 17.1, file a
|
||||
claim in court.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_20">16.5. Process</h3>
|
||||
|
||||
<p>
|
||||
Any arbitration will occur in New Castle County, Delaware. Arbitration will be conducted confidentially by
|
||||
a single arbitrator in accordance with the rules of the Judicial Arbitration and Mediation Services (
|
||||
<strong>“JAMS"</strong>), which are hereby incorporated by reference. The state and federal courts located
|
||||
in New Castle County, Delaware will have exclusive jurisdiction over any appeals and the enforcement of an
|
||||
arbitration award. You may also litigate a Dispute in the small claims court located in the county where
|
||||
you reside if the Dispute meets the requirements to be heard in small claims court.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_21">16.6. Authority of Arbitrator</h3>
|
||||
|
||||
<p>
|
||||
As limited by the FAA, these Terms and the applicable JAMS rules, the arbitrator will have (a) the
|
||||
exclusive authority and jurisdiction to make all procedural and substantive decisions regarding a Dispute,
|
||||
including the determination of whether a Dispute is arbitrable, and (b) the authority to grant any remedy
|
||||
that would otherwise be available in court; provided, however, that the arbitrator does not have the
|
||||
authority to conduct a class arbitration or a representative action, which is prohibited by these Terms.
|
||||
The arbitrator may only conduct an individual arbitration and may not consolidate more than one
|
||||
individual’s claims, preside over any type of class or representative proceeding or preside over any
|
||||
proceeding involving more than one individual.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_22">16.7. Rules of JAMS</h3>
|
||||
|
||||
<p>
|
||||
The rules of JAMS and additional information about JAMS are available on the{' '}
|
||||
<a href="http://www.jamsadr.com/" rel="noopener">
|
||||
JAMS website.
|
||||
</a>{' '}
|
||||
By agreeing to be bound by these Terms, you either (a) acknowledge and agree that you have read and
|
||||
understand the rules of JAMS, or (b) waive your opportunity to read the rules of JAMS and any claim that
|
||||
the rules of JAMS are unfair or should not apply for any reason.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_23">17. Governing Law and Venue</h3>
|
||||
|
||||
<p>
|
||||
These Terms and your access to and use of the Services will be governed by and construed and enforced in
|
||||
accordance with the laws of the State of Delaware, without regard to conflict of law rules or principles
|
||||
(whether of the State of Delaware or any other jurisdiction) that would cause the application of the laws
|
||||
of any other jurisdiction. Any Dispute between the parties arising out of or relating to these Terms that
|
||||
is not subject to arbitration or cannot be heard in small claims court will be resolved in the state or
|
||||
federal courts of the State of Delaware and the United States, respectively, sitting in New Castle County,
|
||||
Delaware.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_24">18. Severability</h3>
|
||||
|
||||
<p>
|
||||
If any term, clause or provision of these Terms is held invalid or unenforceable, then that term, clause
|
||||
or provision will be severable from these Terms and will not affect the validity or enforceability of any
|
||||
remaining part of that term, clause or provision, or any other term, clause or provision of these Terms.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_25">19. Termination or Suspension</h3>
|
||||
|
||||
<p>
|
||||
Notwithstanding anything contained in these Terms, we reserve the right, without notice and in our sole
|
||||
discretion, to terminate this agreement or suspend your right to access the Services. You may terminate
|
||||
this agreement without notice by discontinuing use of the Services. All rights and licenses granted to you
|
||||
under these Terms will immediately be revoked upon our termination of the agreement or our suspension of
|
||||
your access to the Services. We make no representations that termination or suspension of the Services
|
||||
will prevent the spread or distribution of published Content through Odysee.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_26">20. Amendment</h3>
|
||||
|
||||
<p>
|
||||
We reserve the right to change these Terms from time to time upon notice to you. If we make changes to
|
||||
these Terms, we will provide notice of such changes by posting the revised Terms to the Services and
|
||||
updating the “Last Updated" date at the top of these Terms. In some cases, we may provide additional
|
||||
notice to you, such as via our Services or to an email address associated with your Account. Your
|
||||
continued use of the Services following our provision of any such notice will confirm your acceptance of
|
||||
the revised Terms. If you do not agree to the modified Terms, you must stop using the Services.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_27">21. Survival</h3>
|
||||
|
||||
<p>
|
||||
The following sections will survive the expiration or termination of these Terms: all defined terms and
|
||||
Sections 12 - 18, 21 and 22.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_28">22. Miscellaneous</h3>
|
||||
|
||||
<p>
|
||||
These Terms constitutes the entire agreement between you and the Company relating to your access to and
|
||||
use of the Services. We may assign our rights and obligations under these Terms. Under no circumstances
|
||||
may you assign your rights and obligations under these Terms, including in the event of change of control
|
||||
or by operation of law, without our prior written consent. The failure of the Company to exercise or
|
||||
enforce any right or provision of these Terms will not operate as a waiver of such right or provision. We
|
||||
will not be liable for any delay or failure to perform any obligation under these Terms where the delay or
|
||||
failure results from any cause beyond our reasonable control. Except as otherwise provided in herein, the
|
||||
agreement is intended solely for the benefit of the parties and are not intended to confer third-party
|
||||
beneficiary rights upon any other person or entity.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_28">23. Export Control and Prohibited Use</h3>
|
||||
|
||||
<p>
|
||||
Use of the Service and Software, including transferring, posting, or uploading data, software or other
|
||||
Content via the Service, may be subject to the export and import laws of the United States and other
|
||||
countries. You agree to comply with all applicable export and import laws and regulations. In particular,
|
||||
but without limitation, the Software may not be exported or re-exported (a) into any U.S. embargoed
|
||||
countries or (b) to anyone on the U.S. Treasury Department’s list of Specially Designated Nationals or the
|
||||
U.S. Department of Commerce Denied Person’s List or Entity List. By using the Software or Service, you
|
||||
represent and warrant that you are not located in any such country or on any such list. You also agree
|
||||
that you will not use the Software or Service for any purposes prohibited by United States law, including,
|
||||
without limitation, the development, design, manufacture or production of missiles, nuclear, chemical or
|
||||
biological weapons. You further agree not to upload to your Account any data or software that is: (a)
|
||||
subject to International Traffic in Arms Regulations; or (b) that cannot be exported without prior written
|
||||
government authorization, including, but not limited to, certain types of encryption software and source
|
||||
code, without first obtaining that authorization. This assurance and commitment shall survive termination
|
||||
of this Agreement.
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
export default TOSPage;
|
2
web/page/youtubetos/index.js
Normal file
2
web/page/youtubetos/index.js
Normal file
|
@ -0,0 +1,2 @@
|
|||
import PageYouTubeTOS from './view';
|
||||
export default PageYouTubeTOS;
|
619
web/page/youtubetos/view.jsx
Normal file
619
web/page/youtubetos/view.jsx
Normal file
|
@ -0,0 +1,619 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import Page from 'component/page';
|
||||
import Card from 'component/common/card';
|
||||
|
||||
const YouTubeTOSPage = () => {
|
||||
return (
|
||||
<Page>
|
||||
<Card
|
||||
title="YouTube Sync Terms of Service"
|
||||
body={
|
||||
<div>
|
||||
<p>
|
||||
<strong>Last Updated: October 2021</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
PLEASE READ THESE TERMS OF SERVICE CAREFULLY. NOTE THAT SECTION 16 CONTAINS A BINDING ARBITRATION CLAUSE
|
||||
AND CLASS ACTION WAIVER, WHICH AFFECT YOUR LEGAL RIGHTS. IF YOU DO NOT AGREE TO THESE TERMS OF SERVICE,
|
||||
DO NOT ACCESS OR USE THE SERVICES.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
By clicking to agree to these Terms of Service (<strong>“Terms"</strong>) when running/installing our
|
||||
software, publishing content to LBRY, or by otherwise accessing or using the network [via proxy or
|
||||
direct], mobile applications and online services (collectively, our <strong>“Services"</strong>) of LBRY
|
||||
Inc. (<strong>“Company," “we," or “us"</strong>), you agree to be bound by these Terms. If you do not
|
||||
agree to these Terms, you may not access or use the Services for any purpose. Please refer to our Privacy
|
||||
Policy https://odysee.com/$/privacypolicy for information about how we collect, use and disclose
|
||||
information about you.
|
||||
</p>
|
||||
|
||||
<p>You and the Company agree as follows:</p>
|
||||
|
||||
<h3 id="toc_0">1. Overview of LBRY and the Services</h3>
|
||||
<p>
|
||||
<strong>“LBRY"</strong> is a decentralized, consensus-driven protocol that enables the publication and
|
||||
viewing of information, videos, music, data and other materials (<strong>“Content"</strong>). Content is
|
||||
distributed to LBRY by publishers and is stored in fragmented shards via a distributed network of
|
||||
third-party devices (<strong>“Hosts"</strong>) that utilize LBRY. LBRY also allows publishers to bid on
|
||||
and reserve names (<strong>“Names"</strong>), which can be used as a unique identifier for Content. Please
|
||||
consult lbry.tech to learn more about the technical architecture of LBRY.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Services provide an interface for you to interact with LBRY, including to publish, access, or host
|
||||
Content through LBRY. The LBRY protocol is not owned, operated, or maintained by us. We have no
|
||||
responsibility or liability for LBRY, and the Company has no ability to control third parties’ use of
|
||||
LBRY. We are not able to delete or remove Content that has been published through LBRY and that may be
|
||||
accessible via the Services.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_1">2. Eligibility</h3>
|
||||
|
||||
<p>
|
||||
You must be at least 13 years of age to access or use our Services. If you are under 18 years of age (or
|
||||
the age of legal majority where you live), you may only access or use our Services under the supervision
|
||||
of a parent or legal guardian who agrees to be bound by these Terms. If you are a parent or legal guardian
|
||||
of a user under the age of 18 (or the age of legal majority), you will be fully responsible for the acts
|
||||
or omissions of such user in connection with our Services. If you are accessing or using our Services on
|
||||
behalf of another person or entity, you represent that you are authorized to accept these Terms on that
|
||||
person or entity’s behalf and that the person or entity agrees to be responsible to us if you or the other
|
||||
person or entity violates these Terms.
|
||||
</p>
|
||||
<h3 id="toc_2">3. Publishing Content</h3>
|
||||
|
||||
<p>This section applies if you use the Services to publish Content through LBRY. </p>
|
||||
|
||||
<p>
|
||||
a) You will make available via the Services a clear and accurate description of Content you publish, and
|
||||
provide the Content in accordance with any descriptions or representations you make available about the
|
||||
Content. You are solely responsible for resolving any disputes with users of your Content, including any
|
||||
chargebacks or refunds, and for any and all injuries, illnesses, damages, claims, liabilities and costs
|
||||
that are caused in whole or in part by you or your Content. Publishing to a blockchain is permanent. We
|
||||
cannot remove published content from the blockchain itself, although we can block content accessed via our
|
||||
app or other services on top of the blockchain.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) LBRY enables publishers to offer Content for sale to other users by setting contract terms within the
|
||||
metadata of the Content. Company, in its sole discretion, may from time to time impose limits on the
|
||||
ability to sell Content via the Services. Upon the purchase of Content, you and the purchaser of your
|
||||
Content will enter into a separate agreement, pursuant to which that purchaser agrees to pay the specified
|
||||
fees for the Content and you agree to enable access to your Content. You are solely responsible for
|
||||
providing refunds as required to comply with applicable law. You are responsible for determining what, if
|
||||
any, taxes apply to your sale of Content, including, for example, sales, use, value added, and similar
|
||||
taxes. It is also your responsibility to withhold, collect, report and remit the correct taxes to the
|
||||
appropriate tax authorities. The Company is not responsible for withholding, collecting, reporting, or
|
||||
remitting any sales, use, value added, or similar tax arising from any transaction completed via the
|
||||
Services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
c) The Company is not a party to and has no responsibility or liability with respect to any
|
||||
communications, transactions, interactions, disputes or any relations whatsoever between you and any users
|
||||
of the Content. We will not be responsible for any loss, misuse, or deletion of Content or any failure of
|
||||
any Content to be encrypted, stored or distributed.. You are solely responsible for your use of the
|
||||
Services, including for configurations that you deem appropriate to determine access to your Content by
|
||||
other users in a manner that meets your expectations. You are solely responsible for backing up any
|
||||
Content. We are not responsible for any user’s access to your Content or any user’s misuse or
|
||||
redistribution of Content.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
d) You will not use the Services to reserve a Name that infringes any patent, trademark, trade secret,
|
||||
copyright or other intellectual or proprietary right of any party.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
e) We make no representations or warranties regarding the suitability of the Services for the distribution
|
||||
and publishing of any particular types of data. By posting any Content or reserving a Name, you represent
|
||||
and warrant that you have the lawful right, including all necessary intellectual property rights, to
|
||||
distribute and reproduce such Content or use such Name for any purpose, commercial or otherwise. You will
|
||||
provide all notices to, and obtain any consents from third parties as required by applicable law in
|
||||
connection with the distribution and publishing of Content via the Services.{' '}
|
||||
</p>
|
||||
|
||||
<p>f) You will not use the Services to distribute or publish Content that:</p>
|
||||
<ul>
|
||||
<li>
|
||||
is unlawful, for example, copyrighted works, underage sexual content, revenge pornography, or any other
|
||||
content illegal under US or state law.
|
||||
</li>
|
||||
<li>
|
||||
would constitute, encourage or provide instructions for a criminal offense, violate the rights of any
|
||||
party, or that would otherwise create liability or violate any applicable local, state, national or
|
||||
international law;
|
||||
</li>
|
||||
<li>
|
||||
infringes any patent, trademark, trade secret, copyright or other intellectual or proprietary right of
|
||||
any party;
|
||||
</li>
|
||||
<li>
|
||||
impersonates any person or entity or otherwise misrepresents your affiliation with a person or entity;
|
||||
</li>
|
||||
<li>
|
||||
contains sensitive personal information, including "protected health information," as defined under
|
||||
HIPAA and its implementing rules; “cardholder data," as defined by the PCI DSS; “personal information"
|
||||
of a “child" as such terms are defined under the Children’s Online Privacy Protection Act and its
|
||||
implementing rules; or personal data revealing racial or ethnic origin, political opinions, religious or
|
||||
philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data for
|
||||
the purpose of uniquely identifying a natural person, data concerning health or data concerning a
|
||||
natural person's sex life or sexual orientation;
|
||||
</li>
|
||||
<li>
|
||||
contains viruses, corrupted data or other harmful, disruptive or destructive files; UNLESS CLEARLY
|
||||
LABELED AS SUCH
|
||||
</li>
|
||||
<li>
|
||||
in the sole judgment of the Company, is objectionable or which restricts or inhibits any other person
|
||||
from using or enjoying LBRY or the Services, or which may expose the Company or its users to any harm or
|
||||
liability of any type.
|
||||
</li>
|
||||
<li>
|
||||
USD equivalent of LBRY Credits [LBC] is determined by 3rd party markets such as Bittrex and Poloniex,
|
||||
not LBRY INC.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="toc_3">4. Accessing Content</h3>
|
||||
|
||||
<p>This section applies if you use the Services to access Content that has been stored through LBRY.</p>
|
||||
|
||||
<p>
|
||||
a) In using our Services, you may view or otherwise interact with Content provided by publishers. Your
|
||||
dealings or correspondence with any publisher of Content are solely between you and that publisher. The
|
||||
Company is not responsible or liable for any damage or loss of any sort caused, or alleged to be caused,
|
||||
by or in connection with any such dealings, including the delivery, quality, safety, legality or any other
|
||||
aspect of any Content that you may access using our Services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) In certain instances, your access to Content may be subject to sale terms set forth in the metadata of
|
||||
the Content. Company, in its sole discretion, may from time to time impose limits on the ability to
|
||||
purchase Content via the Services. Upon your access of any purchased Content, you and the publisher will
|
||||
enter into a separate agreement, pursuant to which you agree to pay the specified fees for the Content and
|
||||
the publisher agrees to make such Content available to you. THE COMPANY DOES NOT HAVE THE POWER OR
|
||||
RESPONSIBILITY TO PROVIDE ANY REFUNDS. You agree to look solely to the publisher to resolve any disputes
|
||||
regarding Content, and that publishers are solely responsible for providing any refunds.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
c) All payments for content will be made using LBC and occur on the LBRY blockchain. Purchaser is buying
|
||||
the right to access content for personal non-commercial use unless content creator provides a license for
|
||||
commercial use or remixing.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_4">5. Hosting Content</h3>
|
||||
|
||||
<p>
|
||||
This section applies to you if you host any Content via LBRY using the Services. The Services allow Hosts
|
||||
to make available storage space (<strong>“Space"</strong>) on the Host’s device for the storage of Content
|
||||
published through LBRY By making available Space on your device, you authorize any user of our Services
|
||||
to: (i) store Content published through LBRY onto your device; and (ii) access such Content from your
|
||||
device at any time.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
a) You represent and warrant that (i) you own or control your device, and have the right to provide the
|
||||
Space on your device pursuant to these Terms; and (ii) you will not breach any agreement to which you are
|
||||
a party in connection with your performance under these Terms, including any agreement you have with a
|
||||
third-party Internet service provider.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) By allowing Space to be utilized to store Content distributed through LBRY, you understand that your
|
||||
device may be impacted due to the additional constraints being placed on it by the processing of Content.
|
||||
In particular, your device may not operate as quickly as it would without making Space available for
|
||||
others to utilize.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
c) You will not: (i) reverse engineer any aspect of the Content stored on your device or do anything that
|
||||
might discover the contents or origin of the Content; (ii) attempt to bypass or circumvent measures
|
||||
employed to prevent or limit access to the Content, including attempting to defeat any encryption; or
|
||||
(iii) attempt to interfere with the storage or transmission of Content.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_5">6. General Conduct Restrictions</h3>
|
||||
|
||||
<p>
|
||||
You are solely responsible for your conduct while using the Services. You will comply with all applicable
|
||||
laws and third-party agreements to which you are bound. Further, you will not do any of the following in
|
||||
connection with the Services or any other users:{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
a) Use the Services in any manner that could interfere with, disrupt, negatively affect or inhibit other
|
||||
users from fully enjoying the Services or that could damage, disable, overburden or impair the functioning
|
||||
of the Services in any manner;
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) Impersonate or distribute Content on behalf or any person or entity or otherwise misrepresent your
|
||||
affiliation with a person or entity;
|
||||
</p>
|
||||
|
||||
<p>c) Cheat or utilize unauthorized exploits in connection with the Services; </p>
|
||||
|
||||
<p>d) Stalk, intimidate, threaten, or otherwise harass or cause discomfort to other users; </p>
|
||||
|
||||
<p>
|
||||
e) Send, distribute or post spam, unsolicited or bulk commercial electronic communications, chain letters,
|
||||
or pyramid schemes;
|
||||
</p>
|
||||
|
||||
<p>
|
||||
f) Harvest or otherwise collect information about users, including email addresses, without their consent;
|
||||
</p>
|
||||
|
||||
<p>
|
||||
g) Use the Services for any illegal or unauthorized purpose or engage in, encourage, or promote any
|
||||
illegal activity, or any activity that violates these Terms;{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
h) Use the Services to distribute Content that you do not have the lawful right to distribute or
|
||||
reproduce; or
|
||||
</p>
|
||||
|
||||
<p>
|
||||
i) Circumvent or attempt to circumvent any filtering, security measures or other features we may from time
|
||||
to time adopt to protect the Company, the Services, its users or third parties.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Company does not endorse or adopt any Content and you acknowledge and agree that the Company will have
|
||||
no responsibility for any Content, including without limitation, material that may be misleading,
|
||||
incomplete, erroneous, offensive, indecent or otherwise objectionable. Enforcement of the Content rules
|
||||
set forth in these Terms is solely at our discretion, and subject to our technical capabilities. Failure
|
||||
to enforce such rules in some instances does not constitute a waiver of our right to enforce such rules in
|
||||
other instances. In addition, these rules do not create any private right of action on the part of any
|
||||
third party or any reasonable expectation that the Services will not link to any Content that is
|
||||
prohibited by such rules.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_6">7. Limited License; Copyright and Trademark</h3>
|
||||
|
||||
<p>
|
||||
Our Services and the text, graphics, images, photographs, illustrations, trademarks, trade names, service
|
||||
marks, logos, slogans and other content contained therein (collectively, the{' '}
|
||||
<strong>“Company Marks"</strong>) are owned by Company and its licensors and are protected under both
|
||||
United States and foreign laws, and may not be copied, imitated or used, in whole or in part, without our
|
||||
or the applicable licensor’s prior written permission. You may not use any metatags or other “hidden text"
|
||||
utilizing any Company Marks without our prior written permission. Further, you may not use, frame or
|
||||
utilize framing techniques to enclose any Company Mark, the content of any text or the layout or design of
|
||||
any page or form contained on a page, on the Services without the Company’s express written consent.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_7">8. Open Source Software</h3>
|
||||
|
||||
<p>
|
||||
a) We may, from time to time, release the source code for certain of the software that supports our
|
||||
Services. You agree to be bound by, and comply with, any license agreement that applies to this open
|
||||
source software. You will not indicate that you are associated with Company in connection with any of your
|
||||
modifications or distributions of this open source software.{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) The source code we release in connection with open source software is not part of the Services, and
|
||||
your use of that source code without interacting with our Services is not subject to these Terms. For
|
||||
clarity, though, when we host any software and enable you to access and use such software as a service
|
||||
through our Services, then these Terms will apply to such access and use.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_8">9. YouTube Creator Program Terms</h3>
|
||||
|
||||
<p>
|
||||
a) If you participate in the YouTube Creator Program, you also agree to{' '}
|
||||
<a href="https://www.youtube.com/t/terms" rel="noopener">
|
||||
YouTube's Terms of Service (https://www.youtube.com/t/terms)
|
||||
</a>{' '}
|
||||
and{' '}
|
||||
<a href="https://www.google.com/policies/privacy" rel="noopener">
|
||||
Google's Privacy Policy (https://www.google.com/policies/privacy).
|
||||
</a>{' '}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
b) To revoke LBRY's access to your YouTube account or manage your security preferences, please{' '}
|
||||
<a href="https://security.google.com/settings/security/permissions" rel="noopener">
|
||||
refer to your Google Security and Permissions Page
|
||||
(https://security.google.com/settings/security/permissions).
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_9">10. Feedback</h3>
|
||||
|
||||
<p>
|
||||
Any questions, comments, suggestions, ideas, original or creative materials or other information you
|
||||
submit about the Company or our products or Services (collectively, <strong>“Feedback"</strong>), is
|
||||
non-confidential and will become the sole property of the Company. We will own exclusive rights,
|
||||
including, without limitation, all intellectual property rights, in and to Feedback and will be entitled
|
||||
to the unrestricted use and dissemination of Feedback for any purpose, commercial or otherwise, without
|
||||
acknowledgment or compensation to you.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_10">11. Copyright Complaints</h3>
|
||||
|
||||
<p>
|
||||
We have a policy of limiting access to our Services and terminating the accounts of users who infringe the
|
||||
intellectual property rights of others. If you believe that anything on our Services infringes any
|
||||
copyright that you own or control, you may notify the Company’s Designated Agent as follows:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Designated Agent: LBRY INC Address: 99 Hanover St, Manchester, NH 03101 Telephone Number: 907-318-5956 Fax
|
||||
Number: 801-327-6808
|
||||
</p>
|
||||
|
||||
<p>E-Mail Address: hello@odysee.com</p>
|
||||
|
||||
<p>
|
||||
Please see 17 U.S.C. §512(c)(3) for the requirements of a proper notification. Also, please note that if
|
||||
you knowingly misrepresent that any activity or material on our Services is infringing, you may be liable
|
||||
to the Company for certain costs and damages.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_11">12. Indemnification</h3>
|
||||
|
||||
<p>
|
||||
To the fullest extent permitted by applicable law, you will indemnify, defend, and hold harmless the
|
||||
Company and our officers, directors, agents, partners and employees (individually and collectively, the{' '}
|
||||
<strong>“Company Parties"</strong>) from and against any loss, liability, claim, demand, damages, expenses
|
||||
or costs (including attorney’s fees) (<strong>“Claims"</strong>) arising out of or related to (a) your
|
||||
access to or use of our Services; (b) your Content or any Name that you have reserved; (c) your violation
|
||||
of these Terms; or (d) your violation, misappropriation or infringement of any rights of another
|
||||
(including intellectual property rights or privacy rights). You agree to promptly notify Company Parties
|
||||
of any third party Claims, cooperate with Company Parties in defending such Claims and pay all fees, costs
|
||||
and expenses associated with defending such Claims (including, but not limited to, attorneys' fees). You
|
||||
also agree that the Company Parties will have control of the defense or settlement of any third party
|
||||
Claims. This indemnity is in addition to, and not in lieu of, any other indemnities set forth in a written
|
||||
agreement between you and the Company or the other Company Parties.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_12">13. Disclaimers</h3>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
Your use of our Services is at your sole risk. Our Services are provided “as is" and “as available"
|
||||
without warranties of any kind, either express or implied, including, but not limited to, implied
|
||||
warranties of merchantability, fitness for a particular purpose, title, and non-infringement. In
|
||||
addition, the Company does not represent or warrant that our Services are accurate, complete, reliable,
|
||||
current or error-free. While the Company attempts to make your access to and use of our Services safe,
|
||||
we cannot and do not represent or warrant that our Services or servers are free of viruses or other
|
||||
harmful components. You assume the entire risk as to the quality and performance of the Services.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_13">14. Limitation of Liability</h3>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
The Company and the other Company Parties will not be liable to you under any theory of
|
||||
liability—whether based in contract, tort, negligence, strict liability, warranty, or otherwise—for any
|
||||
indirect, consequential, exemplary, incidental, special or punitive damages or lost profits, even if the
|
||||
Company or the other Company Parties have been advised of the possibility of such damages.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
The total liability of the Company and the other Company Parties, for any claim arising out of or
|
||||
relating to these Terms or our Services, regardless of the form of the action, is limited to the greater
|
||||
of any amount paid, if any, by you to access or use our Services or $100 USD.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
The limitations set forth in this section will not limit or exclude liability for the gross negligence,
|
||||
fraud or intentional misconduct of the Company or other Company Parties or for any other matters in
|
||||
which liability cannot be excluded or limited under applicable law. Additionally, some jurisdictions do
|
||||
not allow the exclusion or limitation of incidental or consequential damages, so the above limitations
|
||||
or exclusions may not apply to you.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_14">15. Release</h3>
|
||||
|
||||
<p>
|
||||
To the fullest extent permitted by applicable law, you release the Company and the other Company Parties
|
||||
from responsibility, liability, claims, demands and damages (actual and consequential) of every kind and
|
||||
nature, known and unknown (including, but not limited to, claims of negligence), arising out of or related
|
||||
to disputes between users and the acts or omissions of third parties.{' '}
|
||||
<strong>
|
||||
You expressly waive any rights you may have under California Civil Code § 1542 as well as any other
|
||||
statute or common law principles that would otherwise limit the coverage of this release to include only
|
||||
those claims which you may know or suspect to exist in your favor at the time of agreeing to this
|
||||
release.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_15">16. Dispute Resolution; Arbitration</h3>
|
||||
|
||||
<p>
|
||||
<strong>
|
||||
Please read the following section carefully because it requires you to arbitrate certain disputes and
|
||||
claims with the Company and limits the manner in which you can seek relief from us.
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<h3 id="toc_16">16.1. Binding Arbitration</h3>
|
||||
|
||||
<p>
|
||||
Except for any disputes, claims, suits, actions, causes of action, demands or proceedings (collectively,{' '}
|
||||
<strong>“Disputes"</strong>) in which either party seeks to bring an individual action in small claims
|
||||
court or seeks injunctive or other equitable relief for the alleged unlawful use of intellectual property,
|
||||
including, without limitation, copyrights, trademarks, trade names, logos, trade secrets or patents, you
|
||||
and the Company (a) waive your and the Company’s respective rights to have any and all Disputes arising
|
||||
from or related to these Terms or the Services resolved in a court, and (b) waive your and the Company’s
|
||||
respective rights to a jury trial. Instead, you and the Company will arbitrate Disputes through binding
|
||||
arbitration (which is the referral of a Dispute to one or more persons charged with reviewing the Dispute
|
||||
and making a final and binding determination to resolve it instead of having the Dispute decided by a
|
||||
judge or jury in court).
|
||||
</p>
|
||||
|
||||
<h3 id="toc_17">16.2. No Class Arbitrations, Class Actions or Representative Actions</h3>
|
||||
|
||||
<p>
|
||||
Any Dispute arising out of or related to these Terms or the Services is personal to you and the Company
|
||||
and will be resolved solely through individual arbitration and will not be brought as a class arbitration,
|
||||
class action or any other type of representative proceeding. There will be no class arbitration or
|
||||
arbitration in which an individual attempts to resolve a Dispute as a representative of another individual
|
||||
or group of individuals. Further, a Dispute cannot be brought as a class or other type of representative
|
||||
action, whether within or outside of arbitration, or on behalf of any other individual or group of
|
||||
individuals.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_18">16.3. Federal Arbitration Act</h3>
|
||||
|
||||
<p>
|
||||
These Terms affect interstate commerce and the enforceability of this Section 16 will be both
|
||||
substantively and procedurally governed by and construed and enforced in accordance with the Federal
|
||||
Arbitration Act, 9 U.S.C. § 1 et seq. (the <strong>“FAA"</strong>), to the maximum extent permitted by
|
||||
applicable law.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_19">16.4. Notice; Informal Dispute Resolution</h3>
|
||||
|
||||
<p>
|
||||
Each party will notify the other party in writing of any arbitrable or small claims Dispute within thirty
|
||||
(30) days of the date it arises, so that the parties can attempt in good faith to resolve the Dispute
|
||||
informally. Notice to the Company will be sent by e-mail to the Company at hello@odysee.com. Notice to you
|
||||
will be by email to the then-current email address in your Account. Your notice must include (a) your
|
||||
name, postal address, email address and telephone number, (b) a description in reasonable detail of the
|
||||
nature or basis of the Dispute, and (c) the specific relief that you are seeking. If you and the Company
|
||||
cannot agree how to resolve the Dispute within thirty (30) days after the date notice is received by the
|
||||
applicable party, then either you or the Company may, as appropriate and in accordance with this Section
|
||||
16, commence an arbitration proceeding or, to the extent specifically provided for in Section 17.1, file a
|
||||
claim in court.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_20">16.5. Process</h3>
|
||||
|
||||
<p>
|
||||
Any arbitration will occur in New Castle County, Delaware. Arbitration will be conducted confidentially by
|
||||
a single arbitrator in accordance with the rules of the Judicial Arbitration and Mediation Services (
|
||||
<strong>“JAMS"</strong>), which are hereby incorporated by reference. The state and federal courts located
|
||||
in New Castle County, Delaware will have exclusive jurisdiction over any appeals and the enforcement of an
|
||||
arbitration award. You may also litigate a Dispute in the small claims court located in the county where
|
||||
you reside if the Dispute meets the requirements to be heard in small claims court.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_21">16.6. Authority of Arbitrator</h3>
|
||||
|
||||
<p>
|
||||
As limited by the FAA, these Terms and the applicable JAMS rules, the arbitrator will have (a) the
|
||||
exclusive authority and jurisdiction to make all procedural and substantive decisions regarding a Dispute,
|
||||
including the determination of whether a Dispute is arbitrable, and (b) the authority to grant any remedy
|
||||
that would otherwise be available in court; provided, however, that the arbitrator does not have the
|
||||
authority to conduct a class arbitration or a representative action, which is prohibited by these Terms.
|
||||
The arbitrator may only conduct an individual arbitration and may not consolidate more than one
|
||||
individual’s claims, preside over any type of class or representative proceeding or preside over any
|
||||
proceeding involving more than one individual.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_22">16.7. Rules of JAMS</h3>
|
||||
|
||||
<p>
|
||||
The rules of JAMS and additional information about JAMS are available on the{' '}
|
||||
<a href="http://www.jamsadr.com/" rel="noopener">
|
||||
JAMS website.
|
||||
</a>{' '}
|
||||
By agreeing to be bound by these Terms, you either (a) acknowledge and agree that you have read and
|
||||
understand the rules of JAMS, or (b) waive your opportunity to read the rules of JAMS and any claim that
|
||||
the rules of JAMS are unfair or should not apply for any reason.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_23">17. Governing Law and Venue</h3>
|
||||
|
||||
<p>
|
||||
These Terms and your access to and use of the Services will be governed by and construed and enforced in
|
||||
accordance with the laws of the State of Delaware, without regard to conflict of law rules or principles
|
||||
(whether of the State of Delaware or any other jurisdiction) that would cause the application of the laws
|
||||
of any other jurisdiction. Any Dispute between the parties arising out of or relating to these Terms that
|
||||
is not subject to arbitration or cannot be heard in small claims court will be resolved in the state or
|
||||
federal courts of the State of Delaware and the United States, respectively, sitting in New Castle County,
|
||||
Delaware.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_24">18. Severability</h3>
|
||||
|
||||
<p>
|
||||
If any term, clause or provision of these Terms is held invalid or unenforceable, then that term, clause
|
||||
or provision will be severable from these Terms and will not affect the validity or enforceability of any
|
||||
remaining part of that term, clause or provision, or any other term, clause or provision of these Terms.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_25">19. Termination or Suspension</h3>
|
||||
|
||||
<p>
|
||||
Notwithstanding anything contained in these Terms, we reserve the right, without notice and in our sole
|
||||
discretion, to terminate this agreement or suspend your right to access the Services. You may terminate
|
||||
this agreement without notice by discontinuing use of the Services. All rights and licenses granted to you
|
||||
under these Terms will immediately be revoked upon our termination of the agreement or our suspension of
|
||||
your access to the Services. We make no representations that termination or suspension of the Services
|
||||
will prevent the spread or distribution of published Content through LBRY.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_26">20. Amendment</h3>
|
||||
|
||||
<p>
|
||||
We reserve the right to change these Terms from time to time upon notice to you. If we make changes to
|
||||
these Terms, we will provide notice of such changes by posting the revised Terms to the Services and
|
||||
updating the “Last Updated" date at the top of these Terms. In some cases, we may provide additional
|
||||
notice to you, such as via our Services or to an email address associated with your Account. Your
|
||||
continued use of the Services following our provision of any such notice will confirm your acceptance of
|
||||
the revised Terms. If you do not agree to the modified Terms, you must stop using the Services.{' '}
|
||||
</p>
|
||||
|
||||
<h3 id="toc_27">21. Survival</h3>
|
||||
|
||||
<p>
|
||||
The following sections will survive the expiration or termination of these Terms: all defined terms and
|
||||
Sections 12 - 18, 21 and 22.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_28">22. Miscellaneous</h3>
|
||||
|
||||
<p>
|
||||
These Terms constitutes the entire agreement between you and the Company relating to your access to and
|
||||
use of the Services. We may assign our rights and obligations under these Terms. Under no circumstances
|
||||
may you assign your rights and obligations under these Terms, including in the event of change of control
|
||||
or by operation of law, without our prior written consent. The failure of the Company to exercise or
|
||||
enforce any right or provision of these Terms will not operate as a waiver of such right or provision. We
|
||||
will not be liable for any delay or failure to perform any obligation under these Terms where the delay or
|
||||
failure results from any cause beyond our reasonable control. Except as otherwise provided in herein, the
|
||||
agreement is intended solely for the benefit of the parties and are not intended to confer third-party
|
||||
beneficiary rights upon any other person or entity.
|
||||
</p>
|
||||
|
||||
<h3 id="toc_28">23. Export Control and Prohibited Use</h3>
|
||||
|
||||
<p>
|
||||
Use of the Service and Software, including transferring, posting, or uploading data, software or other
|
||||
Content via the Service, may be subject to the export and import laws of the United States and other
|
||||
countries. You agree to comply with all applicable export and import laws and regulations. In particular,
|
||||
but without limitation, the Software may not be exported or re-exported (a) into any U.S. embargoed
|
||||
countries or (b) to anyone on the U.S. Treasury Department’s list of Specially Designated Nationals or the
|
||||
U.S. Department of Commerce Denied Person’s List or Entity List. By using the Software or Service, you
|
||||
represent and warrant that you are not located in any such country or on any such list. You also agree
|
||||
that you will not use the Software or Service for any purposes prohibited by United States law, including,
|
||||
without limitation, the development, design, manufacture or production of missiles, nuclear, chemical or
|
||||
biological weapons. You further agree not to upload to your Account any data or software that is: (a)
|
||||
subject to International Traffic in Arms Regulations; or (b) that cannot be exported without prior written
|
||||
government authorization, including, but not limited to, certain types of encryption software and source
|
||||
code, without first obtaining that authorization. This assurance and commitment shall survive termination
|
||||
of this Agreement.
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
export default YouTubeTOSPage;
|
|
@ -10,6 +10,8 @@ const {
|
|||
SITE_NAME,
|
||||
FAVICON,
|
||||
LBRY_WEB_API,
|
||||
THUMBNAIL_CDN_URL,
|
||||
THUMBNAIL_QUALITY,
|
||||
} = require('../../config.js');
|
||||
|
||||
const { Lbry } = require('lbry-redux');
|
||||
|
@ -27,6 +29,31 @@ const SDK_API_PATH = `${LBRY_WEB_API}/api/v1`;
|
|||
const PROXY_URL = `${SDK_API_PATH}/proxy`;
|
||||
Lbry.setDaemonConnectionString(PROXY_URL);
|
||||
|
||||
function getThumbnailCdnUrl(url) {
|
||||
if (!THUMBNAIL_CDN_URL || !url) {
|
||||
return url;
|
||||
}
|
||||
|
||||
const width = 630;
|
||||
const height = 1200;
|
||||
|
||||
if (url && url.includes('https://twitter-card')) {
|
||||
return url;
|
||||
}
|
||||
|
||||
if (url && url.includes('https://spee.ch') && !url.includes('?quality=')) {
|
||||
return `${url}?quality=${THUMBNAIL_QUALITY}&height=${height}&width=${width}`;
|
||||
}
|
||||
|
||||
if (url && url.includes('https://spee.ch')) {
|
||||
return url;
|
||||
}
|
||||
|
||||
if (url) {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
function insertToHead(fullHtml, htmlToInsert) {
|
||||
const beginStr = '<!-- VARIABLE_HEAD_BEGIN -->';
|
||||
const finalStr = '<!-- VARIABLE_HEAD_END -->';
|
||||
|
@ -143,7 +170,7 @@ function buildClaimOgMetadata(uri, claim, overrideOptions = {}) {
|
|||
const media = value && (value.video || value.audio || value.image);
|
||||
const source = value && value.source;
|
||||
const channel = signing_channel && signing_channel.name;
|
||||
const thumbnail = value && value.thumbnail && value.thumbnail.url;
|
||||
let thumbnail = value && value.thumbnail && value.thumbnail.url && getThumbnailCdnUrl(value.thumbnail.url);
|
||||
const mediaType = source && source.media_type;
|
||||
const mediaDuration = media && media.duration;
|
||||
const claimTitle = escapeHtmlProperty((value && value.title) || claimName);
|
||||
|
@ -230,7 +257,7 @@ function buildGoogleVideoMetadata(uri, claim) {
|
|||
const { meta, value } = claim;
|
||||
const media = value && value.video;
|
||||
const source = value && value.source;
|
||||
const thumbnail = value && value.thumbnail && value.thumbnail.url;
|
||||
let thumbnail = value && value.thumbnail && value.thumbnail.url && getThumbnailCdnUrl(value.thumbnail.url);
|
||||
const mediaType = source && source.media_type;
|
||||
const mediaDuration = media && media.duration;
|
||||
const claimTitle = escapeHtmlProperty((value && value.title) || claimName);
|
||||
|
|
|
@ -10173,9 +10173,9 @@ lazy-val@^1.0.4:
|
|||
yargs "^13.2.2"
|
||||
zstd-codec "^0.1.1"
|
||||
|
||||
lbry-redux@lbryio/lbry-redux#32b578707116d45f5b51b7ab523d200e75668676:
|
||||
lbry-redux@lbryio/lbry-redux#0f930c4a7bfc7f164e6b3c6044050c1bc73f6ab8:
|
||||
version "0.0.1"
|
||||
resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/32b578707116d45f5b51b7ab523d200e75668676"
|
||||
resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/0f930c4a7bfc7f164e6b3c6044050c1bc73f6ab8"
|
||||
dependencies:
|
||||
"@ungap/from-entries" "^0.2.1"
|
||||
proxy-polyfill "0.1.6"
|
||||
|
|
Loading…
Reference in a new issue