hello there,
I’m working on a simple implimentation of the last fm api for a school assignment, I have a problem using a search function to search users within the last fm platform.
You can search for a user just fine, but when you want to search for another one, nothing happends. I sort of need to reset the whole search function when a new search is being done.
Here is an example of the current website (try not to mention the bugs :P)
http://stap.iam.hva.nl/~wullem01/eindopdracht/lastfmgame.html
try using the search [omgnoseat] for my account. Now try another search and youll understand my problem.
There also is a problem when the user your searching for doesnt exists, I don’t know how I should cancel the search when no user is found.
import flash.external.ExternalInterface;
var pageURL:String = ExternalInterface.call('window.location.href.toString');
//LAST FM
//maak een nieuwe user aan
var user:User = new User();
//maak een array aan waarin de albums worden opgeslagen
var albumArray:Array = new Array(); //array waarin de album plaatjes worden opgeslagen
var titles:Array = new Array();
var loaderWidth:Number;
var spacing:Number = 200; //spacing for the gallery
//booleans
var firstSearch:Boolean = true;
//om te kijken of de muis over een album is
var mouseOverAlbum:Boolean = false;
//kijken of het info paneel actief is
var panelActive:Boolean = false;
//last fm infos
var albums:XMLList;
var maxAlbums:Number = 20;
var ID:Number;
var infopanel:infoPanel = new infoPanel;
//laat de huidige pagina zien
sendButton.addEventListener(MouseEvent.CLICK, clickSend);
/////////////////////////////////////LAST FM////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
function clickSend(e:MouseEvent):void{
//bij het klikken op de send button, zoek naar de gebruiker die in het textveld is ingevuld
user.getTopAlbums(searchUser.text);
pageInfo.text = "Top Albums " + searchUser.text;
//wanneer er op de knop gedrukt is moeten de albums geladen worden
user.addEventListener(User.GET_TOP_ALBUMS, getTopAlbumsHandler);
}
function getTopAlbumsHandler(event:Event):void{
//(user.xml);
////alleen als de user bestaat een reactie geven
if(! user){
searchUser.text = "De gebruiker bestaat niet!";
}else{
//verwijder de balken op de achtergrond als ze bestaan
//if(stage.contains(balkHolder)){
//removeChild(balkHolder);
//}
albums = user.xml.topalbums.album;
//trace(albums.image.(@size=="medium").children());
//trace(albums.image);
for(var i:Number = 0; i<maxAlbums; i++){
//zoek de albums tot 10 is bereikt, creeer voor elke i een nieuwe loader voor de album art
//maak een nieuwe loader aan en laad de album plaatjes,
var albumHolder:MovieClip = new MovieClip;
albumHolder.ID = i;
albumHolder.buttonMode = true;
var albumLoader:Loader = new Loader;
var artRequest:URLRequest = new URLRequest(albums*.image[1]);
//var artRequest:URLRequest = new URLRequest(albums*.image.(@size=="small").children());
albumLoader.load(artRequest);
//----------------- L O C A T I O N & S I Z E --------------------------------------
//plaats de albums op een willekeurige plek op de stage
albumHolder.x = i*spacing;
albumHolder.y = stage.stageHeight/2;
loaderWidth = albumHolder.width;//width of the loader, needed for boundaries
//------------- A P E A R E N C E --------------------------------
var albumShadow = new DropShadowFilter(1, 90, 0x000000, 0.5, 4, 4);
albumHolder.filters = [albumShadow];
//tekst onder de iconen
var albumText:TextField = new TextField;
//toon de ranking, artiest en het album
albumText.htmlText = "rank: " + albums*.@rank + "
" + albums*.name + "
" + albums*.artist.name ;
albumText.selectable = false;
albumText.wordWrap = true;
//albumText.width = albumLoader.width*1.5;
var txtFormat:TextFormat = new TextFormat();
txtFormat.align = "center";
txtFormat.font = "Arial"
txtFormat.size = 12;
albumText.setTextFormat(txtFormat);
//----------------------------------------------------------------
//zet de albums in een array
albumArray.push(albumHolder);
addChild(albumHolder);
albumHolder.addChild(albumLoader);
//maak de iconen goede hoogte
Tweener.addTween(albumHolder, { time: 1, width: 75, height:75, transition:"easeOutElastic"});
albumLoader.mouseEnabled = false;
albumLoader.mouseChildren = false;
//zet de titles in een array
titles.push(albumText);
addChild(albumText);
//set de albums achter het menu
setChildIndex(albumHolder,numChildren - 2);
//maak elk item in de loop clickbaar
addEventListener(Event.ENTER_FRAME, hitAlbum);
//albumHolder.addEventListener(MouseEvent.CLICK, clickAlbum);
//einde van checken op eerste search
}
}//end of loop
}//end of function
addEventListener(Event.ENTER_FRAME, moveAlbums);
addEventListener(MouseEvent.MOUSE_OVER, overAlbum);
addEventListener(MouseEvent.MOUSE_OUT, outAlbum);
}
function resize():void{
for(var i:Number = 0; i<maxAlbums; i++){
Tweener.addTween(albumArray*, {width:80, height:80, time: 2, transition:"easOutElastic"});
}
}
function overAlbum(e:MouseEvent):void{
mouseOverAlbum = true;
//for(var i:Number = 0; i<maxAlbums; i++){
//Tweener.addTween(e.target, {width:100, height:100, time: 2, transition:"easOutElastic"});
//}
}
function outAlbum(e:MouseEvent):void{
mouseOverAlbum = false;
//for(var i:Number = 0; i<maxAlbums; i++){
//Tweener.addTween(e.target, {width:80, height:80, time: 2, transition:"easOutElastic"});
//}
}
//function moveAlbums(e:MouseEvent):void{
//kijken of het paneel al actief is
//if(panelActive == true){
//infopanel.alpha = 0;
//}else{
//toon het info paneel en de informatie op basis van het movieclip ID;
/*infopanel.x = (stage.stageWidth * 0.5) //- infopanel.width/2;
infopanel.y = (stage.stageHeight * 0.5) + infopanel.height/2;
infopanel.scaleX = 0.8;
infopanel.scaleY = 0.8;
var panelShadow = new DropShadowFilter(1, 90, 0x000000, 0.5, 4, 4);
infopanel.filters = [panelShadow];
infopanel.alpha = 0;
//toon de text van het gekozen plaatje
infopanel.artistInfo.htmlText = "<b>Artiest: </b>" + albums[e.target.ID].artist.name;
infopanel.albumInfo.htmlText = "<b>Album: </b>" + albums[e.target.ID].name;
infopanel.rankInfo.htmlText = "<b>Rank: </b>" + albums[e.target.ID].@rank;
infopanel.playcountInfo.htmlText = "<b>Playcount: </b>" + albums[e.target.ID].playcount;
infopanel.albumArt.source = albums[e.target.ID].image[1];
addChild(infopanel);
//tween the panel
Tweener.addTween(infopanel, { time: 1.5,alpha:1, scaleX:1, scaleY:1, transition:"easeOutElastic"});
//panelActive = true;
removeEventListener(MouseEvent.CLICK, clickAlbum);
infopanel.exitButton.addEventListener(MouseEvent.CLICK, clickExit);
//de iconen moeten niet meer scrollen;
//removeEventListener(Event.ENTER_FRAME, perspectiveMouse);*/
//}//end of else
//}
function clickExit(e:MouseEvent):void{
Tweener.addTween(infopanel, { time: 1,alpha:0, scaleX: 0.8, scaleY: 0.8, transition:"easeInElastic", onComplete:inActive});
}
function inActive():void{
removeChild(infopanel);
panelActive = false;
infopanel.exitButton.removeEventListener(MouseEvent.CLICK, clickExit);
//addEventListener(MouseEvent.CLICK, clickAlbum);
}
function moveAlbums(e:Event):void{
var maxRight:Number = (loaderWidth+spacing)*maxAlbums;
//de maximale rechtse locatie is de breedte van het icoon+de spacing keer het aantal plaatjes, wanneer een icoon op die locatie komt, zal het aan de andere kant van het scherm komen
var maxLeft:Number = (loaderWidth+spacing)*-maxAlbums;
//een loop omdat elk album icoon individueel aangesproken moet worden door de array
for (var i:Number = 0; i<maxAlbums; i++){
//---------------------T I T L E S -------------------------
titles*.x = albumArray*.x - albumArray*.width/3;
titles*.y = albumArray*.y - albumArray*.height*1;
//Z AXIS
//titles*.z = albumArray*.z;// + albumArray*.height;
//100/2 = 50, maar 100/5 = 20, dus hoe kleiner de width, hoe hoger de snelheid
// ---------------------BOUNDARIES & SPEED ------------------------
//albumArray*.x += mouseDistance/speed;
var characterDistance:Number = character.x - (stage.stageWidth/2);
albumArray*.x -= characterDistance/speed;
if((albumArray*.x + albumArray*.width) < maxLeft ){
albumArray*.x = stage.stageWidth + albumArray*.width;}
if((albumArray*.x - albumArray*.width) > maxRight ){
albumArray*.x = 0 - albumArray*.width}
}//end of loop
}//end of function
function hitAlbum(e:Event):void{
for (var i:Number = 0; i<maxAlbums; i++){
if(character.hitTestObject(albumArray*) && falling){
//only if the panel isnt already active
//hittest returned true, trace dus het id waar albumarray true is
//trace(albumArray*.ID);
//play the sound if isn't already playing
if(soundPlaying == false){
sfxSoundChannel = blockSound.play(0, 0);
soundPlaying = true;
}
//block the character from going trough
dy = +5;
if(panelActive == false){
//show info panel
panelActive = true;
infopanel.x = (stage.stageWidth * 0.5) //- infopanel.width/2;
infopanel.y = 0 + infopanel.height*0.75;
infopanel.scaleX = 0.8;
infopanel.scaleY = 0.8;
var panelShadow = new DropShadowFilter(1, 90, 0x000000, 0.5, 4, 4);
infopanel.filters = [panelShadow];
infopanel.alpha = 0;
//toon de text van het gekozen plaatje
infopanel.artistInfo.htmlText = "<b>Artiest: </b>" + albums[albumArray*.ID].artist.name;
infopanel.albumInfo.htmlText = "<b>Album: </b>" + albums[albumArray*.ID].name;
infopanel.rankInfo.htmlText = "<b>Rank: </b>" + albums[albumArray*.ID].@rank;
infopanel.playcountInfo.htmlText = "<b>Playcount: </b>" + albums[albumArray*.ID].playcount;
infopanel.albumArt.source = albums[albumArray*.ID].image[1];
addChild(infopanel);
//tween the panel
Tweener.addTween(infopanel, { time: 1.5,alpha:1, scaleX:1, scaleY:1, transition:"easeOutElastic"});
//panelActive = true;
//removeEventListener(MouseEvent.CLICK, clickAlbum);
infopanel.exitButton.addEventListener(MouseEvent.CLICK, clickExit);
}else{//if the panel is already active
//toon de text van het gekozen plaatje
infopanel.artistInfo.htmlText = "<b>Artiest: </b>" + albums[albumArray*.ID].artist.name;
infopanel.albumInfo.htmlText = "<b>Album: </b>" + albums[albumArray*.ID].name;
infopanel.rankInfo.htmlText = "<b>Rank: </b>" + albums[albumArray*.ID].@rank;
infopanel.playcountInfo.htmlText = "<b>Playcount: </b>" + albums[albumArray*.ID].playcount;
infopanel.albumArt.source = albums[albumArray*.ID].image[1];
}
//end of info panel check
}//end of if
}//end of loop
}
/*
function clickSendAgain(e:MouseEvent):void{
var refreshPage:URLRequest = new URLRequest(pageURL);
navigateToURL(refreshPage, "_blank");
removeEventListener(Event.ENTER_FRAME, moveAlbums);
removeEventListener(MouseEvent.MOUSE_OVER, overAlbum);
removeEventListener(MouseEvent.MOUSE_OUT, outAlbum);
removeEventListener(Event.ENTER_FRAME, hitAlbum);
sendButton.removeEventListener(MouseEvent.CLICK, clickSendAgain);
for(var i:Number = 0; i<maxAlbums; i++){
removeChild(albumArray*);
removeChild(titles*);
}
albumArray = [];
sendButton.addEventListener(MouseEvent.CLICK, clickSend);
}
any help would greatly be appreciated, I need to finish this in 2 days haha.
Thanks in advance