Storage.as 1.33 KB
import flash.external.ExternalInterface;

class Storage {
	static var app : Storage;
	var store: SharedObject;
	static var started: Boolean = false;
	
	public function Storage(){
		ExternalInterface.addCallback("set", null, set);
		ExternalInterface.addCallback("get", null, get);
		ExternalInterface.addCallback("free", null, free);
	}

	public function set(key, value, namespace){
		var primeForReHide = false;
		store = SharedObject.getLocal(namespace);
		store.onStatus = function(status){
			// ExternalInterface.call("alert", status.code == "SharedObject.Flush.Failed");
			// ExternalInterface.call("alert", status.code == "SharedObject.Flush.Success");
			if(primeForReHide){
				primeForReHide = false;
				ExternalInterface.call("dojo.storage.provider.hideStore");
			}
		}
		store.data[key] = value;
		var ret = store.flush();
		if(typeof ret == "string"){
			ExternalInterface.call("dojo.storage.provider.unHideStore");
			primeForReHide = true;
		}
		return store.getSize(namespace);
	}

	public function get(key, namespace){
		store = SharedObject.getLocal(namespace);
		return store.data[key];
	}

	public function free(namespace){
		return SharedObject.getDiskUsage(namespace);
	}

	static function main(mc){
		app = new Storage();
		if(!started){
			ExternalInterface.call("dojo.storage.provider.storageOnLoad");
			started = true;
		}
	}
}