// ==UserScript==
// @name          Last.fm Scrape Loved tracks
// @namespace     http://patraulea.com/gm
// @description   Collects all the tracks when you visit a user's Loved Tracks page (control page: http://patraulea.com/gm/scrapecfg.html )
// @include       http://*last*/user/*/library/loved*
// @include       */scrapecfg.html
// ==/UserScript==


function byId(id) { return document.getElementById(id); }

function clearList() {
	GM_setValue("list", "");
	byId("scrape_csv").innerHTML = "";
}

var listStr = GM_getValue("list", "");

if (! byId("scrape_cfg")) {
	var xpquery = "//table[@id='lovedTracks']/tbody/tr/td[@class='subjectCell']";
	var nodes = document.evaluate(xpquery, document, null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

	var list = listStr.split("\n");

	var dict = {};
	for (var i=0; i<list.length; i++) {
		var items = list[i].split("\t");
		dict[items[0]] = true;
	}

	GM_log("load\n" + listStr);

	for (var i=0; i<nodes.snapshotLength; i++) {
		var td = nodes.snapshotItem(i);
		var artist = td.childNodes[1];
		var track =  td.childNodes[3];

		var items = [track.href, artist.href, track.innerHTML, artist.innerHTML];
		if (! dict[items[0]]) {
			dict[items[0]] = true;
			if (listStr != "") listStr += "\n";
			listStr += items.join("\t");
		}
	}

	GM_log("store\n" + listStr);
	GM_setValue("list", listStr);
} else {
	byId("scrape_csv").innerHTML = listStr;
	byId("scrape_clear").addEventListener('click', clearList, false);
}
