v1.5.0/peacock support
This commit is contained in:
@@ -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"],
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
};
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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%;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user