FurkThat!

Allows users of furk.net to add files to their account from other sites.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name		FurkThat!
// @namespace	https://furk.net
// @description	Allows users of furk.net to add files to their account from other sites.
// @include		https://kat.cr/*
// @require		http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js

// @version		1.1
// @grant		none
// @icon		furk.net/favicon.ico
// ==/UserScript==

// GITHUB PAGE: https://github.com/DjangoDuck/FurkThat

// Retrieves the info hash depending on which site it is.
// Feel free to add any more websites

// CSS, first a method for adding a style tag with the parameters inside
var furk_addStyle = function (css) {
	var head = document.getElementsByTagName('head')[0],
		style = document.createElement('style');
	if (!head) {
		return;
	}
	style.type = 'text/css';
	style.textContent = css;
	head.appendChild(style);
};

// Adds all the ids and classes, so no need for many .css() methods
furk_addStyle("						\
#furkButtonBar {					\
	padding: 10px 0px 10px 0px;		\
	position: fixed;				\
	bottom: 0;						\
	left: 0;						\
	z-index: 100;					\
	background-color: #F8F8F8;		\
	border: 1px solid #E7E7E7;		\
}									\
.furkButton {						\
	text-decoration: none;			\
	font-size: 12px;				\
	padding: 5px;					\
	margin: 0px 2px 0px 2px;		\
	background-color: #337AB7;		\
	color: white;					\
	cursor: pointer;				\
	border-radius: 4px;				\
}									\
.furkMiniButton {					\
	font-size: 10px;				\
	padding: 3px;					\
}									\
.furkAddMini {						\
	text-alight: right;				\
}									\
.furkButton:hover {					\
	color: white;					\
	background-color: #296191;		\
}									\
.furkPlayButton {					\
	background-color: #449D44;		\
}									\
.furkPlayButton:hover {				\
	background-color: #377c37;		\
}									\
.furkNotifButton {					\
	background-color: #F8F8F8;		\
	color: black;					\
	border: 1px solid #E7E7E7;		\
}									\
.furkNotifButton:hover {			\
	background-color: #F8F8F8;		\
	cursor: default;				\
	color: black;					\
}									\
#furkNotification {					\
	font-size: 12px;				\
	text-decoration: none;			\
	position: fixed;				\
	bottom: 40px;					\
	padding:2px;					\
	left: 0px;						\
	z-index: 100;					\
	background-color: #F8F8F8;		\
	border: 1px solid #E7E7E7;		\
}									\
#furkScreenshots {					\
	width: 100%;					\
	position: fixed;				\
	bottom: 0;						\
	left: 0;						\
	z-index: 99;					\
}									\
.furkReady {						\
	color: green;					\
}									\
.furkNotReady {						\
	color: red;						\
}");


// Makes the notification bar, doesnt happen in furkInitHTML because it is used for errors.
$("body").append("<div id='furkNotification'></div>");
$("#furkNotification").hide();

function furkAddMiniClick () {
	var currentAddBtn = $(this);
	$(currentAddBtn).html("...");

	var sentInfoHash = $(currentAddBtn).data("infohash");
	console.log(sentInfoHash);

	$.ajax({
		url: "https://www.furk.net/api/dl/add",
		jsonp: "jsonp",
		dataType: "jsonp",
		data: {
			info_hash: sentInfoHash,
		},
		success: function (response) {
			console.log(response.status);
			if (response.status != "ok") {
				console.log("Bad response");
				return;
			}
			console.log("Good response");

			var html = "Added | Status: ";
			if(response.dl.dl_status != "failed") {
				html += response.dl.dl_status;
			}
			else {
				html += response.dl.dl_status;
			}
			$(currentAddBtn).html(html);
		}
	});
}

function furkAnalyseTable () {
	// Creates an array of info hashes and finds them as well
		var infoHashGroup = []
		$(".data tr a[title='Torrent magnet link']").each(function() {
			infoHashGroup.push($(this).attr('href').slice(20,60));
		});

		$.ajax({
			url: "https://www.furk.net/api/file/info",
			jsonp: "jsonp",
			dataType: "jsonp",
			data: {
				info_hash: infoHashGroup,
			},
			success: function (response) {
				console.log(response);
				if(response.status != "ok") {
					$("#furkNotification").show();
					if (response.error == "access denied") {
						response.error += " (Please login to Furk.net in another window)"
					}
					$("#furkNotification").html("Error: " + response.error).css("bottom", "0px");
					return;
				}


				// REGEX
				var regTest = /btih:([0-9a-fA-F]{40})/;

				$(".data tr[id^='torrent_']").each(function(tr) {

					var currentInfoHash = $(this).find("a[href^='magnet:']").attr("href").match(regTest)[1];
					console.log(currentInfoHash);
					/*var tr = $(".data tr a[href*='" + file.info_hash + "']").closest("tr");
					if (!tr) {
						console.log("No matching tr found");
						return;
					}*/

					var file = response.files.filter(function(e) {
						return e.info_hash === currentInfoHash
					});
					if(!file || !file[0]) {
						console.log("File not found");

						var addedHTML = "<tr><td colspan='6' style='border-right:0px solid black; padding: 0px 0px 25px 0px'>";
						addedHTML += "<a class='furkButton furkMiniButton furkAddMini' href='javascript:' data-infohash='" + currentInfoHash + "'>Add</a>"
						addedHTML += "</td></tr>";

						$(this).after(addedHTML);

						return;
					}
					console.log(file);
					file = file[0];

					console.log(file);

					var addedHTML = "<tr><td colspan='6' style='border-right:0px solid black; padding: 0px 0px 10px 0px'>";
					addedHTML += "<div style='padding: 0px 0px 0px 2px; ";

					if (file.ss_urls_tn_all) {
						addedHTML += "background-image: url(\"" + file.ss_urls_tn_all + "\"); height:" + (file.ss_height/2) + "px'>"
					}
					else {
						addedHTML += "'>";
					}

					addedHTML += "<a class='furkButton furkMiniButton furkAddMini' href='javascript:' data-infohash='" + file.info_hash + "'>Add</a>"

					// Furk page Button
					if(file.url_page) {
						addedHTML += "<a class='furkButton furkMiniButton' href='https://www.furk.net" + file.url_page + "'>Furk</a>";
					}

					// Download Button
					if(file.url_dl) {
						addedHTML += "<a class='furkButton furkMiniButton' href='" + file.url_dl + "'>Download</a>";
					}

					// Play Button
					if(file.url_pls) {
						addedHTML += "<a class='furkButton furkMiniButton furkPlayButton' href='" + file.url_pls + "'>Play</a>";
					}

					// File ready
					addedHTML += "<br><br><a class='furkButton furkMiniButton furkNotifButton' href='#'>";
					if (file.is_ready == 1) {
						addedHTML += "File status: <span class='furkReady'>ready</span>";
					}
					else {
						addedHTML += "File status: <span class='furkNotReady'>not ready</span>";
					}

					addedHTML += "</div>";
					addedHTML += "</td></tr>";
					console.log(this);
					$(this).after(addedHTML);
				});

				$(".furkAddMini").click(furkAddMiniClick);
			}
	});
}

if (location.hostname == "kat.cr") {
	furkAnalyseTable();

	if ($("#mainDetailsTable").length) {
		console.log($(this));
		var infoHash = $('#thnxLink').data('hash');
		furkAnalyseFile();
	}
}
else if (location.hostname == "torrentz.eu") {
	var infoHash = $('.trackers > div:nth-child(1)').html().substring(11);
}

/*// Uses regex to test the info hash, if it doesnt match the conditions, the whole script stops
var regTest = /^[0-9a-fA-F]{40}$/;
if (!regTest.test(infoHash)) {
	console.log("Info hash doesnt match conditions");
	return;
} */

// This creates the HTML when needed (When the ajax call works).
function furkInitHTML() {
	console.log("furkInitHTML called");

	$("body").append("<div id='furkButtonBar'><a class='furkButton' id='furkAddBtn'>Add</a><a class='furkButton' href='javascript:' id='furkFurkBtn'>Furk</a><a class='furkButton' href='javascript:' id='furkDwnBtn'>Download</a></div>");
}

// This makes the "Add" button actually do something, called after furkInitHTML on the button
function furkAddClick() {
	console.log("The Furk button was clicked.");

	$("#furkNotification").html("...");

	$.ajax({
		url: "https://www.furk.net/api/dl/add",
		jsonp: "jsonp",
		dataType: "jsonp",
		data: {
			info_hash: infoHash,
		},
		success: function (response) {
			console.log(response.status);
			if (response.status != "ok") {
				$("#furkNotification").html("Error: " + response.error);
				$("#furkNotification").show();
				return;
			}
			var html = "Added | Status: ";
			if(response.dl.dl_status != "failed") {
				html += "<span class='furkReady'>" + response.dl.dl_status + "</span>";
			}
			else {
				html += "<span class='furkNotReady'>" + response.dl.dl_status + "</span>";
			}

			$("#furkNotification").html(html);
			$("#furkNotification").show();
		}
	});
}

// Gets the basic info for the torrent.
function furkAnalyseFile () {
	$.ajax({
		url: "https://www.furk.net/api/file/info",
		jsonp: "jsonp",
		dataType: "jsonp",
		data: {
			info_hash: infoHash,
		},
		success: function (response) {
			console.log(response.status);

			// Simulates loading
			$("#furkNotification").html("...");

			// When response isnt "ok"
			if(response.status != "ok") {
				$("#furkNotification").show();
				if (response.error == "access denied") {
					response.error += " (Please login to Furk.net in another window)"
				}
				$("#furkNotification").html("Error: " + response.error).css("bottom", "0px");
				return;
			}

			furkInitHTML();
			$("#furkAddBtn").click(furkAddClick);

			// No files found "if"
			if(!response.files[0]) {
				console.log("No files found on furk");
				$('#furkDwnBtn, #furkFurkBtn').css({"background-color": "#8fc4f2", "cursor": "not-allowed"}).attr('title', "No files found");
				$("#furkNotification").html("No files found on furk");
				return;
			}
			console.log(response.files[0]);


			// is ready? on furk
			var html = "File status: ";
			if (response.files[0].is_ready == 1) {
				html += "<span class='furkReady'>ready</span>";
			}
			else {
				html += "<span class='furkNotReady'>not ready</span>";
			}
			$("#furkNotification").html(html);
			$("#furkNotification").show();


			// Screenshots
			if (response.files[0].ss_urls_tn_all) {
				console.log("Screenshot url found.");
				$("body").append("<div id='furkScreenshots'></div>");
				$("#furkScreenshots").css({"background-image": "url(" + response.files[0].ss_urls_tn_all + ")", "height": response.files[0].ss_height/2});

				// This div is to make sure you can still access the bottom of the page
				$("body").append("<div style='height:150px;'></div>");
			}

			// Furk page
			if(response.files[0].url_page) {
				$('#furkFurkBtn').attr('href', 'https://www.furk.net' + response.files[0].url_page);
			}

			// Download link
			if(response.files[0].url_dl) {
				console.log("Url_dl found.");
				$('#furkDwnBtn').attr('href', response.files[0].url_dl);
			}

			// Play url
			if (response.files[0].url_pls) {
				console.log("Url_pls found.");
				$('#furkButtonBar').append("<a class='furkButton furkPlayButton' href='" + response.files[0].url_pls + "'>Play</a>");
			}
		}
	});
}