Skip to content

Instantly share code, notes, and snippets.

@astein
Created March 16, 2013 00:46
Show Gist options
  • Save astein/662aa11a5707800e56cd to your computer and use it in GitHub Desktop.
Save astein/662aa11a5707800e56cd to your computer and use it in GitHub Desktop.
Jack in the Box photo upload
package com.socialvibe.modules.logic
{
import com.adobe.images.PNGEnc;
import com.adobe.utils.ArrayUtil;
import com.socialvibe.core.ui.components.*;
import com.socialvibe.core.ui.controls.*;
import com.socialvibe.core.utils.*;
import com.socialvibe.engagement.EngagementParameters;
import com.socialvibe.engagement.EngagementTracking;
import com.socialvibe.engagement.controller.*;
import com.socialvibe.engagement.controller.actions.NavigationAction;
import com.socialvibe.engagement.view.controls.video.SVVideo;
import com.socialvibe.engagement.view.controls.video.VideoPlayerBase;
import com.socialvibe.modules.controls.ScrollableList;
import com.socialvibe.tools.builder.BuilderEngagementBase;
import com.socialvibe.tools.builder.model.BuilderEngagementMaterial;
import com.socialvibe.tools.builder.model.BuilderToolset;
import com.socialvibe.tools.builder.view.panels.EngagementStep;
import com.socialvibe.engagement.EngagementUtils;
import flash.display.*;
import flash.events.*;
import flash.external.*;
import flash.net.*;
import flash.system.LoaderContext;
import flash.text.Font;
import flash.utils.*;
public class QuickLogic extends CustomLogicControllerBase
{
private var _drawApp:Object;
private var _canContinue:Boolean;
private var _drawing:BitmapData;
private var _imageUploader:ImageUploader;
private var _drawingUrl:String;
public function QuickLogic() { }
override public function getControllerName():String { return 'jack_in_box_upload_logic'; }
override public function applyLogic(steps:Array):void
{
_material.base.addEventListener('start_upload', uploadIt);
_material.base.addEventListener('tweet_it', tweetIt);
}
protected function saveIt(e:Event):void
{
var mock:BitmapData = new BitmapData(_drawing.width, _drawing.height);
mock.draw(_drawing);
var savedFile:FileReference = new FileReference();
savedFile.save(PNGEnc.encode(mock), 'jack_in_the_box.png');
}
protected function uploadIt(e:Event):void
{
_drawApp = e.target;
_drawing = new BitmapData(750, 500);
_drawing.draw(_drawApp.board)
startUpload();
}
protected function tweetIt(e:Event):void
{
var tracker:EngagementTracking = EngagementTracking.getInstance();
tracker.trackEvent(tracker.tracking_events.SHARE, tracker.share_types.TWITTER, _params.activity_id);
_api.trackOtherInteraction('shared_drawing_url', _drawingUrl);
EngagementUtils.onTwitterShare('Can\'t stop singing Meat Riot’s one hit wonder, #HotMess. Check me out here:', _drawingUrl);
}
private function startUpload():void
{
_imageUploader = new ImageUploader( _drawing );
_imageUploader.addEventListener( ImageUploader.ASSET_UPLOAD_COMPLETE, onImageUploaded, false, 0, true );
}
protected function onImageUploaded(e:SVEvent):void
{
_drawingUrl = e.data as String;
_drawingUrl = _drawingUrl.replace('s3.amazonaws.com/', '');
_params.share_img_url = _drawingUrl;
_drawApp.uploadReady();
}
}
}
import com.adobe.images.JPGEncoder;
import com.adobe.serialization.json.JSONDecoder;
import com.socialvibe.core.config.Services;
import com.socialvibe.core.utils.AssetCache;
import com.socialvibe.core.utils.SVEvent;
import com.socialvibe.engagement.EngagementAPI;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import ru.inspirit.MultipartURLLoader;
internal class ImageUploader extends EventDispatcher
{
public static const ASSET_UPLOAD_COMPLETE:String = 'assetUploadComplete';
protected var _loader:MultipartURLLoader;
protected var _name:String;
protected var _assetURL:String;
protected var _assetID:Number;
protected var _assetName:String;
public function ImageUploader( image:BitmapData ):void
{
_loader = new MultipartURLLoader();
_loader.addEventListener(Event.COMPLETE, onFileUploaded);
_loader.addVariable('commit', 'Create');
_loader.addFile( (new JPGEncoder(80).encode( image ) ), 'jack_in_the_box.jpg', "photo", 'image/jpg');
_loader.load( Services.PARTNER_URL + '/engagements/create_photo.xml' );
}
protected function onFileUploaded(e:Event = null):void
{
_assetURL = _loader.loader.data;
var _api:EngagementAPI = EngagementAPI.getInstance();
_api.trackUpload( _assetURL, true )
dispatchEvent( new SVEvent( ASSET_UPLOAD_COMPLETE, _assetURL, true, true ) );
}
protected function jsonDecode(json:String):Object
{
if (json)
{
try {
return new JSONDecoder(json).getValue();
} catch (e:Error) { }
}
return null;
}
public function get assetURL():String { return _assetURL; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment