Skip to content

Instantly share code, notes, and snippets.

@imlucas
Created May 19, 2009 15:09
Show Gist options
  • Save imlucas/114161 to your computer and use it in GitHub Desktop.
Save imlucas/114161 to your computer and use it in GitHub Desktop.
// ==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 = "&nbsp;<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>&nbsp;";
Playdar.player.register_stream(response.results[0]);
unsafeWindow.jQuery(element).click(function () {
return false;
});
} else {
element.style.backgroundColor = "#c00";
element.innerHTML = '&nbsp;X&nbsp;';
}
}
}
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 = "&nbsp; &nbsp;";
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