WonderflDownloader

by lizhi
...
@author lizhi
♥0 | Line 145 | Modified 2017-03-07 17:50:58 | MIT License
play

ActionScript3 source code

/**
 * Copyright lizhi ( http://wonderfl.net/user/lizhi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gz3y
 */

package 
{
	import com.bit101.components.HBox;
	import com.bit101.components.InputText;
	import com.bit101.components.Label;
	import com.bit101.components.PushButton;
	import com.bit101.components.Style;
	import com.bit101.components.TextArea;
	import com.bit101.components.VBox;
	import deng.fzip.FZip;
	import deng.fzip.FZipFile;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.FileReference;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	/**
	 * ...
	 * @author lizhi
	 */
	public class WonderflDownloader extends Sprite
	{
		private var user:String;
		private var page:int = 0;
		private var codes:Array = [];
		private var userInput:InputText;
		private var tf:TextArea;
		private var codep:int =-1;
		private var allzip:FZip = new FZip;
		private var isFavorites:Boolean;
		public function WonderflDownloader() 
		{
			Style.embedFonts = false;
			Style.fontSize = 12;
			var vbox:VBox = new VBox(this, 5, 5);
			vbox.spacing = 20;
			var hbox:HBox = new HBox();
			new Label(hbox, 0, 0, "user");
			userInput = new InputText(hbox, 0, 0, "lizhi");
			new PushButton(hbox, 0, 0, "start", startHander);
			new PushButton(hbox, 0, 0, "start favorites", startFavoritesHander);
			vbox.addChild(hbox);
			tf = new TextArea(vbox);
			tf.setSize(400, 400);
		}
		
		private function startHander(e:Event):void 
		{
			isFavorites = false;
			user = userInput.text;
			page = 0;
			nextPage();
		}
		private function startFavoritesHander(e:Event):void 
		{
			isFavorites = true;
			user = userInput.text;
			page = 0;
			nextPage();
		}
		
		private function nextPage():void{
			page++;
			var loader:URLLoader = new URLLoader;
			loader.addEventListener(Event.COMPLETE, loader_complete);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_securityError);
			loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
			if (isFavorites)
			loader.load(new URLRequest("http://wonderfl.net/user/"+user+"/favorites?page=" + page));
			else
			loader.load(new URLRequest("http://wonderfl.net/user/"+user+"/codes?page=" + page));
		}
		
		private function loader_securityError(e:SecurityErrorEvent):void 
		{
			trace2(e.type);
		}
		private function loader_complete(e:Event):void 
		{
			trace2(page,e.type);
			var loader:URLLoader = e.currentTarget as URLLoader;
			var data:String = loader.data +"";
			var reg:RegExp =/id\="code_(\S+)"/mg;
			var obj:Object;
			var have:Boolean = false;
			while ((obj = reg.exec(data)) != null){
				trace2(obj[1]);
				codes.push(obj[1]);
				have = true;
			}
			if(have){
				nextPage();
			}else{
				nextCode();
			}
		}
		
		
		private function loader_ioError(e:IOErrorEvent):void 
		{
			trace2(e.type);
			nextCode();
		}
		
		private function trace2(...args):void{
			trace(args);
			tf.text += args + "\n";
			tf.draw();
			tf.textField.scrollV = tf.textField.maxScrollV;
		}
		
		private function nextCode():void{
			var codeloader:URLLoader = new URLLoader;
			codeloader.dataFormat = URLLoaderDataFormat.BINARY;
			codeloader.addEventListener(Event.COMPLETE, codeloader_complete);
			codeloader.addEventListener(IOErrorEvent.IO_ERROR, codeloader_ioError);
			codeloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, codeloader_securityError);
			
			codep++;
			var code:String = codes[codep];
			if(code){
				codeloader.load(new URLRequest("http://wonderfl.net/c/" + code+"/download"));
			}else{
				var file:FileReference = new FileReference;
				var b:ByteArray = new ByteArray;
				allzip.serialize(b);
				file.save(b, user+(isFavorites?"_favorites_":"") + "_wonderfl.zip");
			}
		}
		
		private function codeloader_securityError(e:SecurityErrorEvent):void 
		{
			trace2(e.type);
		}
		
		private function codeloader_ioError(e:IOErrorEvent):void 
		{
			trace2(e.type, codes[codep], "reload");
			codep--;
			nextCode();
		}
		
		private function codeloader_complete(e:Event):void 
		{
			var data:ByteArray = (e.currentTarget as URLLoader).data as ByteArray;
			var fzip:FZip = new FZip;
			fzip.loadBytes(data);
			for (var i:int = 0; i < fzip.getFileCount();i++ ){
				var f:FZipFile = fzip.getFileAt(i) as FZipFile;
				trace2(f.filename);
				///trace(f.getContentAsString());
			}
			allzip.addFile(codes[codep] + ".zip", data);
			nextCode();
		}
	}

}