Mercurial > hg > audiodb
changeset 734:35bfc91b67d3
Added initial search functions and tests.
author | mas01mj |
---|---|
date | Wed, 15 Sep 2010 11:59:47 +0000 |
parents | 4c89dccdd4a9 |
children | c625f52cf9b4 |
files | bindings/as3/build/as3bridge.swf bindings/as3/src/org/omras2/audiodb/Querier.as bindings/as3/src/org/omras2/audiodb/SearchEvent.as bindings/as3/src/org/omras2/audiodb/model/SearchResult.as bindings/as3/src/tests/AllTests.as bindings/as3/src/tests/TestQuerier.as |
diffstat | 6 files changed, 191 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/bindings/as3/src/org/omras2/audiodb/Querier.as Wed Sep 15 11:05:12 2010 +0000 +++ b/bindings/as3/src/org/omras2/audiodb/Querier.as Wed Sep 15 11:59:47 2010 +0000 @@ -2,6 +2,7 @@ { import com.adobe.serialization.json.JSON; + import org.omras2.audiodb.model.SearchResult; import org.omras2.audiodb.model.Track; import flash.events.ErrorEvent; @@ -27,6 +28,10 @@ this._trackCache = new Dictionary(); } + /** + * Metadata handling + */ + public function lookup(uid : String) : void { if(_trackCache[uid]) @@ -50,22 +55,15 @@ this.dispatchEvent(err); } - loader.addEventListener(IOErrorEvent.IO_ERROR, this.handleLoadError); - loader.addEventListener(Event.COMPLETE, this.handleLoadComplete); + loader.addEventListener(IOErrorEvent.IO_ERROR, this.handleQueryError); + loader.addEventListener(Event.COMPLETE, this.handleLookupComplete); } } - private function handleLoadComplete(event : Event) : void + private function handleLookupComplete(event : Event) : void { - var data : String = (event.target as URLLoader).data as String; - var response : Object = (JSON.decode(data) as Object); - if(response['status'] != 'ok') - { - var err : ErrorEvent = new ErrorEvent(ErrorEvent.ERROR); - err.text = response['message']; - this.dispatchEvent(err); - } - else + var response : Object = getResponse(event); + if(validResponse(response)) { var track : Track = Track.createFromResponse(response['data']); _trackCache[track.uid] = track; @@ -73,7 +71,69 @@ } } - private function handleLoadError(event : IOErrorEvent) : void + /** + * Search handling + */ + + public function search(uid : String) : void + { + var url : String = _endpoint + "/search/" + uid; + var req : URLRequest = new URLRequest(url); + var loader : URLLoader = new URLLoader(); + + try + { + loader.load(req); + } + catch(error : SecurityError) + { + var err : ErrorEvent = new ErrorEvent(ErrorEvent.ERROR); + err.text = error.message; + this.dispatchEvent(err); + } + + loader.addEventListener(IOErrorEvent.IO_ERROR, this.handleQueryError); + loader.addEventListener(Event.COMPLETE, this.handleSearchComplete); + } + + private function handleSearchComplete(event : Event) : void + { + var response : Object = getResponse(event); + if(validResponse(response)) + { + var results : Array = []; + for each(var result : Array in response['data']) + { + results.push(SearchResult.createFromResponse(result)); + } + this.dispatchEvent(new SearchEvent(LookupEvent.COMPLETE, results)); + } + } + + /** + * Reusable parsing / error functions + */ + + private function getResponse(event : Event) : Object + { + var data : String = (event.target as URLLoader).data as String; + var response : Object = (JSON.decode(data) as Object); + return response; + } + + private function validResponse(response : Object) : Boolean + { + if(response['status'] != 'ok') + { + var err : ErrorEvent = new ErrorEvent(ErrorEvent.ERROR); + err.text = response['message']; + this.dispatchEvent(err); + return false; + } + return true; + } + + private function handleQueryError(event : IOErrorEvent) : void { this.dispatchEvent(event); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bindings/as3/src/org/omras2/audiodb/SearchEvent.as Wed Sep 15 11:59:47 2010 +0000 @@ -0,0 +1,30 @@ +package org.omras2.audiodb +{ + import flash.events.Event; + + /** + * @author mikej + */ + public class SearchEvent extends Event + { + public static const COMPLETE : String = "complete"; + private var _results : Array; + + public function SearchEvent(type : String, results : Array, bubbles : Boolean = false, cancelable : Boolean = false) + { + this._results = results; + super(type, bubbles, cancelable); + } + + + public override function clone() : Event + { + return new SearchEvent(type, _results, bubbles, cancelable); + } + + public function get results() : Array + { + return _results; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bindings/as3/src/org/omras2/audiodb/model/SearchResult.as Wed Sep 15 11:59:47 2010 +0000 @@ -0,0 +1,69 @@ +package org.omras2.audiodb.model +{ + + /** + * @author mikej + */ + public class SearchResult + { + private var _uid : String; + private var _dist : Number; + private var _qpos : Number; + private var _ipos : Number; + + public static function createFromResponse(response : Array) : SearchResult + { + var searchResult : SearchResult = new SearchResult(); + searchResult.uid = response[0]; + searchResult.dist = response[1]; + searchResult.qpos = response[2]; + searchResult.ipos = response[3]; + return searchResult; + } + + public function get uid() : String + { + return _uid; + } + + public function set uid(uid : String) : void + { + _uid = uid; + } + + public function get dist() : Number + { + return _dist; + } + + public function set dist(dist : Number) : void + { + _dist = dist; + } + + public function get qpos() : Number + { + return _qpos; + } + + public function set qpos(qpos : Number) : void + { + _qpos = qpos; + } + + public function get ipos() : Number + { + return _ipos; + } + + public function set ipos(ipos : Number) : void + { + _ipos = ipos; + } + + public function toString() : String + { + return "[SearchResult uid="+uid+" dist="+dist+" qpos="+qpos+" ipos="+ipos+"]"; + } + } +}
--- a/bindings/as3/src/tests/AllTests.as Wed Sep 15 11:05:12 2010 +0000 +++ b/bindings/as3/src/tests/AllTests.as Wed Sep 15 11:59:47 2010 +0000 @@ -14,6 +14,7 @@ addTest(new TestQuerier("testLookupSuccess")); addTest(new TestQuerier("testLookupFail")); + addTest(new TestQuerier("testSearchSuccess")); } } }
--- a/bindings/as3/src/tests/TestQuerier.as Wed Sep 15 11:05:12 2010 +0000 +++ b/bindings/as3/src/tests/TestQuerier.as Wed Sep 15 11:59:47 2010 +0000 @@ -4,6 +4,8 @@ import org.omras2.audiodb.LookupEvent; import org.omras2.audiodb.Querier; + import org.omras2.audiodb.SearchEvent; + import org.omras2.audiodb.model.SearchResult; import flash.events.ErrorEvent; @@ -50,5 +52,21 @@ assertEquals(event.track.artist, 'Moscow Drive'); assertEquals(event.track.seconds, '221000'); } + + public function testSearchSuccess() : void + { + var handler : Function = addAsync(handleSearchSuccessComplete, 10000); + _querier.addEventListener(SearchEvent.COMPLETE, handler); + _querier.search("AWAL1000"); + } + + protected function handleSearchSuccessComplete(event : SearchEvent) : void + { + assertEquals(20, event.results.length); + var firstMatch : SearchResult = (event.results[0] as SearchResult); + assertEquals("AWAL1000", firstMatch.uid); + assertEquals(0, firstMatch.ipos); + assertEquals(0, firstMatch.qpos); + } } }