v1.7.10/release:
-abandon Google Drive, -fix video listeners, -add backup webhook, -complete admin dashboard
This commit is contained in:
+14
-12
@@ -1,9 +1,9 @@
|
|||||||
import firebase from 'firebase/app';
|
import firebase from "firebase/app";
|
||||||
import 'firebase/auth';
|
import "firebase/auth";
|
||||||
|
|
||||||
const API = window.location.href.includes('localhost')
|
const API = window.location.href.includes("localhost")
|
||||||
? 'http://localhost:5001/watch-party-crx/us-central1/admin'
|
? "http://localhost:5001/watch-party-crx/us-central1/admin"
|
||||||
: 'https://us-central1-watch-party-crx.cloudfunctions.net/admin';
|
: "https://us-central1-watch-party-crx.cloudfunctions.net/admin";
|
||||||
|
|
||||||
const fetcher = async ({ endpoint, method, bodyData }) => {
|
const fetcher = async ({ endpoint, method, bodyData }) => {
|
||||||
const idToken = await firebase.auth().currentUser.getIdToken();
|
const idToken = await firebase.auth().currentUser.getIdToken();
|
||||||
@@ -12,19 +12,21 @@ const fetcher = async ({ endpoint, method, bodyData }) => {
|
|||||||
method,
|
method,
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Token ${idToken}:${firebase.auth().currentUser.uid}`,
|
Authorization: `Token ${idToken}:${firebase.auth().currentUser.uid}`,
|
||||||
'Access-Control-Allow-Origin': '*',
|
"Access-Control-Allow-Origin": "*",
|
||||||
},
|
},
|
||||||
body,
|
body,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPartyDashboardData = () => fetcher({ endpoint: 'partyDashboard', method: 'GET' });
|
export const getPartyDashboardData = () =>
|
||||||
export const getServerDashboardData = () => fetcher({ endpoint: 'serverDashboard', method: 'GET' });
|
fetcher({ endpoint: "partyDashboard", method: "GET" });
|
||||||
|
export const getServerDashboardData = () =>
|
||||||
|
fetcher({ endpoint: "serverDashboard", method: "GET" });
|
||||||
export const postUpdateVersionActive = (bodyData) =>
|
export const postUpdateVersionActive = (bodyData) =>
|
||||||
fetcher({ endpoint: 'updateVersionActive', method: 'POST', bodyData });
|
fetcher({ endpoint: "updateVersionActive", method: "POST", bodyData });
|
||||||
export const postUpdateVideoSelectors = (bodyData) =>
|
export const postUpdateVideoSelectors = (bodyData) =>
|
||||||
fetcher({ endpoint: 'updateVideoSelectors', method: 'POST', bodyData });
|
fetcher({ endpoint: "updateVideoSelectors", method: "POST", bodyData });
|
||||||
export const postUpdateVideoNameSelectors = (bodyData) =>
|
export const postUpdateVideoNameSelectors = (bodyData) =>
|
||||||
fetcher({ endpoint: 'updateVideoNameSelectors', method: 'POST', bodyData });
|
fetcher({ endpoint: "updateVideoNameSelectors", method: "POST", bodyData });
|
||||||
export const postSendMessage = (bodyData) =>
|
export const postSendMessage = (bodyData) =>
|
||||||
fetcher({ endpoint: 'sendMessage', method: 'POST', bodyData });
|
fetcher({ endpoint: "sendMessage", method: "POST", bodyData });
|
||||||
|
|||||||
+507
-156
File diff suppressed because it is too large
Load Diff
@@ -27,7 +27,6 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const APP_VERSION = "1.7.10";
|
const APP_VERSION = "1.7.10";
|
||||||
const APP_VERSION_STRING = APP_VERSION.replace(/\./g, "");
|
|
||||||
|
|
||||||
const firebaseConfig = {
|
const firebaseConfig = {
|
||||||
apiKey: "AIzaSyCJLuYpzXLDRmu2ttzFuSGmYcpFxqToWFU",
|
apiKey: "AIzaSyCJLuYpzXLDRmu2ttzFuSGmYcpFxqToWFU",
|
||||||
|
|||||||
@@ -47,7 +47,6 @@
|
|||||||
"https://*.airtelxstream.in/*",
|
"https://*.airtelxstream.in/*",
|
||||||
"https://*.vimeo.com/*",
|
"https://*.vimeo.com/*",
|
||||||
"https://*.dailymotion.com/*",
|
"https://*.dailymotion.com/*",
|
||||||
"https://drive.google.com/*",
|
|
||||||
"https://api.giphy.com/*",
|
"https://api.giphy.com/*",
|
||||||
"https://*.voxeet.com/*"
|
"https://*.voxeet.com/*"
|
||||||
],
|
],
|
||||||
@@ -90,8 +89,7 @@
|
|||||||
"https://*.hotstar.com/*",
|
"https://*.hotstar.com/*",
|
||||||
"https://*.airtelxstream.in/*",
|
"https://*.airtelxstream.in/*",
|
||||||
"https://*.vimeo.com/*",
|
"https://*.vimeo.com/*",
|
||||||
"https://*.dailymotion.com/*",
|
"https://*.dailymotion.com/*"
|
||||||
"https://drive.google.com/*"
|
|
||||||
],
|
],
|
||||||
"run_at": "document_idle",
|
"run_at": "document_idle",
|
||||||
"js": ["/static/js/content.js"],
|
"js": ["/static/js/content.js"],
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ export const PLAYER_SOURCE = {
|
|||||||
AIRTEL: "airtelxstream.",
|
AIRTEL: "airtelxstream.",
|
||||||
VIMEO: "vimeo.",
|
VIMEO: "vimeo.",
|
||||||
DAILYMOTION: "dailymotion.",
|
DAILYMOTION: "dailymotion.",
|
||||||
GOOGLEDRIVE: "drive.google.",
|
|
||||||
LOCAL: "localhost",
|
LOCAL: "localhost",
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -72,8 +71,6 @@ export const getPlayerSource = () => {
|
|||||||
if (HREF.includes(PLAYER_SOURCE.VIMEO)) return PLAYER_SOURCE.VIMEO;
|
if (HREF.includes(PLAYER_SOURCE.VIMEO)) return PLAYER_SOURCE.VIMEO;
|
||||||
if (HREF.includes(PLAYER_SOURCE.DAILYMOTION))
|
if (HREF.includes(PLAYER_SOURCE.DAILYMOTION))
|
||||||
return PLAYER_SOURCE.DAILYMOTION;
|
return PLAYER_SOURCE.DAILYMOTION;
|
||||||
if (HREF.includes(PLAYER_SOURCE.GOOGLEDRIVE))
|
|
||||||
return PLAYER_SOURCE.GOOGLEDRIVE;
|
|
||||||
if (HREF.includes(PLAYER_SOURCE.LOCAL)) return PLAYER_SOURCE.LOCAL;
|
if (HREF.includes(PLAYER_SOURCE.LOCAL)) return PLAYER_SOURCE.LOCAL;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+15
-24
@@ -26,8 +26,6 @@ import Loading from "./Loading";
|
|||||||
import Inactive from "./Inactive";
|
import Inactive from "./Inactive";
|
||||||
import {
|
import {
|
||||||
getUserUid,
|
getUserUid,
|
||||||
getPlayerSource,
|
|
||||||
PLAYER_SOURCE,
|
|
||||||
getShowWPButton,
|
getShowWPButton,
|
||||||
getTutorialStatus,
|
getTutorialStatus,
|
||||||
UpdateDailymotionVariables,
|
UpdateDailymotionVariables,
|
||||||
@@ -35,7 +33,6 @@ import {
|
|||||||
import Tutorial from "./Tutorial";
|
import Tutorial from "./Tutorial";
|
||||||
|
|
||||||
const APP_VERSION = "1.7.10";
|
const APP_VERSION = "1.7.10";
|
||||||
const APP_VERSION_STRING = APP_VERSION.replace(/\./g, "");
|
|
||||||
|
|
||||||
const darkTheme = createMuiTheme({
|
const darkTheme = createMuiTheme({
|
||||||
palette: {
|
palette: {
|
||||||
@@ -139,22 +136,7 @@ const App = () => {
|
|||||||
if (visible) {
|
if (visible) {
|
||||||
document.body.classList.add("visible");
|
document.body.classList.add("visible");
|
||||||
PartyRoutesWrapper && PartyRoutesWrapper.classList.add("visible");
|
PartyRoutesWrapper && PartyRoutesWrapper.classList.add("visible");
|
||||||
if (getPlayerSource() === PLAYER_SOURCE.APPLE) {
|
|
||||||
const appleTvPlayer = document.querySelector("apple-tv-plus-player");
|
|
||||||
const takeoverContainer = appleTvPlayer.shadowRoot.querySelector(
|
|
||||||
".takeover.container.show"
|
|
||||||
);
|
|
||||||
if (takeoverContainer)
|
|
||||||
takeoverContainer.style.maxWidth = "var(--body-width)";
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (getPlayerSource() === PLAYER_SOURCE.APPLE) {
|
|
||||||
const appleTvPlayer = document.querySelector("apple-tv-plus-player");
|
|
||||||
const takeoverContainer = appleTvPlayer.shadowRoot.querySelector(
|
|
||||||
".takeover.container.show"
|
|
||||||
);
|
|
||||||
if (takeoverContainer) takeoverContainer.style.maxWidth = "none";
|
|
||||||
}
|
|
||||||
document.body.classList.remove("visible");
|
document.body.classList.remove("visible");
|
||||||
PartyRoutesWrapper && PartyRoutesWrapper.classList.remove("visible");
|
PartyRoutesWrapper && PartyRoutesWrapper.classList.remove("visible");
|
||||||
}
|
}
|
||||||
@@ -171,6 +153,16 @@ const App = () => {
|
|||||||
|
|
||||||
UpdateDailymotionVariables();
|
UpdateDailymotionVariables();
|
||||||
|
|
||||||
|
const versionStatusKey = Object.keys(status).filter(
|
||||||
|
(key) => status[key].v === APP_VERSION
|
||||||
|
)[0];
|
||||||
|
|
||||||
|
var versionStatus = {};
|
||||||
|
|
||||||
|
if (versionStatusKey) {
|
||||||
|
versionStatus = status[versionStatusKey];
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider theme={darkTheme}>
|
<ThemeProvider theme={darkTheme}>
|
||||||
<Snackbar
|
<Snackbar
|
||||||
@@ -204,8 +196,7 @@ const App = () => {
|
|||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
{loading && <Loading />}
|
{loading && <Loading />}
|
||||||
{status[APP_VERSION_STRING] &&
|
{versionStatus && versionStatus.active === true ? (
|
||||||
status[APP_VERSION_STRING].active === true ? (
|
|
||||||
<Routes
|
<Routes
|
||||||
showFab={showFab}
|
showFab={showFab}
|
||||||
resetTutorial={resetTutorial}
|
resetTutorial={resetTutorial}
|
||||||
@@ -215,17 +206,17 @@ const App = () => {
|
|||||||
setNotification({ open: true, message, timeout })
|
setNotification({ open: true, message, timeout })
|
||||||
}
|
}
|
||||||
appVersion={APP_VERSION}
|
appVersion={APP_VERSION}
|
||||||
appVersionString={APP_VERSION_STRING}
|
status={versionStatus}
|
||||||
status={status[APP_VERSION_STRING]}
|
|
||||||
selectors={status.selectors}
|
selectors={status.selectors}
|
||||||
nameSelectors={status.nameSelectors}
|
nameSelectors={status.nameSelectors}
|
||||||
setVisible={setVisible}
|
setVisible={setVisible}
|
||||||
|
visible={visible}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<Inactive
|
<Inactive
|
||||||
status={
|
status={
|
||||||
status[APP_VERSION_STRING]
|
versionStatus
|
||||||
? status[APP_VERSION_STRING].message
|
? versionStatus.message
|
||||||
: "Connecting to server..."
|
: "Connecting to server..."
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
+62
-151
@@ -143,7 +143,6 @@ export default class VideoListener {
|
|||||||
case PLAYER_SOURCE.CRUNCHYROLL:
|
case PLAYER_SOURCE.CRUNCHYROLL:
|
||||||
case PLAYER_SOURCE.FUNIMATION:
|
case PLAYER_SOURCE.FUNIMATION:
|
||||||
case PLAYER_SOURCE.ROOSTERTEETH:
|
case PLAYER_SOURCE.ROOSTERTEETH:
|
||||||
case PLAYER_SOURCE.GOOGLEDRIVE:
|
|
||||||
window.postMessage(
|
window.postMessage(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
watchPartyDirection: "TO_SCRIPT",
|
watchPartyDirection: "TO_SCRIPT",
|
||||||
@@ -176,8 +175,7 @@ export default class VideoListener {
|
|||||||
PLAYER_SOURCE.HULU === this.video.source ||
|
PLAYER_SOURCE.HULU === this.video.source ||
|
||||||
PLAYER_SOURCE.NETFLIX === this.video.source ||
|
PLAYER_SOURCE.NETFLIX === this.video.source ||
|
||||||
PLAYER_SOURCE.HBOMAX === this.video.source ||
|
PLAYER_SOURCE.HBOMAX === this.video.source ||
|
||||||
PLAYER_SOURCE.HBONOW === this.video.source ||
|
PLAYER_SOURCE.HBONOW === this.video.source
|
||||||
PLAYER_SOURCE.GOOGLEDRIVE === this.video.source
|
|
||||||
) {
|
) {
|
||||||
if (
|
if (
|
||||||
serverPlayer.status === PLAYER_STATUS.PAUSED ||
|
serverPlayer.status === PLAYER_STATUS.PAUSED ||
|
||||||
@@ -249,26 +247,17 @@ export default class VideoListener {
|
|||||||
? document.querySelector(nS.episode).innerHTML
|
? document.querySelector(nS.episode).innerHTML
|
||||||
: "";
|
: "";
|
||||||
return dshow === "" && depisode === "" ? null : dshow + "\n" + depisode;
|
return dshow === "" && depisode === "" ? null : dshow + "\n" + depisode;
|
||||||
case PLAYER_SOURCE.GOOGLEPLAY:
|
|
||||||
const playerIframe = document.querySelector(
|
|
||||||
this.selectors[PLAYER_SOURCE.GOOGLEPLAY]
|
|
||||||
);
|
|
||||||
var googleplayshow = "";
|
|
||||||
if (playerIframe) {
|
|
||||||
const gpsel = playerIframe.contentWindow.document.querySelector(
|
|
||||||
nS.show
|
|
||||||
);
|
|
||||||
googleplayshow = gpsel ? gpsel.innerText : "";
|
|
||||||
}
|
|
||||||
return googleplayshow === "" ? null : googleplayshow;
|
|
||||||
case PLAYER_SOURCE.APPLE:
|
case PLAYER_SOURCE.APPLE:
|
||||||
const appleTvPlayer = document.querySelector("apple-tv-plus-player");
|
const appleTvPlayer = document.querySelector("apple-tv-plus-player");
|
||||||
|
if (appleTvPlayer) {
|
||||||
const appleTvInternal = appleTvPlayer.shadowRoot.querySelector(
|
const appleTvInternal = appleTvPlayer.shadowRoot.querySelector(
|
||||||
"amp-video-player-internal"
|
"amp-video-player-internal"
|
||||||
);
|
);
|
||||||
|
if (appleTvInternal) {
|
||||||
const appleTvVideoContainer = appleTvInternal.shadowRoot.querySelector(
|
const appleTvVideoContainer = appleTvInternal.shadowRoot.querySelector(
|
||||||
"amp-video-player"
|
"amp-video-player"
|
||||||
);
|
);
|
||||||
|
if (appleTvVideoContainer) {
|
||||||
const appleTvShowContainer = appleTvVideoContainer.querySelector(
|
const appleTvShowContainer = appleTvVideoContainer.querySelector(
|
||||||
nS.show
|
nS.show
|
||||||
);
|
);
|
||||||
@@ -284,10 +273,9 @@ export default class VideoListener {
|
|||||||
return appleTvShow === "" && appleTvEpisode === ""
|
return appleTvShow === "" && appleTvEpisode === ""
|
||||||
? null
|
? null
|
||||||
: appleTvShow + "\n" + appleTvEpisode;
|
: appleTvShow + "\n" + appleTvEpisode;
|
||||||
case PLAYER_SOURCE.VIKI:
|
}
|
||||||
const docTitleSplit = document.title.split("|");
|
}
|
||||||
if (docTitleSplit.length > 1) return docTitleSplit[0].trim();
|
}
|
||||||
else return null;
|
|
||||||
case PLAYER_SOURCE.STAN:
|
case PLAYER_SOURCE.STAN:
|
||||||
const stanShowContainer = document.querySelector(nS.show);
|
const stanShowContainer = document.querySelector(nS.show);
|
||||||
const stanEpisodeContainer = document.querySelector(nS.episode);
|
const stanEpisodeContainer = document.querySelector(nS.episode);
|
||||||
@@ -405,10 +393,7 @@ export default class VideoListener {
|
|||||||
if (huluVideoElement) {
|
if (huluVideoElement) {
|
||||||
this.firstTimeSync(huluVideoElement);
|
this.firstTimeSync(huluVideoElement);
|
||||||
} else {
|
} else {
|
||||||
setInterval(
|
setInterval(() => {
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
var hve = document.querySelector(vS);
|
var hve = document.querySelector(vS);
|
||||||
if (
|
if (
|
||||||
hve !== null &&
|
hve !== null &&
|
||||||
@@ -416,9 +401,7 @@ export default class VideoListener {
|
|||||||
) {
|
) {
|
||||||
this.firstTimeSync(hve);
|
this.firstTimeSync(hve);
|
||||||
}
|
}
|
||||||
},
|
}, 1000);
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYER_SOURCE.HBONOW:
|
case PLAYER_SOURCE.HBONOW:
|
||||||
@@ -431,10 +414,7 @@ export default class VideoListener {
|
|||||||
if (hboVideoElement) {
|
if (hboVideoElement) {
|
||||||
this.firstTimeSync(hboVideoElement);
|
this.firstTimeSync(hboVideoElement);
|
||||||
} else {
|
} else {
|
||||||
setInterval(
|
setInterval(() => {
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
var hve = document.querySelector(vS);
|
var hve = document.querySelector(vS);
|
||||||
if (
|
if (
|
||||||
hve !== null &&
|
hve !== null &&
|
||||||
@@ -443,9 +423,7 @@ export default class VideoListener {
|
|||||||
) {
|
) {
|
||||||
this.firstTimeSync(hve);
|
this.firstTimeSync(hve);
|
||||||
}
|
}
|
||||||
},
|
}, 1000);
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYER_SOURCE.PEACOCK:
|
case PLAYER_SOURCE.PEACOCK:
|
||||||
@@ -457,10 +435,7 @@ export default class VideoListener {
|
|||||||
if (peacockVideoElement) {
|
if (peacockVideoElement) {
|
||||||
this.firstTimeSync(peacockVideoElement);
|
this.firstTimeSync(peacockVideoElement);
|
||||||
} else {
|
} else {
|
||||||
setInterval(
|
setInterval(() => {
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
var pve = document.querySelector(vS);
|
var pve = document.querySelector(vS);
|
||||||
if (
|
if (
|
||||||
pve !== null &&
|
pve !== null &&
|
||||||
@@ -469,69 +444,24 @@ export default class VideoListener {
|
|||||||
) {
|
) {
|
||||||
this.firstTimeSync(pve);
|
this.firstTimeSync(pve);
|
||||||
}
|
}
|
||||||
},
|
}, 1000);
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYER_SOURCE.GOOGLEPLAY:
|
case PLAYER_SOURCE.GOOGLEPLAY:
|
||||||
const playerIframe = document.querySelector(vS);
|
const googlePlayVideoElement = document.querySelector(vS);
|
||||||
if (playerIframe) {
|
|
||||||
const googlePlayVideoElement = playerIframe.contentWindow.document.querySelector(
|
|
||||||
"video"
|
|
||||||
);
|
|
||||||
if (googlePlayVideoElement) {
|
if (googlePlayVideoElement) {
|
||||||
this.firstTimeSync(googlePlayVideoElement);
|
this.firstTimeSync(googlePlayVideoElement);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
setInterval(
|
setInterval(() => {
|
||||||
this.video.element
|
const gpve = document.querySelector(vS);
|
||||||
? null
|
if (
|
||||||
: () => {
|
gpve !== null &&
|
||||||
const pif = document.querySelector(vS);
|
gpve !== undefined &&
|
||||||
if (pif) {
|
(this.video.element !== gpve || this.video.element === null)
|
||||||
const gpve = pif.contentWindow.document.querySelector(
|
) {
|
||||||
"video"
|
|
||||||
);
|
|
||||||
if (gpve) {
|
|
||||||
this.firstTimeSync(gpve);
|
this.firstTimeSync(gpve);
|
||||||
}
|
}
|
||||||
}
|
}, 1000);
|
||||||
},
|
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PLAYER_SOURCE.GOOGLEDRIVE:
|
|
||||||
const googleDriveInject = `var watchPartyInteraction=function(e){const data=JSON.parse(e.data);const player=document.querySelector("${vS}").contentWindow.document.querySelector('video');if(player){if(data.watchPartyDirection==='TO_SCRIPT'){if(data.type==='WATCH_PARTY_SEEK'){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);`;
|
|
||||||
const googleDriveInjectScript = document.createElement("script");
|
|
||||||
googleDriveInjectScript.text = googleDriveInject;
|
|
||||||
document.head.appendChild(googleDriveInjectScript);
|
|
||||||
const googleDrivePlayerIframe = document.querySelector(vS);
|
|
||||||
if (googleDrivePlayerIframe) {
|
|
||||||
const googleDrivePlayer = googleDrivePlayerIframe.contentWindow.document.querySelector(
|
|
||||||
"video"
|
|
||||||
);
|
|
||||||
if (googleDrivePlayer) {
|
|
||||||
this.firstTimeSync(googleDrivePlayerIframe);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setInterval(
|
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
const gdif = document.querySelector(vS);
|
|
||||||
if (gdif) {
|
|
||||||
const gdp = gdif.contentWindow.document.querySelector(
|
|
||||||
"video"
|
|
||||||
);
|
|
||||||
if (gdp) {
|
|
||||||
this.firstTimeSync(gdif);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYER_SOURCE.CRUNCHYROLL:
|
case PLAYER_SOURCE.CRUNCHYROLL:
|
||||||
@@ -543,65 +473,51 @@ export default class VideoListener {
|
|||||||
if (crunchyrollIframe) {
|
if (crunchyrollIframe) {
|
||||||
this.firstTimeSync(crunchyrollIframe);
|
this.firstTimeSync(crunchyrollIframe);
|
||||||
} else {
|
} else {
|
||||||
setInterval(
|
setInterval(() => {
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
const cif = document.querySelector(vS);
|
const cif = document.querySelector(vS);
|
||||||
if (cif) {
|
if (
|
||||||
|
cif !== null &&
|
||||||
|
cif !== undefined &&
|
||||||
|
(cif !== this.video.element || this.video.element === null)
|
||||||
|
) {
|
||||||
this.firstTimeSync(cif);
|
this.firstTimeSync(cif);
|
||||||
}
|
}
|
||||||
},
|
}, 1000);
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYER_SOURCE.APPLE:
|
case PLAYER_SOURCE.APPLE:
|
||||||
const appleTvPlayer = document.querySelector("apple-tv-plus-player");
|
setInterval(() => {
|
||||||
const appleTvInternal = appleTvPlayer.shadowRoot.querySelector(
|
|
||||||
"amp-video-player-internal"
|
|
||||||
);
|
|
||||||
const appleTvVideoContainer = appleTvInternal.shadowRoot.querySelector(
|
|
||||||
"amp-video-player"
|
|
||||||
);
|
|
||||||
const appleVideoElement = appleTvVideoContainer.shadowRoot.querySelector(
|
|
||||||
vS
|
|
||||||
);
|
|
||||||
if (appleVideoElement) {
|
|
||||||
const takeoverContainer = appleTvPlayer.shadowRoot.querySelector(
|
|
||||||
".takeover.container.show"
|
|
||||||
);
|
|
||||||
if (takeoverContainer)
|
|
||||||
takeoverContainer.style.maxWidth = "var(--body-width)";
|
|
||||||
this.firstTimeSync(appleVideoElement);
|
|
||||||
} else {
|
|
||||||
setInterval(
|
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
const atp = document.querySelector("apple-tv-plus-player");
|
const atp = document.querySelector("apple-tv-plus-player");
|
||||||
|
if (atp) {
|
||||||
const ati = atp.shadowRoot.querySelector(
|
const ati = atp.shadowRoot.querySelector(
|
||||||
"amp-video-player-internal"
|
"amp-video-player-internal"
|
||||||
);
|
);
|
||||||
const atv = ati.shadowRoot.querySelector("amp-video-player");
|
if (ati) {
|
||||||
const atve = atv.shadowRoot.querySelector(vS);
|
const atc = ati.shadowRoot.querySelector("amp-video-player");
|
||||||
const tc = atp.shadowRoot.querySelector(
|
if (atc) {
|
||||||
|
const ave = atc.shadowRoot.querySelector(vS);
|
||||||
|
if (ave) {
|
||||||
|
const visible = document.body.classList.contains("visible");
|
||||||
|
const takeoverContainer = atp.shadowRoot.querySelector(
|
||||||
".takeover.container.show"
|
".takeover.container.show"
|
||||||
);
|
);
|
||||||
const visible = document.querySelector("body.visible");
|
if (takeoverContainer && visible) {
|
||||||
if (tc && visible) tc.style.maxWidth = "var(--body-width)";
|
takeoverContainer.style.maxWidth = "var(--body-width)";
|
||||||
else if (tc && !visible) tc.style.maxWidth = "none";
|
} else if (takeoverContainer && !visible) {
|
||||||
|
takeoverContainer.style.maxWidth = "none";
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
!!atve === true &&
|
ave !== null &&
|
||||||
(!!this.video.element === false ||
|
ave !== undefined &&
|
||||||
atve !== this.video.element)
|
(this.video.element !== ave || this.video.element === null)
|
||||||
) {
|
) {
|
||||||
this.firstTimeSync(atve);
|
this.firstTimeSync(ave);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
break;
|
break;
|
||||||
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('${vS}');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('${vS}');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player&&player.currentTime>0&&player.paused===false&&player.ended===false){player.parentNode.player.on('playing',watchPartySendPlaying);player.parentNode.player.on('pause',watchPartySendPaused);clearInterval(watchPartyAddListeners)}}},watchPartyInteraction=function(e){const data=JSON.parse(e.data);const playerIframe=document.querySelector('${vS}');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 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('${vS}');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('${vS}');if(playerIframe){const player=playerIframe.contentWindow.document.querySelector('video');if(player&&player.currentTime>0&&player.paused===false&&player.ended===false){player.parentNode.player.on('playing',watchPartySendPlaying);player.parentNode.player.on('pause',watchPartySendPaused);clearInterval(watchPartyAddListeners)}}},watchPartyInteraction=function(e){const data=JSON.parse(e.data);const playerIframe=document.querySelector('${vS}');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);`;
|
||||||
@@ -614,7 +530,11 @@ export default class VideoListener {
|
|||||||
} else {
|
} else {
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
const fif = document.querySelector(vS);
|
const fif = document.querySelector(vS);
|
||||||
if (!this.video.element && fif) {
|
if (
|
||||||
|
fif !== null &&
|
||||||
|
fif !== undefined &&
|
||||||
|
(this.video.element !== fif || this.video.element === null)
|
||||||
|
) {
|
||||||
this.firstTimeSync(fif);
|
this.firstTimeSync(fif);
|
||||||
}
|
}
|
||||||
}, 1000);
|
}, 1000);
|
||||||
@@ -629,10 +549,7 @@ export default class VideoListener {
|
|||||||
if (roosterTeethVideoElement) {
|
if (roosterTeethVideoElement) {
|
||||||
this.firstTimeSync(roosterTeethVideoElement);
|
this.firstTimeSync(roosterTeethVideoElement);
|
||||||
} else {
|
} else {
|
||||||
setInterval(
|
setInterval(() => {
|
||||||
this.video.element
|
|
||||||
? null
|
|
||||||
: () => {
|
|
||||||
var rtve = document.querySelector(vS);
|
var rtve = document.querySelector(vS);
|
||||||
if (
|
if (
|
||||||
rtve !== null &&
|
rtve !== null &&
|
||||||
@@ -640,9 +557,7 @@ export default class VideoListener {
|
|||||||
) {
|
) {
|
||||||
this.firstTimeSync(rtve);
|
this.firstTimeSync(rtve);
|
||||||
}
|
}
|
||||||
},
|
}, 1000);
|
||||||
1000
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLAYER_SOURCE.STAN:
|
case PLAYER_SOURCE.STAN:
|
||||||
@@ -654,21 +569,17 @@ export default class VideoListener {
|
|||||||
case PLAYER_SOURCE.AIRTEL:
|
case PLAYER_SOURCE.AIRTEL:
|
||||||
case PLAYER_SOURCE.VIMEO:
|
case PLAYER_SOURCE.VIMEO:
|
||||||
case PLAYER_SOURCE.DAILYMOTION:
|
case PLAYER_SOURCE.DAILYMOTION:
|
||||||
const videoElement = document.querySelector(vS);
|
|
||||||
if (videoElement) {
|
|
||||||
this.firstTimeSync(videoElement);
|
|
||||||
} else {
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
var newVideoElement = document.querySelector(vS);
|
var newVideoElement = document.querySelector(vS);
|
||||||
if (
|
if (
|
||||||
newVideoElement &&
|
newVideoElement !== null &&
|
||||||
!this.video.element &&
|
newVideoElement !== undefined &&
|
||||||
this.video.element !== newVideoElement
|
(this.video.element === null ||
|
||||||
|
this.video.element !== newVideoElement)
|
||||||
) {
|
) {
|
||||||
this.firstTimeSync(newVideoElement);
|
this.firstTimeSync(newVideoElement);
|
||||||
}
|
}
|
||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,41 +1,49 @@
|
|||||||
const admin = require('firebase-admin');
|
const admin = require("firebase-admin");
|
||||||
const Logger = require('../Logger');
|
const Logger = require("../Logger");
|
||||||
const mLogger = new Logger('admin', 'updateVersionActive');
|
const mLogger = new Logger("admin", "updateVersionActive");
|
||||||
|
|
||||||
module.exports = async (req, res) => {
|
module.exports = async (req, res) => {
|
||||||
mLogger.start();
|
mLogger.start();
|
||||||
const { version, versionData } = JSON.parse(req.body);
|
const { version, versionData } = JSON.parse(req.body);
|
||||||
if (version && versionData) {
|
if (version && versionData) {
|
||||||
delete versionData.version;
|
delete versionData.version;
|
||||||
if (versionData.importantAlert === null || versionData.importantAlert === undefined) {
|
if (
|
||||||
|
versionData.importantAlert === null ||
|
||||||
|
versionData.importantAlert === undefined
|
||||||
|
) {
|
||||||
await admin
|
await admin
|
||||||
.firestore()
|
.firestore()
|
||||||
.collection('server')
|
.collection("server")
|
||||||
.doc('status')
|
.doc("status")
|
||||||
.update({
|
.update({
|
||||||
[`${version}.importantUpdate`]: admin.firestore.FieldValue.delete(),
|
[`${version}.importantUpdate`]: admin.firestore.FieldValue.delete(),
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
mLogger.error('FAILED TO DELETE IMPORTANT ALERT', err);
|
mLogger.error("FAILED TO DELETE IMPORTANT ALERT", err);
|
||||||
res.status(500).send({ message: 'FAILED TO DELETE IMPORTANT ALERT', error: err });
|
res
|
||||||
|
.status(500)
|
||||||
|
.send({ message: "FAILED TO DELETE IMPORTANT ALERT", error: err });
|
||||||
});
|
});
|
||||||
delete versionData.importantAlert;
|
delete versionData.importantAlert;
|
||||||
}
|
}
|
||||||
await admin
|
await admin
|
||||||
.firestore()
|
.firestore()
|
||||||
.collection('server')
|
.collection("server")
|
||||||
.doc('status')
|
.doc("status")
|
||||||
.update({
|
.update({
|
||||||
[version]: versionData,
|
[version]: versionData,
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
mLogger.error('FAILED TO UPDATE', err);
|
mLogger.error("FAILED TO UPDATE", err);
|
||||||
res.status(500).send({ message: 'FAILED TO UPDATE', error: err });
|
res.status(500).send({ message: "FAILED TO UPDATE", error: err });
|
||||||
});
|
});
|
||||||
mLogger.success('UPDATE VERSION ACTIVE STATUS', Object.assign(versionData, versionData));
|
mLogger.success(
|
||||||
res.status(200).send({ message: 'Updated version active' });
|
"UPDATE VERSION ACTIVE STATUS",
|
||||||
|
Object.assign(versionData, versionData)
|
||||||
|
);
|
||||||
|
res.status(200).send({ message: "Updated version active" });
|
||||||
} else {
|
} else {
|
||||||
mLogger.error('VALUES NOT RECEIVED');
|
mLogger.error("VALUES NOT RECEIVED");
|
||||||
res.status(500).send({ message: 'Values not received' });
|
res.status(500).send({ message: "Values not received" });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
const WebhookModules = require('./index');
|
const WebhookModules = require("./index");
|
||||||
const express = require('express');
|
const express = require("express");
|
||||||
const cors = require('cors');
|
const cors = require("cors");
|
||||||
|
|
||||||
require('https').globalAgent.keepAlive = true;
|
require("https").globalAgent.keepAlive = true;
|
||||||
|
|
||||||
// WEBHOOKS
|
// WEBHOOKS
|
||||||
const webhooks = express();
|
const webhooks = express();
|
||||||
webhooks.use(cors({ origin: true }));
|
webhooks.use(cors({ origin: true }));
|
||||||
webhooks.all('/conferenceEnded', WebhookModules.conferenceEnd);
|
webhooks.all("/conferenceEnded", WebhookModules.conferenceEnd);
|
||||||
webhooks.all('/scheduledCleanup', WebhookModules.scheduledCleanUp);
|
webhooks.all("/scheduledCleanup", WebhookModules.scheduledCleanUp);
|
||||||
webhooks.all('/ask', WebhookModules.ask);
|
webhooks.all("/ask", WebhookModules.ask);
|
||||||
webhooks.all('/userCleanUp', WebhookModules.userCleanUp);
|
webhooks.all("/userCleanUp", WebhookModules.userCleanUp);
|
||||||
|
webhooks.all("/serverStatus", WebhookModules.serverStatus);
|
||||||
|
|
||||||
module.exports = webhooks;
|
module.exports = webhooks;
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ const conferenceEnd = require("./conferenceEnd");
|
|||||||
const scheduledCleanUp = require("./scheduledCleanUp");
|
const scheduledCleanUp = require("./scheduledCleanUp");
|
||||||
const ask = require("./ask");
|
const ask = require("./ask");
|
||||||
const userCleanUp = require("./userCleanUp");
|
const userCleanUp = require("./userCleanUp");
|
||||||
|
const serverStatus = require("./serverStatus");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
conferenceEnd,
|
conferenceEnd,
|
||||||
scheduledCleanUp,
|
scheduledCleanUp,
|
||||||
ask,
|
ask,
|
||||||
userCleanUp,
|
userCleanUp,
|
||||||
|
serverStatus,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
const admin = require("firebase-admin");
|
||||||
|
|
||||||
|
module.exports = async (req, res) => {
|
||||||
|
const data = await admin
|
||||||
|
.firestore()
|
||||||
|
.collection("server")
|
||||||
|
.doc("status")
|
||||||
|
.get()
|
||||||
|
.then((v) => v.data());
|
||||||
|
res.status(200).send(data);
|
||||||
|
return;
|
||||||
|
};
|
||||||
@@ -0,0 +1,376 @@
|
|||||||
|
<!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="description"
|
||||||
|
content="Watch Party syncs streamed content across devices. Watch your favorites, with your favorite people."
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
name="keywords"
|
||||||
|
content="watch party, sharing, video call, voice phone, free, chrome, firefox, netflix, hulu, disney plus, prime video, youtube, hbo, peacock tv, google play, crunchyroll, apple tv, viki, funimation, roosterteeth, stan, hotstar"
|
||||||
|
/>
|
||||||
|
<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.10</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.firefoxwatchparty.com"
|
||||||
|
class="big-button"
|
||||||
|
data-font="sans"
|
||||||
|
>
|
||||||
|
GET FIREFOX ADD-ON
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://get.edgewatchparty.com"
|
||||||
|
class="big-button"
|
||||||
|
data-font="sans"
|
||||||
|
>
|
||||||
|
GET EDGE ADD-ON
|
||||||
|
</a>
|
||||||
|
<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.10</h4>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p data-font="sans" class="body">ADD DATA BACK-UP SERVICE</p>
|
||||||
|
<p data-font="sans" class="body">IMPROVE ROOM & USER AUTO DELETE</p>
|
||||||
|
<p data-font="sans" class="body">
|
||||||
|
FIX GOOGLE PLAY, APPLE TV, & HOTSTAR SYNC
|
||||||
|
</p>
|
||||||
|
<p data-font="sans" class="body">
|
||||||
|
IMPROVE APPLE TV, FUNIMATION, & CRUNCHYROLL SYNC
|
||||||
|
</p>
|
||||||
|
<p data-font="sans" class="body">COMPLETE ADMIN DASHBOARD</p>
|
||||||
|
<p data-font="sans" class="body">RECOVER FROM DATA FAILURE</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.firefoxwatchparty.com"
|
||||||
|
data-font="sans"
|
||||||
|
>
|
||||||
|
Get Firefox Add-On
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
class="underlink"
|
||||||
|
target="_blank"
|
||||||
|
href="https://get.edgewatchparty.com"
|
||||||
|
data-font="sans"
|
||||||
|
>
|
||||||
|
Get Edge Add-On
|
||||||
|
</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, Microsoft Edge & Mozilla Firefox 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>
|
||||||
Reference in New Issue
Block a user