NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Display Active Encodes // @namespace http://tampermonkey.net/ // @version 0.3 // @description When browsing the official HANDJOB thread, the 'Encode History' page is scraped for each user's active encodes. // @author HJ-OTMOP // @license MIT // @copyright 2018, HJ-OTMOP (https://openuserjs.org/users/HJ-OTMOP) // @match https://passthepopcorn.me/*threadid=13617* // @match https://passthepopcorn.me/*threadid=28365* // @match https://passthepopcorn.me/*threadid=13644* // @require http://code.jquery.com/jquery-3.3.1.min.js // @grant GM_xmlhttpRequest // ==/UserScript== // Changelog 0.3 – Added compatibility for when there are more than 50 active encodes on the Encode History page // Changelog 0.2 – Expanded script to work on HANDJOB Scholarship Fund & Request a HANDJOB threads; Fixed "SD x264" to show as "DVDRip / 480p" instead of only "DVDRip" // Changelog 0.1 – First version const encodeHistory = 'https://passthepopcorn.me/encodeoffers.php?search=&format%5B%5D=SdX264&format%5B%5D=Sd576p&format%5B%5D=Hd720p&format%5B%5D=Hd1080p&state%5B%5D=Offered&order_by=time&order_way=desc'; var results = 0; var pages = 0; var active = []; (function() { 'use strict'; injectStyle(); loadHistory(encodeHistory).then(() => loadNext()).catch(e => console.log(e)); })(); function loadNext() { if (pages <= 1) processActive(); else { var promises = []; for (let i = 2; i < pages; i++) { promises.push(loadHistory(encodeHistory + "&page=" + i)); } Promise.all(promises).then(() => processActive()).catch(e => console.log(e)); } } function loadHistory(url) { return new Promise((resolve,reject) => { GM_xmlhttpRequest({ method: "GET", url: url, onload: function(response) { var raw = $( '<div></div>' ); raw.html(response.responseText); $('.table.table--panel-like tbody tr', raw).each(function() { var data = {}; data.link = $(this).find('td a.l_movie').prop('href'); data.title = $(this).find('td a.l_movie').text(); data.res = $(this).find('td:first-child').text().split(" - ").pop(); var regex = /\d{3,4}p/gi; try {data.res = data.res.match(regex)[0];} catch (e) {data.res = "DVDRip / 480p";} data.userid = $(this).find('td a.username').prop('href').split("id=")[1]; data.username = $(this).find('td a.username').text(); data.time = $(this).find('td span.time').attr('title'); data.timerel = $(this).find('td span.time').text(); regex = / \[\d{4}\] /gi; data.year = $(this).find('td:first-child').text().match(regex); data.year = data.year[0].replace(/\W/g, ''); active.push(data); }); if (!results) { results = parseInt($('.search-form__footer__results', raw).text().replace(/\D/gi, "")); pages = (50 * Math.ceil(results/50)) / 50;} resolve(); }, onerror: function (err) { console.log(err); reject(err); } }); }); } function processActive() { active.sort(function(a, b) { var aTime = new Date(a.time).getTime(); var bTime = new Date(b.time).getTime(); return bTime - aTime; }); $('.forum_post').each(function() { addFooter($(this)); var userid = $(this).find("a.username").attr('href'); userid = userid.split("id=")[1]; if (!userid) userid = $(this).find('a.username').attr('data-userid'); var encodes = []; for (let i = 0; i < active.length; i++) { if (userid == active[i].userid) { encodes.push(`<a href="${active[i].link}">${active[i].title}</a> [${active[i].year}] – ${active[i].res} – <span title="${active[i].time}">started ${active[i].timerel}</span>`); } } var encString = encodes.join("<br>"); $(this).find('.forum-post__footer-body').html(encString); if (encString) {$(this).find('.forum-post__footer').slideDown("fast");} }); } function addFooter(el) { $(el).append(`<div class='forum-post__footer'> <div class="forum-post__footer-container"> <div class='forum-post__footer-header'> Encoding:</div> <div class='forum-post__footer-body'></div> </div> </div>`); } function injectStyle() { $("head").append(` <style>.forum-post__footer { display: none; width: 100%; border-top: thin solid #555; } .forum-post__footer-container { display: flex; } .forum-post__footer-header { text-align: left; font-size: 0.9em; font-weight: bold; padding: 5px; } .forum-post__footer-body { flex: 2 0 auto; padding: 5px; font-size: 0.9em; } </style>`); }