package com.joeyrivera.uploader { import flash.display.Sprite; import flash.display.MovieClip; import flash.display.NativeWindow; import flash.text.TextField; import fl.controls.TextArea; import flash.desktop.NativeDragManager; import flash.desktop.NativeApplication; import flash.desktop.Clipboard; import flash.desktop.ClipboardFormats; import flash.filesystem.File; //import flash.filesystem.FileStream; //import flash.filesystem.FileMode; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLLoader; import flash.net.URLVariables; import flash.net.navigateToURL; import flash.events.Event; import flash.events.MouseEvent; import flash.events.FileListEvent; import flash.events.NativeDragEvent; /** * ... * @author Joey Rivera * @version 0.1.0 * 10/29/2008 */ public class Main extends Sprite { private const SERVER:String = 'http://www.yourserver.com/page.ext'; // NEED TO CONFIGURE THIS private var ta_debug:TextArea; private var loader:URLLoader = new URLLoader(); private var request:URLRequest = new URLRequest(); private var variables:URLVariables = new URLVariables(); //private var arrow_default_x:Number = 0; private var arrow_default_y:Number = 0; private var ARROW_MOVE_X:Number = 25; public function Main():void { // create text area ta_debug = new TextArea(); ta_debug.setSize(140, 110); ta_debug.move(5, 35); ta_debug.editable = false; //addChild(ta_debug); // only needed for debuging // track arrow default x and y //arrow_default_x = mc_arrow.x; arrow_default_y = mc_arrow.y; // drag events addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, dragEnter); addEventListener(NativeDragEvent.NATIVE_DRAG_EXIT, dragExit); addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, dragDrop); // button events mc_exit.addEventListener(MouseEvent.CLICK, exitApp); mc_minimize.addEventListener(MouseEvent.CLICK, minimizeApp); mc_drag.addEventListener(MouseEvent.MOUSE_DOWN, dragApp); } private function dragEnter(event:NativeDragEvent):void { // reset mesasge txt_message.text = ''; // move arrow mc_arrow.y = arrow_default_y + ARROW_MOVE_X; NativeDragManager.acceptDragDrop(this); } private function dragExit(event:NativeDragEvent):void { txt_message.text = ''; mc_arrow.y = arrow_default_y; } private function dragDrop(event:NativeDragEvent):void { // check what kind of file was dropped and call appropriate method if(event.clipboard.hasFormat(ClipboardFormats.URL_FORMAT)) { debug(''); debug('URL: getting title'); urlDropped(event.clipboard.getData(ClipboardFormats.URL_FORMAT) as String); } else if(event.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) { debug(''); debug('File: dropped'); fileDropped(event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT)[0] as File); // should only be 1 file } } private function urlDropped(s:String):void { // update message txt_message.text = 'THINKING'; // assign call back loader.addEventListener(Event.COMPLETE, urlLoaded); // load requested url request.url = s; loader.load(request); } private function urlLoaded(event:Event):void { debug('Page loaded'); // get title from html var name:String = grabTitle(event.target.data); debug('Name: ' + name); loader.removeEventListener(Event.COMPLETE, urlLoaded); loader.addEventListener(Event.COMPLETE, serverUpdated); // setup variables variables.name = name; variables.url = request.url; // configure request request.url = SERVER; request.method = URLRequestMethod.POST; request.data = variables; // send the request loader.load(request); //navigateToURL(request); // for testing } private function serverUpdated(event:Event):void { if (loader.data) { debug('Done'); txt_message.text = 'SUCCESS!'; } else { debug('Error'); txt_message.text = 'ERROR'; } // move mouse back mc_arrow.y = arrow_default_y; } private function grabTitle(s:String):String { var start:Number = s.indexOf(''); var end:Number = s.indexOf(''); var title:String = s.substr(start + 7, end - start - 7); return title; } private function fileDropped(f:File):void { debug(f.nativePath); // update message txt_message.text = 'DISABLED!'; // move mouse back mc_arrow.y = arrow_default_y; /* //get the array of files being drug into the app var arr:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array; //grab the files file var f:File = File(arr[0]); //create a FileStream to work with the file var fs:FileStream = new FileStream(); //open the file for reading fs.open(f, FileMode.READ); //read the file as a string var data:String = fs.readUTFBytes(fs.bytesAvailable); //close the file fs.close(); //display the contents of the file ta_debug.text += "\n"+data; */ } private function exitApp(event:MouseEvent):void { NativeApplication.nativeApplication.activeWindow.close(); } private function minimizeApp(event:MouseEvent):void { NativeApplication.nativeApplication.activeWindow.minimize(); } private function dragApp(event:MouseEvent):void { //stage.nativeWindow.startMove(); NativeApplication.nativeApplication.activeWindow.startMove(); } private function debug(s:String):void { if (ta_debug.text == '' || s == '') ta_debug.text = s; else ta_debug.text = ta_debug.text + '\n' + s; } } }