NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Bauer sucht frau script // @namespace https://ffactory.ml/ // @version 0.1 // @description love yu :) // @author Filippo Orru // @match https://www.atv.at/tv/bauer-sucht-frau/* // @icon https://www.google.com/s2/favicons?domain=mozilla.org // @updateURL https://openuserjs.org/meta/ffactory/Bauer_sucht_frau_script.meta.js // @downloadURL https://openuserjs.org/install/ffactory/Bauer_sucht_frau_script.user.js // @copyright 2021, ffactory (https://openuserjs.org/users/ffactory) // @license MIT // @grant none // @run-at document-end // ==/UserScript== (function () { 'use strict'; if (window.top != window.self) { //-- Don't run on frames or iframes return; } function main() { let ws const video = document.getElementsByClassName("_oasis_video")[0]; // State let joinedGroup = false; let ignoreNextSend = false; let ignoreNextReceive = false; function createWs(host, groupName) { ws = new WebSocket('wss://' + host + "/"); ws.onopen = function () { ws.send("HELLO," + groupName); joinedGroup = true; } ws.onmessage = function (e) { let parts = e.data.split(","); if (parts.length > 1 && parts[0] == 'EVENT') { if (ignoreNextReceive === true) { ignoreNextReceive = false; } else { ignoreNextSend = true; let eventType = parts[1]; let totalDuration = parseFloat(parts[2]); let currentTime = parseFloat(parts[3]); if (totalDuration === video.duration) { if (eventType == 'PLAY') { video.play(); } else if (eventType == 'PAUSE') { video.pause(); //} else if (eventType == 'SETTIME') { } video.currentTime = currentTime; } } } }; ws.onclose = function () { console.log("closed"); }; ws.onerror = function (e) { console.log("error", e) }; } function createForm() { let label = document.createElement("label"); label.innerText = "Enter a group name:"; label.for = "groupName"; let input = document.createElement("input"); input.type = "text"; input.name = "groupName"; let button = document.createElement("button"); button.innerText = "Join group!"; let form = document.createElement("form"); form.id = "groupNameForm"; form.appendChild(label); form.appendChild(input); form.appendChild(button); form.addEventListener('submit', function (e) { e.preventDefault(); e.stopPropagation(); let input = document.querySelector('input[name=groupName]').value; let host = input.split("@")[0]; let groupName = input.split("@")[1]; if (groupName && groupName.length > 3) { video.classList.remove("hidden"); createWs(host, groupName); } }); document.getElementsByClassName("video-player-parking-lot ")[0].appendChild(form); } createForm(); video.addEventListener("play", function () { if (video.duration < 300) { // skip ad video.currentTime = video.duration - 1; } else { if (joinedGroup) { if (!ignoreNextSend) { ignoreNextReceive = true; ws.send("EVENT,PLAY," + video.duration.toString() + "," + video.currentTime.toString()); } else { ignoreNextSend = false; } } } }); video.addEventListener("pause", function () { if (joinedGroup) { if (!ignoreNextSend) { ignoreNextReceive = true; ws.send("EVENT,PAUSE," + video.duration.toString() + "," + video.currentTime.toString()); } else { ignoreNextSend = false; } } }); } let startupInterval function startup() { if (document.getElementsByClassName("_oasis_video").length > 0) { window.clearInterval(startupInterval); main(); } else { console.log("waiting for startup"); } } startupInterval = window.setInterval(startup, 4000); })();