v1.5.0/peacock support

This commit is contained in:
2020-07-20 23:17:26 -04:00
parent ef18d37209
commit 133d9b26a8
6 changed files with 169 additions and 2 deletions
+4 -2
View File
@@ -16,7 +16,8 @@
"https://*.disneyplus.com/*", "https://*.disneyplus.com/*",
"https://*.youtube.com/*", "https://*.youtube.com/*",
"https://play.hbonow.com/*", "https://play.hbonow.com/*",
"https://play.hbomax.com/*" "https://play.hbomax.com/*",
"https://*.peacocktv.com/*"
], ],
"content_security_policy": "script-src 'self' https://www.gstatic.com/ https://*.firebaseio.com https://www.googleapis.com; object-src 'self'", "content_security_policy": "script-src 'self' https://www.gstatic.com/ https://*.firebaseio.com https://www.googleapis.com; object-src 'self'",
"content_scripts": [ "content_scripts": [
@@ -28,7 +29,8 @@
"https://*.disneyplus.com/*", "https://*.disneyplus.com/*",
"https://*.youtube.com/*", "https://*.youtube.com/*",
"https://play.hbonow.com/*", "https://play.hbonow.com/*",
"https://play.hbomax.com/*" "https://play.hbomax.com/*",
"https://*.peacocktv.com/*"
], ],
"run_at": "document_idle", "run_at": "document_idle",
"js": ["/static/js/content.js"], "js": ["/static/js/content.js"],
+2
View File
@@ -36,6 +36,7 @@ export const PLAYER_SOURCE = {
YOUTUBE: 'youtube.', YOUTUBE: 'youtube.',
HBONOW: 'hbonow.', HBONOW: 'hbonow.',
HBOMAX: 'hbomax.', HBOMAX: 'hbomax.',
PEACOCK: 'peacocktv.',
LOCAL: 'localhost', LOCAL: 'localhost',
}; };
@@ -48,6 +49,7 @@ export const getPlayerSource = () => {
if (HREF.includes(PLAYER_SOURCE.YOUTUBE)) return PLAYER_SOURCE.YOUTUBE; if (HREF.includes(PLAYER_SOURCE.YOUTUBE)) return PLAYER_SOURCE.YOUTUBE;
if (HREF.includes(PLAYER_SOURCE.HBONOW)) return PLAYER_SOURCE.HBONOW; if (HREF.includes(PLAYER_SOURCE.HBONOW)) return PLAYER_SOURCE.HBONOW;
if (HREF.includes(PLAYER_SOURCE.HBOMAX)) return PLAYER_SOURCE.HBOMAX; if (HREF.includes(PLAYER_SOURCE.HBOMAX)) return PLAYER_SOURCE.HBOMAX;
if (HREF.includes(PLAYER_SOURCE.PEACOCK)) return PLAYER_SOURCE.PEACOCK;
if (HREF.includes(PLAYER_SOURCE.LOCAL)) return PLAYER_SOURCE.LOCAL; if (HREF.includes(PLAYER_SOURCE.LOCAL)) return PLAYER_SOURCE.LOCAL;
}; };
+95
View File
@@ -0,0 +1,95 @@
/************************************************************************
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 IN WATCH PARTY'S CHROME EXTENSION APP, UNLESS OTHERWISE
CITED ARE THE SOLE INTELECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE
COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION.
Netflix logo is a trademark and intellectual property of Netflix, Inc.
Disney+ logo is a trademark and intellectual property of The Walt Disney Company
Prime logo is a trademark and intellectual property of Amazon.com, Inc.
YouTube logo is a trademark and intellectual property of Google, Inc.
Hulu logo is a trademark and intellectual property of Hulu, LLC.
HBO Now and HBO Max logos are trademark and intellectual property of WarnerMedia Direct,LLC.
************************************************************************/
/************************************************************************
THE CODE BELOW WAS WRITTEN BY USER
https://stackoverflow.com/users/68808/tweezz
ON STACKOVERFLOW, WHICH CAN BE FOUND AT
https://stackoverflow.com/questions/6157929/how-to-simulate-a-mouse-click-using-javascript
************************************************************************/
export default function simulate(element, eventName) {
var options = extend(defaultOptions, arguments[2] || {});
var oEvent,
eventType = null;
for (var name in eventMatchers) {
if (eventMatchers[name].test(eventName)) {
eventType = name;
break;
}
}
if (!eventType) throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');
if (document.createEvent) {
oEvent = document.createEvent(eventType);
if (eventType == 'HTMLEvents') {
oEvent.initEvent(eventName, options.bubbles, options.cancelable);
} else {
oEvent.initMouseEvent(
eventName,
options.bubbles,
options.cancelable,
document.defaultView,
options.button,
options.pointerX,
options.pointerY,
options.pointerX,
options.pointerY,
options.ctrlKey,
options.altKey,
options.shiftKey,
options.metaKey,
options.button,
element
);
}
element.dispatchEvent(oEvent);
} else {
options.clientX = options.pointerX;
options.clientY = options.pointerY;
var evt = document.createEventObject();
oEvent = extend(evt, options);
element.fireEvent('on' + eventName, oEvent);
}
return element;
}
function extend(destination, source) {
for (var property in source) destination[property] = source[property];
return destination;
}
const eventMatchers = {
HTMLEvents: /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
MouseEvents: /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/,
};
const defaultOptions = {
pointerX: 0,
pointerY: 0,
button: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
bubbles: true,
cancelable: true,
};
+50
View File
@@ -17,6 +17,7 @@ Hulu logo is a trademark and intellectual property of Hulu, LLC.
HBO Now and HBO Max logos are trademark and intellectual property of WarnerMedia Direct,LLC. HBO Now and HBO Max logos are trademark and intellectual property of WarnerMedia Direct,LLC.
************************************************************************/ ************************************************************************/
import { PLAYER_STATUS, getPlayerSource, PLAYER_SOURCE, LocalData } from './Api'; import { PLAYER_STATUS, getPlayerSource, PLAYER_SOURCE, LocalData } from './Api';
import simulate from './ClickSimulator';
const templateListener = (video) => console.log('MISSING VIDEO LISTENER'); const templateListener = (video) => console.log('MISSING VIDEO LISTENER');
@@ -103,6 +104,15 @@ export default class VideoListener {
case PLAYER_SOURCE.HBONOW: case PLAYER_SOURCE.HBONOW:
this.video.element.currentTime = serverPlayer.time; this.video.element.currentTime = serverPlayer.time;
break; break;
case PLAYER_SOURCE.PEACOCK:
this.video.element.pause();
const sliderHead = document.body.querySelector(
'.playback-scrubber-bar .rc-slider-handle'
);
sliderHead.left =
(serverPlayer.time / sliderHead.getAttribute('aria-valueMax')) * 100 + '%';
simulate(sliderHead, 'mousedown');
simulate(sliderHead, 'mouseup');
default: default:
break; break;
} }
@@ -198,6 +208,20 @@ export default class VideoListener {
const hboshow = document.querySelector('#hboUpperTitle').innerText; const hboshow = document.querySelector('#hboUpperTitle').innerText;
const hboepisode = document.querySelector('#hboLowerTitle').innerText; const hboepisode = document.querySelector('#hboLowerTitle').innerText;
return hboshow === '' && hboepisode === '' ? null : hboshow + '\n' + hboepisode; return hboshow === '' && hboepisode === '' ? null : hboshow + '\n' + hboepisode;
case PLAYER_SOURCE.PEACOCK:
try {
const peacockshow = document.querySelector(
'.item.playback-metadata__container-episode-metadata-info'
).innerText;
const peacockepisode = document.querySelector('.item.playback-metadata__container-title')
.innerText;
return peacockshow === '' && peacockepisode === ''
? null
: peacockshow + '\n' + peacockepisode;
} catch (err) {
// PREVIEW VIDEO, NO NEED TO GET NAME
return null;
}
default: default:
break; break;
} }
@@ -352,6 +376,32 @@ export default class VideoListener {
); );
} }
break; break;
case PLAYER_SOURCE.PEACOCK:
const peacockVideoElement = document.querySelector(
'.video-player-component.playback-component video'
);
if (peacockVideoElement) {
this.firstTimeSync(peacockVideoElement);
} else {
setInterval(
this.video.element
? null
: () => {
var pve = document.querySelector(
'.video-player-component.playback-component video'
);
if (
pve !== null &&
pve !== undefined &&
(this.video.element !== pve || this.video.element === null)
) {
this.firstTimeSync(pve);
}
},
1000
);
}
break;
case PLAYER_SOURCE.LOCAL: case PLAYER_SOURCE.LOCAL:
const localVideoElement = document.getElementsByTagName('video')[0]; const localVideoElement = document.getElementsByTagName('video')[0];
if (localVideoElement) { if (localVideoElement) {
+15
View File
@@ -111,6 +111,21 @@ body.amazon-prime textarea:focus {
border: none !important; border: none !important;
box-shadow: none !important; box-shadow: none !important;
} }
/* PEACOCK STYLING FIX */
body.peacock.visible .header-buttons {
max-width: calc(100% - calc(var(--party-width) + 50px));
}
body.peacock.visible #mount {
position: relative;
}
body.peacock.visible .playback-overlay__container.vod {
position: absolute;
max-width: 100%;
}
body.peacock.visible .playback-header__container {
position: relative;
max-width: 100%;
}
#party-loading { #party-loading {
position: absolute; position: absolute;
width: 100%; width: 100%;
+3
View File
@@ -79,6 +79,9 @@ switch (getPlayerSource()) {
document.head.appendChild(hboClickInjectScript); document.head.appendChild(hboClickInjectScript);
document.body.classList.add('hbo'); document.body.classList.add('hbo');
break; break;
case PLAYER_SOURCE.PEACOCK:
document.body.classList.add('peacock');
break;
case PLAYER_SOURCE.LOCAL: case PLAYER_SOURCE.LOCAL:
document.body.classList.add('local'); document.body.classList.add('local');
break; break;