// ==UserScript==
// @name filelist.io torrent filter
// @namespace http://tampermonkey.net/
// @version 0.51
// @description Track favorite torrents on filelist.ro
// @author fatman
// @match http*://filelist.io/*
// @require https://code.jquery.com/jquery-latest.js
// @require https://code.jquery.com/ui/1.12.1/jquery-ui.js
// @resource customCSS https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_setValue
// @grant GM_getValue
// @locale en
// ==/UserScript==
(function () {
'use strict';
var newCSS = GM_getResourceText("customCSS");
newCSS = newCSS.replace(/images\/ui\-icons/g, "https://code.jquery.com/ui/1.12.1/themes/base/images/ui-icons");
GM_addStyle(newCSS);
var matches = GM_getValue('filelist_matches_', [
/(.*)the.walking.dead(.*)/i,
/(.*)the.simpsons(.*)/i,
/(.*)family.guy(.*)/i,
/(.*)(bob.s.burgers|bobs.burgers)(.*)/i,
/(.*)the.man.in.the.high.castle(.*)/i,
/(.*)american.dad(.*)/i,
/(.*)agents.of(.*)/i,
/(.*)(doctor.who|dr.who)(.*)/i,
/(.*)a.series.of.unfortunate.events(.*)/i,
/(.*)expanse(.*)/i]);
var listString = "";
for (var i = 0; i < matches.length; i++) {
listString += matches[i] + (i < matches.length - 1 ? '\n' : '');
var ttt = matches[i];
if (ttt.length > 0) {
ttt = ttt.split('/');
if (ttt.length == 3) {
matches[i] = new RegExp(ttt[1], ttt[2]);
}
}
}
$('li.fleft:last').after('<li class="fleft"><a href="#" id="btn">Matches</a></li>');
$('#wrapper .mainheader').prepend('<div id="dialog" title="Edit RegExp match strings"><textarea id="matchesString" style="font-size:normal;font-family:monospace;min-width:99%;min-height:80%!important;max-height:100%!important">' + listString + '</textarea><br><br><button id="saveMatches">Save</button></div>');
setTimeout(function () {
$('#dialog').dialog({autoOpen: false, resizable: true, height:400, minHeight: 250, minWidth: 250});
$('#btn').css('color', 'red').on("click", function () {
$("#dialog").dialog("open");
});
$('#saveMatches').button().on('click', function () {
var newS = $('#matchesString').val().split('\n');
//nsole.log(newS);
GM_setValue('filelist_matches_', newS);
location.reload();
});
}, 100);
var rndInt = function (min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
};
var hslToRgb = function (h, s, l) {
var r, g, b;
if (s === 0) {
r = g = b = l; // achromatic
} else {
var hue2rgb = function (p, q, t) {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q - p) * 6 * t;
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
return p;
};
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
return 'rgb(' + parseInt(r * 255) + ',' + parseInt(g * 255) + ',' + parseInt(b * 255) + ')';
//return [r * 255, g * 255, b * 255];
};
var getDayOfYear = function () {
var now = new Date();
var start = new Date(now.getFullYear(), 0, 0);
var diff = now - start;
var oneDay = 1000 * 60 * 60 * 24;
var day = Math.floor(diff / oneDay);
//console.log('Day of year: ' + day);
return day;
};
var deltaColor = parseFloat(getDayOfYear() / 365);
var found = [];
var links = $('.torrentrow a[href^="details.php?id="]');
var fidx = 0;
links.each(function () {
var t = $(this).text();
var t2=$(this).siblings('font[class=small]').text();
console.log(t2);
for (var i = 0; i < matches.length; i++) {
if (matches[i] && (t.match(matches[i]) || t2.match(matches[i])) ) {
console.log(t,t2);
var colIndex = ( (i % 2 === 0 ? 0.75 : 0) + deltaColor + i / matches.length) % 1;
var newTextColor = hslToRgb(colIndex, 0.8, 0.3);
$(this).css('color', newTextColor);
var newBgColor = hslToRgb(colIndex, 1, 0.85);
var torrentRow = $(this).closest('.torrentrow').css('background-color', newBgColor);
found.push(torrentRow);
$(this).closest('.torrenttable').nextAll('.torrenttable').eq(6).find('font')
.css({
'color': 'white', 'border': '1px solid white', 'padding': '5px',
'background-color': 'rgba(255,255,255,0.1)',
'min-width': '35px',
'display': 'inline-block'
});
}
}
});
$('.pager').after('<div class="visitedlinks" style="margin-top:10px;" id="FOUND"></div>');
for (var ii = 0; ii < found.length; ii++) {
$('#FOUND').append(found[ii]);
}
var maxTimes=0;
$('font.small:contains("times")').each(function(){
var t=$(this).text();
t=t.substr(0, t.length-5).replace(',','');
maxTimes=Math.max(maxTimes,t);
//console.log(t);
});
$('font.small:contains("times")').each(function(){
var t=$(this).text();
t=t.substr(0, t.length-5).replace(',','');
var num = (7*t/maxTimes).toFixed();
if(num>0){
$(this).parent().css({'background':'red','color':'white'});
}
$(this).text("*".repeat(num)).attr('title', t);
});
})();