package com.dougmccune.muxmaster.api
{
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
[Event(name="complete", type="flash.events.Event")]
[Event(name="fault", type="mx.rpc.events.FaultEvent")]
[Bindable]
public class MuxPlaylist extends EventDispatcher
{
namespace ns = "http://www.w3.org/1999/xhtml";
public var songs:Array;
public var relatedUsers:Array;
public var color:uint;
public var totalDuration:Number;
private var _user:String;
public function get user():String {
return _user;
}
public function set user(value:String):void {
_user = value;
load(_user);
}
private function load(user:String):void {
var url:String = "http://" + user + ".muxtape.com";
var loader:HTTPService = new HTTPService();
loader.url = url;
loader.resultFormat = HTTPService.RESULT_FORMAT_E4X;
loader.addEventListener(ResultEvent.RESULT, resultHandler);
loader.send();
}
private function resultHandler(event:ResultEvent):void {
use namespace ns;
var result:XML = event.result as XML;
if(result.head.title == "Muxtape") {
dispatchEvent(new FaultEvent(FaultEvent.FAULT));
return;
}
var related:XMLList = result.body.div.div.div.ul.li.a;
relatedUsers = [];
for each(var userXML:XML in related) {
relatedUsers.push(userXML.toString());
}
var styleInfo:String = result.head.style;
color = parseInt(styleInfo.substring(styleInfo.indexOf(": #") + 3, styleInfo.indexOf("; }")), 16);
var txt:String = result.toXMLString();
txt = txt.substr(txt.indexOf("new Kettle(['") + 13);
txt = txt.substring(0, txt.indexOf("']"));
var hexIDs:Array = txt.split("','");
txt = result.toXMLString();
txt = txt.substr(txt.indexOf("'],['") + 5);
txt = txt.substring(0, txt.indexOf("']);"));
var awsKeys:Array = txt.split("','");
var songs:XMLList = result.body.div.ul.li;
var muxSongs:Array = [];
totalDuration = 0;
for(var i:int=0; i<songs.length(); i++) {
var song:XML = songs[i];
var muxSong:MuxSong = new MuxSong();
muxSong.artist = song.div[0].split(" - ")[0];
muxSong.track = song.div[0].split(" - ")[1];
var seconds:int = parseInt(song.div[1].strong.split(":")[1]);
var minutes:int = parseInt(song.div[1].strong.split(":")[0]);
muxSong.length = (minutes*60 + seconds) * 1000;
var awsKey:String = awsKeys[i];
awsKey = awsKey.replace(new RegExp("&", "g"), "&");
muxSong.url = "http://muxtape.s3.amazonaws.com/songs/" + hexIDs[i] + "?" + awsKey;
muxSongs.push(muxSong);
totalDuration += muxSong.length;
}
this.songs = muxSongs;
dispatchEvent(new Event(Event.COMPLETE));
}
}
}