package com.joeyrivera.uploader { import flash.desktop.InteractiveIcon; import flash.display.Sprite; import flash.display.MovieClip; import flash.display.NativeWindow; import flash.net.FileReference; 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.2.0 * 11/14/2008 */ public class Main extends Sprite { private const SERVER:String = 'http://www.yoursite.com/file.etx'; // 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; private var image_formats:Array = ['jpg','gif','png']; 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'); } } private function urlDropped(s:String):void { // update message txt_message.text = 'THINKING'; // check if image or page - might need to validate for other files such as audio later isImage(s) ? urlImage(s) : urlPage(s); } private function urlImage(s:String):void { loader.addEventListener(Event.COMPLETE, serverUpdated); // setup variables variables.name = '--@IMAGE@--'; variables.url = s; // configure request request.url = SERVER; request.method = URLRequestMethod.POST; request.data = variables; // send the request loader.load(request); //navigateToURL(request); // for testing } private function urlPage(s:String):void { // 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 something if no title - FIX IT! return title; } private function imageDropped(f:File):void { debug(f.nativePath); // if url need to check if image and tell the server to download that image and do it all // if local file then need to do an upload routine } private function fileDropped(f:File):void { debug(f.nativePath); // update message txt_message.text = 'DISABLED!'; // move mouse back mc_arrow.y = arrow_default_y; } 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; } private function isImage(s:String):Boolean { var ext:String = s.substr(s.lastIndexOf('.') + 1); for (var x:int = 0; x < image_formats.length; x++) { if (image_formats[x].toLowerCase() == ext.toLowerCase()) return true; } return false; } } }