v1.7.2/release

This commit is contained in:
2020-09-09 14:56:39 -04:00
parent eaf7663f0c
commit 7d016f1423
14 changed files with 951 additions and 346 deletions
+618 -299
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -65,7 +65,7 @@
"dotenv": "4.0.0", "dotenv": "4.0.0",
"dotenv-expand": "4.2.0", "dotenv-expand": "4.2.0",
"file-loader": "4.2.0", "file-loader": "4.2.0",
"firebase": "^7.14.0", "firebase": "^7.19.1",
"fs-extra": "3.0.1", "fs-extra": "3.0.1",
"html-webpack-plugin": "^4.0.0-beta.8", "html-webpack-plugin": "^4.0.0-beta.8",
"jest": "20.0.4", "jest": "20.0.4",
+1
View File
@@ -12,6 +12,7 @@ COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8" />
<style> <style>
html { html {
height: fit-content; height: fit-content;
+26 -7
View File
@@ -10,8 +10,11 @@ CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE
COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION. COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
************************************************************************/ ************************************************************************/
/* global chrome */ /* global chrome */
/* global browswer */
/* global firebase */ /* global firebase */
let CHROME_OR_BROWSER = chrome || browser;
const APP_VERSION = '1.7.2'; const APP_VERSION = '1.7.2';
const APP_VERSION_STRING = APP_VERSION.replace(/\./g, ''); const APP_VERSION_STRING = APP_VERSION.replace(/\./g, '');
@@ -71,19 +74,19 @@ const sendAuth = async (sendResponse) => {
sendResponse(firebase.auth().currentUser); sendResponse(firebase.auth().currentUser);
}; };
chrome.runtime.onInstalled.addListener((details) => { CHROME_OR_BROWSER.runtime.onInstalled.addListener((details) => {
if (details.reason) { if (details.reason) {
if (details.reason === 'install') { if (details.reason === 'install') {
if (window.localStorage.getItem('watchPartyVersion')) { if (window.localStorage.getItem('watchPartyVersion')) {
if (window.localStorage.getItem('watchPartyVersion') !== APP_VERSION) { if (window.localStorage.getItem('watchPartyVersion') !== APP_VERSION) {
chrome.tabs.create({ CHROME_OR_BROWSER.tabs.create({
url: `http://www.chromewatchparty.com/changes/v${APP_VERSION}`, url: `http://www.chromewatchparty.com/changes/v${APP_VERSION}`,
active: true, active: true,
}); });
window.localStorage.setItem('watchPartyVersion', APP_VERSION); window.localStorage.setItem('watchPartyVersion', APP_VERSION);
} }
} else { } else {
chrome.tabs.create({ CHROME_OR_BROWSER.tabs.create({
url: 'https://www.chromewatchparty.com/welcome', url: 'https://www.chromewatchparty.com/welcome',
active: true, active: true,
}); });
@@ -92,14 +95,14 @@ chrome.runtime.onInstalled.addListener((details) => {
} else if (details.reason === 'update') { } else if (details.reason === 'update') {
if (window.localStorage.getItem('watchPartyVersion')) { if (window.localStorage.getItem('watchPartyVersion')) {
if (window.localStorage.getItem('watchPartyVersion') !== APP_VERSION) { if (window.localStorage.getItem('watchPartyVersion') !== APP_VERSION) {
chrome.tabs.create({ CHROME_OR_BROWSER.tabs.create({
url: `http://www.chromewatchparty.com/changes/v${APP_VERSION}`, url: `http://www.chromewatchparty.com/changes/v${APP_VERSION}`,
active: true, active: true,
}); });
window.localStorage.setItem('watchPartyVersion', APP_VERSION); window.localStorage.setItem('watchPartyVersion', APP_VERSION);
} }
} else { } else {
chrome.tabs.create({ CHROME_OR_BROWSER.tabs.create({
url: `http://www.chromewatchparty.com/changes/v${APP_VERSION}`, url: `http://www.chromewatchparty.com/changes/v${APP_VERSION}`,
active: true, active: true,
}); });
@@ -109,7 +112,7 @@ chrome.runtime.onInstalled.addListener((details) => {
} }
}); });
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { CHROME_OR_BROWSER.runtime.onMessage.addListener((request, sender, sendResponse) => {
const { type } = request; const { type } = request;
switch (type) { switch (type) {
case 'API_CALL': case 'API_CALL':
@@ -152,10 +155,11 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
return true; return true;
}); });
chrome.runtime.onConnect.addListener((port) => { CHROME_OR_BROWSER.runtime.onConnect.addListener((port) => {
port.onDisconnect.addListener(() => { port.onDisconnect.addListener(() => {
port.roomListener && port.roomListener(); port.roomListener && port.roomListener();
port.userListener && port.userListener(); port.userListener && port.userListener();
port.statusListener && port.statusListener();
port.messageListener && port.messageListener(); port.messageListener && port.messageListener();
}); });
port.onMessage.addListener((request) => { port.onMessage.addListener((request) => {
@@ -233,6 +237,21 @@ chrome.runtime.onConnect.addListener((port) => {
]) ])
); );
} }
} else if (type === 'STATUS') {
port.statusListener = firebase
.firestore()
.collection('server')
.doc('status')
.onSnapshot(
(statusSnap) => {
port.postMessage({
status: statusSnap.data(),
});
},
(err) => {
port.postMessage({ isError: true, ...err });
}
);
} }
}); });
}); });
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -4
View File
@@ -12,10 +12,7 @@ COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta <meta charset="utf-8" />
http-equiv="Content-Security-Policy"
content="default-src *; style-src 'self' https://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'"
/>
<style> <style>
:root { :root {
--mdc-theme-primary: #beff94 !important; --mdc-theme-primary: #beff94 !important;
+9 -6
View File
@@ -10,6 +10,9 @@ CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE
COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION. COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
************************************************************************/ ************************************************************************/
/*global chrome*/ /*global chrome*/
/*global browser*/
let CHROME_OR_BROWSER = chrome || browser;
const API_HOST = 'https://api.chromewatchparty.com'; const API_HOST = 'https://api.chromewatchparty.com';
@@ -62,7 +65,7 @@ export const getPlayerSource = () => {
export const getShowWPButton = () => export const getShowWPButton = () =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
chrome.runtime.sendMessage( CHROME_OR_BROWSER.runtime.sendMessage(
{ {
type: 'IS_HIDDEN', type: 'IS_HIDDEN',
}, },
@@ -74,7 +77,7 @@ export const getShowWPButton = () =>
export const getTutorialStatus = () => export const getTutorialStatus = () =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
chrome.runtime.sendMessage( CHROME_OR_BROWSER.runtime.sendMessage(
{ {
type: 'GET_TUTORIAL', type: 'GET_TUTORIAL',
}, },
@@ -86,7 +89,7 @@ export const getTutorialStatus = () =>
export const setTutorialStatus = (status) => export const setTutorialStatus = (status) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
chrome.runtime.sendMessage( CHROME_OR_BROWSER.runtime.sendMessage(
{ {
type: 'SET_TUTORIAL', type: 'SET_TUTORIAL',
status, status,
@@ -126,7 +129,7 @@ export const scrollThread = () => {
export const getUserUid = async () => export const getUserUid = async () =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
chrome.runtime.sendMessage( CHROME_OR_BROWSER.runtime.sendMessage(
{ {
type: 'GET_AUTH', type: 'GET_AUTH',
}, },
@@ -141,7 +144,7 @@ export const getUserUid = async () =>
export const fetcher = async ({ endpoint, method, ...args }) => { export const fetcher = async ({ endpoint, method, ...args }) => {
const url = `${API_HOST}/${endpoint}`; const url = `${API_HOST}/${endpoint}`;
return new Promise((resolve, reject) => return new Promise((resolve, reject) =>
chrome.runtime.sendMessage( CHROME_OR_BROWSER.runtime.sendMessage(
{ {
type: 'API_CALL', type: 'API_CALL',
url, url,
@@ -158,7 +161,7 @@ export const fetcher = async ({ endpoint, method, ...args }) => {
export const webhookFetcher = async ({ endpoint, ...args }) => { export const webhookFetcher = async ({ endpoint, ...args }) => {
return new Promise((resolve, reject) => return new Promise((resolve, reject) =>
chrome.runtime.sendMessage( CHROME_OR_BROWSER.runtime.sendMessage(
{ {
type: 'API_CALL', type: 'API_CALL',
url: endpoint, url: endpoint,
+13 -9
View File
@@ -9,13 +9,14 @@ ALL CONTENT ON WATCH PARTY'S WEBSITE OR IN WATCH PARTY'S CHROME EXTENSION APP, U
CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE
COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION. COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
************************************************************************/ ************************************************************************/
/*global chrome*/
/*global browser*/
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import Router from 'route-lite'; import Router from 'route-lite';
import { Fab, createMuiTheme, ThemeProvider, Snackbar, Tooltip } from '@material-ui/core'; import { Fab, createMuiTheme, ThemeProvider, Snackbar, Tooltip } from '@material-ui/core';
import Create from './Create'; import Create from './Create';
import Loading from './Loading'; import Loading from './Loading';
import firebase from 'firebase/app';
import 'firebase/firestore';
import Inactive from './Inactive'; import Inactive from './Inactive';
import { import {
getUserUid, getUserUid,
@@ -73,6 +74,9 @@ const startResize = (ev) => {
document.documentElement.addEventListener('mouseup', stopResize, false); document.documentElement.addEventListener('mouseup', stopResize, false);
}; };
let CHROME_OR_BROWSER = chrome || browser;
let port;
const App = () => { const App = () => {
const closedNotification = { open: false, message: '' }; const closedNotification = { open: false, message: '' };
@@ -87,12 +91,12 @@ const App = () => {
useEffect(() => { useEffect(() => {
setLoading(true); setLoading(true);
getUserUid(); getUserUid();
firebase port = CHROME_OR_BROWSER.runtime.connect({ name: `WATCH_PARTY_STATUS` });
.firestore() port.postMessage({
.collection('server') type: 'STATUS',
.doc('status') });
.onSnapshot((statusSnap) => { port.onMessage.addListener((response) => {
setStatus(statusSnap.data()); setStatus(response.status);
setLoading(false); setLoading(false);
}); });
getShowWPButton().then((showWPButton) => { getShowWPButton().then((showWPButton) => {
@@ -185,7 +189,7 @@ const App = () => {
status={ status={
status[APP_VERSION_STRING] status[APP_VERSION_STRING]
? status[APP_VERSION_STRING].message ? status[APP_VERSION_STRING].message
: "Uh oh, can't connect to server. Trying again..." : 'Connecting to server...'
} }
/> />
)} )}
+4 -2
View File
@@ -717,9 +717,11 @@ export default class VideoListener {
case PLAYER_SOURCE.FUNIMATION: case PLAYER_SOURCE.FUNIMATION:
const funimationInject = `var sendToWatchPartyApp=function(pS,pT){var customWatchPartyEvent=new CustomEvent('watchParty',{detail:{watchPartyDirection:'TO_APP',type:'WATCH_PARTY_PLAYER_UPDATE',status:pS,time:pT}});window.dispatchEvent(customWatchPartyEvent)},watchPartyGetTimeAndSend=function(pS){const playerIframe=document.querySelector('${ const funimationInject = `var sendToWatchPartyApp=function(pS,pT){var customWatchPartyEvent=new CustomEvent('watchParty',{detail:{watchPartyDirection:'TO_APP',type:'WATCH_PARTY_PLAYER_UPDATE',status:pS,time:pT}});window.dispatchEvent(customWatchPartyEvent)},watchPartyGetTimeAndSend=function(pS){const playerIframe=document.querySelector('${
this.selectors[PLAYER_SOURCE.FUNIMATION] this.selectors[PLAYER_SOURCE.FUNIMATION]
}');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player){sendToWatchPartyApp(pS,player.currentTime)}}},watchPartySendPlaying=function(){watchPartyGetTimeAndSend('PLAYING')},watchPartySendPaused=function(){watchPartyGetTimeAndSend('PAUSED')},watchPartyInteraction=function(e){const data=JSON.parse(e.data);const playerIframe=document.querySelector('${ }');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player){sendToWatchPartyApp(pS,player.currentTime)}}},watchPartySendPlaying=function(){watchPartyGetTimeAndSend('PLAYING')},watchPartySendPaused=function(){watchPartyGetTimeAndSend('PAUSED')},watchPartyAddListeners=function(){const playerIframe=document.querySelector('${
this.selectors[PLAYER_SOURCE.FUNIMATION] this.selectors[PLAYER_SOURCE.FUNIMATION]
}');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player){if(data.watchPartyDirection==='TO_SCRIPT'){if(data.type==='WATCH_PARTY_ADD_LISTENERS'){player.addEventListener('playing',watchPartySendPlaying);player.addEventListener('pause',watchPartySendPaused)}else if(data.type==='WATCH_PARTY_SEEK'){const playerNode=playerIframe.contentWindow.document.querySelector('#brightcove-player');if(playerNode){playerNode.player.currentTime(data.time)}}else if(data.type==='WATCH_PARTY_STATUS'){if(data.status==='PAUSED')player.pause();if(data.status==='PLAYING')player.play()}}}}};window.addEventListener("message",watchPartyInteraction);`; }');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player && player.currentTime > 0 && player.paused === false && player.ended === false){player.addEventListener('playing',watchPartySendPlaying);player.addEventListener('pause',watchPartySendPaused);clearInterval(watchPartyAddListeners)}}},watchPartyInteraction=function(e){const data=JSON.parse(e.data);const playerIframe=document.querySelector('${
this.selectors[PLAYER_SOURCE.FUNIMATION]
}');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player){if(data.watchPartyDirection==='TO_SCRIPT'){if(data.type==='WATCH_PARTY_ADD_LISTENERS'){player.addEventListener('playing',watchPartySendPlaying);player.addEventListener('pause',watchPartySendPaused)}else if(data.type==='WATCH_PARTY_SEEK'){const playerNode=playerIframe.contentWindow.document.querySelector('#brightcove-player');if(playerNode){playerNode.player.currentTime(data.time)}}else if(data.type==='WATCH_PARTY_STATUS'){if(data.status==='PAUSED')player.pause();if(data.status==='PLAYING')player.play()}}}else{setInterval(watchPartyAddListeners,1000)}}else{setInterval(watchPartyAddListeners,1000)}};window.addEventListener("message",watchPartyInteraction);`;
const funimationInjectScript = document.createElement('script'); const funimationInjectScript = document.createElement('script');
funimationInjectScript.text = funimationInject; funimationInjectScript.text = funimationInject;
document.head.appendChild(funimationInjectScript); document.head.appendChild(funimationInjectScript);
+2 -16
View File
@@ -9,26 +9,12 @@ ALL CONTENT ON WATCH PARTY'S WEBSITE OR IN WATCH PARTY'S CHROME EXTENSION APP, U
CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE
COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION. COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
************************************************************************/ ************************************************************************/
import App from './App';
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import firebase from 'firebase/app'; import { PLAYER_SOURCE, getPlayerSource } from './Api';
import App from './App';
import './index.css'; import './index.css';
import 'react-virtualized/styles.css'; import 'react-virtualized/styles.css';
import { PLAYER_SOURCE, getPlayerSource } from './Api';
const firebaseConfig = {
apiKey: 'AIzaSyCJLuYpzXLDRmu2ttzFuSGmYcpFxqToWFU',
authDomain: 'watch-party-crx.firebaseapp.com',
databaseURL: 'https://watch-party-crx.firebaseio.com',
projectId: 'watch-party-crx',
storageBucket: 'watch-party-crx.appspot.com',
messagingSenderId: '712242707190',
appId: '1:712242707190:web:65fa7f772e30da364b0ad7',
measurementId: 'G-EZS4PEVG4T',
};
firebase.initializeApp(firebaseConfig);
const PartyWrapper = document.createElement('div'); const PartyWrapper = document.createElement('div');
PartyWrapper.id = 'party_wrapper'; PartyWrapper.id = 'party_wrapper';
+1
View File
@@ -187,6 +187,7 @@ COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
<a href="/changes//v1.6.7/" data-font="sans-bold" class="support-card">v1.6.7</a> <a href="/changes//v1.6.7/" data-font="sans-bold" class="support-card">v1.6.7</a>
<a href="/changes//v1.7.0/" data-font="sans-bold" class="support-card">v1.7.0</a> <a href="/changes//v1.7.0/" data-font="sans-bold" class="support-card">v1.7.0</a>
<a href="/changes//v1.7.1/" data-font="sans-bold" class="support-card">v1.7.1</a> <a href="/changes//v1.7.1/" data-font="sans-bold" class="support-card">v1.7.1</a>
<a href="/changes//v1.7.2/" data-font="sans-bold" class="support-card">v1.7.2</a>
</div> </div>
<footer> <footer>
+270
View File
@@ -0,0 +1,270 @@
<!DOCTYPE html>
<!-----------------------------------------------------------------------
Copyright (C) Ayushya Amitabh - All Rights Reserved
Unauthorized copying of this file, via any medium is strictly prohibited
Proprietary and confidential
Written by Ayushya Amitabh <admin@chromewatchparty.com>, 2020
https://www.chromewatchparty.com/copyright
=========================================================================
ALL CONTENT ON WATCH PARTY'S WEBSITE OR IN WATCH PARTY'S CHROME EXTENSION APP, UNLESS OTHERWISE
CITED ARE THE SOLE INTELLECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE
COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
------------------------------------------------------------------------->
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/icons/favicon.png" />
<link rel="manifest" href="/manifest.json" />
<link rel="preload" as="font" href="/fonts/glacialindifference-bold-webfont.woff" crossorigin />
<link
rel="preload"
as="font"
href="/fonts/glacialindifference-bold-webfont.woff2"
crossorigin
/>
<link
rel="preload"
as="font"
href="/fonts/glacialindifference-italic-webfont.woff"
crossorigin
/>
<link
rel="preload"
as="font"
href="/fonts/glacialindifference-italic-webfont.woff2"
crossorigin
/>
<link
rel="preload"
as="font"
href="/fonts/glacialindifference-regular-webfont.woff"
crossorigin
/>
<link
rel="preload"
as="font"
href="/fonts/glacialindifference-regular-webfont.woff2"
crossorigin
/>
<style>
@import '/styles/variables.css';
@import '/styles/variables-dark.css' screen and (prefers-color-scheme: dark);
@import '/styles/extrasmall.css';
@import '/styles/small.css' only screen and (min-width: 768px) and (max-width: 1024px);
@import '/styles/medium.css' only screen and (min-width: 1024px);
@import '/styles/large.css' only screen and (min-width: 1366px);
@import '/styles/extralarge.css' only screen and (min-width: 1921px);
@font-face {
font-family: 'GlacialBold';
src: url('/fonts/glacialindifference-bold-webfont.woff2') format('woff2'),
url('/fonts/glacialindifference-bold-webfont.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'GlacialItalic';
src: url('/fonts/glacialindifference-italic-webfont.woff2') format('woff2'),
url('/fonts/glacialindifference-italic-webfont.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Glacial';
src: url('/fonts/glacialindifference-regular-webfont.woff2') format('woff2'),
url('/fonts/glacialindifference-regular-webfont.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
[data-font='sans'] {
font-family: 'Glacial', sans-serif;
font-display: swap;
}
[data-font='sans-bold'] {
font-family: 'GlacialBold', sans-serif;
font-display: swap;
}
[data-font='sans-italic'] {
font-family: 'GlacialItalic', sans-serif;
font-style: italic;
font-display: swap;
}
</style>
<title>Watch Party | V1.7.2</title>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-87498806-2');
</script>
</head>
<body>
<div class="heading bubble empty right">
<a href="/" class="title underlink" data-font="sans-bold">WATCH PARTY</a>
<h4 class="sub-title" data-font="sans">
WATCH YOUR FAVORITES,<br />WITH YOUR FAVORITE PEOPLE
</h4>
<a href="https://get.chromewatchparty.com" class="big-button" data-font="sans">
GET CHROME EXTENSION
</a>
</div>
<div style="margin-top: 10rem" class="text-section">
<div class="info">
<div class="info-text">
<a href="/changes" class="title underlink" data-font="sans-bold">CHANGELOG</a>
</div>
</div>
<div class="info">
<div class="info-text">
<div>
<h4 class="sub-title" data-font="sans-bold">V1.7.2</h4>
</div>
<div>
<p data-font="sans" class="body">FIX FUNIMATION SUPPORT</p>
</div>
</div>
</div>
<div class="info">
<div class="info-text">
<div></div>
<a
href="mailto:admin@chromewatchparty.com?subject=Changelog Questions"
class="underlink"
data-font="sans-bold"
>
ASK ABOUT CHANGES
</a>
</div>
</div>
</div>
<footer>
<div class="link-section">
<div class="link-list">
<h6 class="link-list-title" data-font="sans-bold">FOR USERS</h6>
<a class="underlink" href="/welcome#tips" data-font="sans">FAQ</a>
<a class="underlink" href="/changes" data-font="sans">Changelog</a>
<a
class="underlink"
target="_blank"
href="mailto:admin@chromewatchparty.com?subject=User Feedback"
data-font="sans"
>
Give Feedback
</a>
<a class="underlink" href="/welcome" data-font="sans">Getting Started</a>
<a class="underlink" href="/donate" data-font="sans"> Support Watch Party </a>
<a
class="underlink"
target="_blank"
href="https://get.chromewatchparty.com"
data-font="sans"
>
Get Chrome Extension
</a>
</div>
<div class="link-list">
<h6 class="link-list-title" data-font="sans-bold">FOR DEVELOPERS</h6>
<a class="underlink" target="_blank" href="https://firebase.google.com" data-font="sans"
>Firebase</a
>
<a class="underlink" target="_blank" href="https://material-ui.com" data-font="sans"
>Material UI</a
>
<a class="underlink" target="_blank" href="https://dolby.io" data-font="sans"
>Dolby Voxeet</a
>
<a class="underlink" target="_blank" href="https://reactjs.org" data-font="sans"
>React JS</a
>
<a class="underlink" target="_blank" href="https://nodejs.org" data-font="sans"
>Node JS</a
>
<a class="underlink" target="_blank" href="http://developers.giphy.com" data-font="sans"
>Giphy</a
>
</div>
<div class="link-list">
<h6 class="link-list-title" data-font="sans-bold">LEGAL & OTHER</h6>
<a class="underlink" data-font="sans">© 2020, Ayushya Amitabh</a>
<a class="underlink" href="/copyright" data-font="sans">Copyright</a>
<a
class="underlink"
target="_blank"
href="https://linkedin.com/in/ayushyamitabh"
data-font="sans"
>About Creator</a
>
</div>
</div>
<div class="end-line">
<a class="underlink" data-font="sans">Built with ♥ for Google Chrome by Ayushya Amitabh</a>
<a class="underlink" target="_blank" href="https://instagram.com/chromewatchparty">
<svg
height="4rem"
viewBox="0 0 511 511.9"
width="4rem"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="m510.949219 150.5c-1.199219-27.199219-5.597657-45.898438-11.898438-62.101562-6.5-17.199219-16.5-32.597657-29.601562-45.398438-12.800781-13-28.300781-23.101562-45.300781-29.5-16.296876-6.300781-34.898438-10.699219-62.097657-11.898438-27.402343-1.300781-36.101562-1.601562-105.601562-1.601562s-78.199219.300781-105.5 1.5c-27.199219 1.199219-45.898438 5.601562-62.097657 11.898438-17.203124 6.5-32.601562 16.5-45.402343 29.601562-13 12.800781-23.097657 28.300781-29.5 45.300781-6.300781 16.300781-10.699219 34.898438-11.898438 62.097657-1.300781 27.402343-1.601562 36.101562-1.601562 105.601562s.300781 78.199219 1.5 105.5c1.199219 27.199219 5.601562 45.898438 11.902343 62.101562 6.5 17.199219 16.597657 32.597657 29.597657 45.398438 12.800781 13 28.300781 23.101562 45.300781 29.5 16.300781 6.300781 34.898438 10.699219 62.101562 11.898438 27.296876 1.203124 36 1.5 105.5 1.5s78.199219-.296876 105.5-1.5c27.199219-1.199219 45.898438-5.597657 62.097657-11.898438 34.402343-13.300781 61.601562-40.5 74.902343-74.898438 6.296876-16.300781 10.699219-34.902343 11.898438-62.101562 1.199219-27.300781 1.5-36 1.5-105.5s-.101562-78.199219-1.300781-105.5zm-46.097657 209c-1.101562 25-5.300781 38.5-8.800781 47.5-8.601562 22.300781-26.300781 40-48.601562 48.601562-9 3.5-22.597657 7.699219-47.5 8.796876-27 1.203124-35.097657 1.5-103.398438 1.5s-76.5-.296876-103.402343-1.5c-25-1.097657-38.5-5.296876-47.5-8.796876-11.097657-4.101562-21.199219-10.601562-29.398438-19.101562-8.5-8.300781-15-18.300781-19.101562-29.398438-3.5-9-7.699219-22.601562-8.796876-47.5-1.203124-27-1.5-35.101562-1.5-103.402343s.296876-76.5 1.5-103.398438c1.097657-25 5.296876-38.5 8.796876-47.5 4.101562-11.101562 10.601562-21.199219 19.203124-29.402343 8.296876-8.5 18.296876-15 29.398438-19.097657 9-3.5 22.601562-7.699219 47.5-8.800781 27-1.199219 35.101562-1.5 103.398438-1.5 68.402343 0 76.5.300781 103.402343 1.5 25 1.101562 38.5 5.300781 47.5 8.800781 11.097657 4.097657 21.199219 10.597657 29.398438 19.097657 8.5 8.300781 15 18.300781 19.101562 29.402343 3.5 9 7.699219 22.597657 8.800781 47.5 1.199219 27 1.5 35.097657 1.5 103.398438s-.300781 76.300781-1.5 103.300781zm0 0"
/>
<path
d="m256.449219 124.5c-72.597657 0-131.5 58.898438-131.5 131.5s58.902343 131.5 131.5 131.5c72.601562 0 131.5-58.898438 131.5-131.5s-58.898438-131.5-131.5-131.5zm0 216.800781c-47.097657 0-85.300781-38.199219-85.300781-85.300781s38.203124-85.300781 85.300781-85.300781c47.101562 0 85.300781 38.199219 85.300781 85.300781s-38.199219 85.300781-85.300781 85.300781zm0 0"
/>
<path
d="m423.851562 119.300781c0 16.953125-13.746093 30.699219-30.703124 30.699219-16.953126 0-30.699219-13.746094-30.699219-30.699219 0-16.957031 13.746093-30.699219 30.699219-30.699219 16.957031 0 30.703124 13.742188 30.703124 30.699219zm0 0"
/>
</svg>
</a>
<a class="underlink" target="_blank" href="https://www.reddit.com/r/ChromeWatchParty/">
<svg
id="Bold"
enable-background="new 0 0 24 24"
height="4rem"
viewBox="0 0 24 24"
width="4rem"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="m21.325 9.308c-.758 0-1.425.319-1.916.816-1.805-1.268-4.239-2.084-6.936-2.171l1.401-6.406 4.461 1.016c0 1.108.89 2.013 1.982 2.013 1.113 0 2.008-.929 2.008-2.038s-.889-2.038-2.007-2.038c-.779 0-1.451.477-1.786 1.129l-4.927-1.108c-.248-.067-.491.113-.557.365l-1.538 7.062c-2.676.113-5.084.928-6.895 2.197-.491-.518-1.184-.837-1.942-.837-2.812 0-3.733 3.829-1.158 5.138-.091.405-.132.837-.132 1.268 0 4.301 4.775 7.786 10.638 7.786 5.888 0 10.663-3.485 10.663-7.786 0-.431-.045-.883-.156-1.289 2.523-1.314 1.594-5.115-1.203-5.117zm-15.724 5.41c0-1.129.89-2.038 2.008-2.038 1.092 0 1.983.903 1.983 2.038 0 1.109-.89 2.013-1.983 2.013-1.113.005-2.008-.904-2.008-2.013zm10.839 4.798c-1.841 1.868-7.036 1.868-8.878 0-.203-.18-.203-.498 0-.703.177-.18.491-.18.668 0 1.406 1.463 6.07 1.488 7.537 0 .177-.18.491-.18.668 0 .207.206.207.524.005.703zm-.041-2.781c-1.092 0-1.982-.903-1.982-2.011 0-1.129.89-2.038 1.982-2.038 1.113 0 2.008.903 2.008 2.038-.005 1.103-.895 2.011-2.008 2.011z"
/>
</svg>
</a>
<a class="underlink" target="_blank" href="mailto:admin@chromewatchparty.com">
<svg
version="1.1"
id="Capa_1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px"
y="0px"
width="4rem"
height="4rem"
viewBox="0 0 512 512"
style="enable-background: new 0 0 512 512"
xml:space="preserve"
>
<g>
<g>
<path
d="M467,61H45C20.218,61,0,81.196,0,106v300c0,24.72,20.128,45,45,45h422c24.72,0,45-20.128,45-45V106
C512,81.28,491.872,61,467,61z M460.786,91L256.954,294.833L51.359,91H460.786z M30,399.788V112.069l144.479,143.24L30,399.788z
M51.213,421l144.57-144.57l50.657,50.222c5.864,5.814,15.327,5.795,21.167-0.046L317,277.213L460.787,421H51.213z M482,399.787
L338.213,256L482,112.212V399.787z"
/>
</g>
</g>
</svg>
</a>
</div>
</footer>
</body>
</html>