Created
May 19, 2009 15:09
-
-
Save imlucas/114161 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Playdar_AmieStreet | |
// @namespace http://www.playdar.org/ | |
// @description Add Playdar links to Amie Street | |
// @include http://amiestreet.com/* | |
// ==/UserScript== | |
function load_script (url) { | |
// Load the playdar.js | |
var s = document.createElement('script'); | |
s.src = url; | |
document.getElementsByTagName("head")[0].appendChild(s); | |
} | |
var playdar_web_host = "www.playdar.org"; | |
// same js is served, this is jsut for log-grepping ease. | |
load_script('http://' + playdar_web_host + '/static/playdar.js?greasemonkey'); | |
load_script('http://' + playdar_web_host + '/static/soundmanager2-nodebug-jsmin.js?greasemonkey'); | |
function GM_wait() { | |
Playdar = unsafeWindow.Playdar; | |
soundManager = unsafeWindow.soundManager; | |
if (typeof Playdar == 'undefined' || typeof soundManager == 'undefined') { | |
unsafeWindow.console.log('Still undefined'); | |
window.setTimeout(GM_wait, 100); | |
} else { | |
setup_playdar(); | |
} | |
} | |
GM_wait(); // wait for playdar.js to load. | |
function setup_playdar () { | |
Playdar.setup({ | |
name: "Amie Street Greasemonkey", | |
website: "http://www.playdar.org/demos/" | |
}); | |
Playdar.client.register_listener('onAuth', function () { | |
insert_play_buttons(); | |
}); | |
soundManager.url = 'http://' + playdar_web_host + '/static/soundmanager2_flash9.swf'; | |
soundManager.flashVersion = 9; | |
soundManager.onload = function () { | |
Playdar.setup_player(soundManager); | |
Playdar.client.init(); | |
}; | |
}; | |
function insert_play_buttons () { | |
// set up a handler for resolved content | |
function results_handler (response, finalanswer) { | |
if (finalanswer) { | |
var element = document.getElementById(response.qid); | |
element.style.backgroundImage = 'none'; | |
if (response.results.length) { | |
// generate tooltip with details: | |
var tt = "Sources: "; | |
for (var i = 0; i < response.results.length; i++) { | |
var result = response.results[i]; | |
tt += result.source + "/" + result.bitrate + "kbps/" + Playdar.Util.mmss(result.duration) + " "; | |
} | |
// update status element: | |
element.style.backgroundColor = "#0a0"; | |
// Just link to the source, too much flash spam: | |
var sid = response.results[0].sid; | |
element.innerHTML = " <a href=\"" + Playdar.client.get_stream_url(sid) + "\" title=\"" + tt + "\" style=\"color: #fff;\" onClick=\"Playdar.player.play_stream('"+sid+"'); return false;\">" + response.results.length + "</a> "; | |
Playdar.player.register_stream(response.results[0]); | |
unsafeWindow.jQuery(element).click(function () { | |
return false; | |
}); | |
} else { | |
element.style.backgroundColor = "#c00"; | |
element.innerHTML = ' X '; | |
} | |
} | |
} | |
resolve_links(results_handler); | |
} | |
function resolve_links (results_handler) { | |
var jStar = unsafeWindow.jQuery || jQuery; | |
var links = jStar('.as-song'); | |
for (var i = 0; i < links.length; i++) { | |
var row = jStar(links[i]); | |
var aTitle = row.find('.as-playbutton').attr('title'); | |
var aTitleRegex = new RegExp(/^Play (Sample|Song)\: ([^+][^\/]*) by ([^+][^\/]*)/); | |
var matches = aTitleRegex.exec(aTitle); | |
if(!matches){ | |
// its in recently listened | |
var p = row.find('.as-song-title'); | |
var link = row.find('a').get(0); | |
var text = jStar.trim(p.text()); | |
var newRegEx = new RegExp((/^([^+][^\/]*) by ([^+][^\/]*)/)); | |
var newMatches = newRegEx.exec(text); | |
var track = jStar.trim(newMatches[2]); | |
var artist = jStar.trim(newMatches[3]); | |
} | |
else{ | |
var artist = matches[3]; | |
var track = matches[2]; | |
var link = row.find('.as-playbutton').get(0); | |
} | |
resolve(link, artist, track, results_handler); | |
} | |
} | |
function start_status (qid, link) { | |
var status = document.createElement('span'); | |
status.id = qid; | |
status.style.cssFloat = "right"; | |
status.style.display = "block"; | |
status.style.border = 0; | |
status.style.margin = "0 5px 0 0"; | |
status.style.backgroundRepeat = "no-repeat"; | |
status.style.backgroundImage = 'url("http://' + playdar_web_host + '/static/spinner_10px.gif")'; | |
status.style.color = "#fff"; | |
status.style.width = "13px"; | |
status.style.height = "13px"; | |
status.style.textAlign = "center"; | |
status.style.fontSize = "9px"; | |
status.innerHTML = " "; | |
var parent = link.parentNode; | |
parent.insertBefore(status, parent.firstChild); | |
} | |
function resolve (link, artist, track, results_handler) { | |
var qid = Playdar.Util.generate_uuid(); | |
// add a "searching..." status : | |
start_status(qid, link); | |
// register results handler and resolve for this qid | |
Playdar.client.register_results_handler(results_handler, qid); | |
Playdar.client.resolve(artist, "", track, qid); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment