我有一个“课程”课程,其中包含“ CourseItems ”的集合。
每个 CourseItem 都有一个与其关联的文件夹(对于其文件)。
我需要将CourseItem添加到Zip文件中并在压缩后加密
使用FZip和As3crypto我可以做zip并加密zip文件
是否进行加密取决于用户
目前我的代码看起来类似于(忽略sytax):
编辑:我会尝试添加更多信息+更多说明
基本上,课程是一个包含子文件夹(课程项目)的文件夹(用户可选)
将子文件夹结构映射到courseitem对象。
//main code
var encryptCourse:Boolean;
encryptCourse=true; // read from user..checkbox
var course:Course = new Course("path_coursefolder");//from user input
course.createCourseItems();
//read course folder and create "courseitem" for each subfolder
//and save in "courseItems" collection
//after creating pack course - zip and encrypt
course.Pack(encryptCourse);//encryptCourse bool encrypt course or not
class Course
{
var courseItems:Array; //set when creating
public function Pack()
{
for each (var item:CourseItem in courseItems)
{
item.addEventListener("ZIP_COMPLETE",onitemzip);
item.zip();
}
}
private function onitemzip(e:Event)
{
//if user selected to encrypt..do encryption
//now i want to call the encrypt method :(
//item.Encrypt() //cant call this,,how to refer to "item"??
}
}
class CourseItem
{
var files:Array; //set when creating
var _courseZipfile;
public function ZIP()
{
var ziputil = new Ziputil()
ziputil.createZip("some_name",files);
ziputil.addEventListener(Event.Complete,onZipComplete);
}
private function onZipComplete(e:Event)
{
dispatchEvent(new ZipEvent("ZIP_COMPLETE"));
//dispatch and update progess
//COULD CALL ENCRYPT HERE..but want to avoid.
}
public function Encrypt()
{
//encrypt zip file here
//event of encrypt finish
}
}
基本上在上面的设计中我想在Zipping之后调用CourseItem中的“Encrypt”方法。
注意:我之前更改过课程类。
我曾尝试在CourseItem中移动包,然后我在zip之后处理加密。
但是通过这种方式,我非常喜欢Zip和加密方法
压缩后 - >加密被强制称为
我希望以这两种方法重构我的代码
zip和encrypt是相互独立的?
我怎么能这样做..
全部谢谢
答案 0 :(得分:1)
编辑: 在您编辑之后,我已相应地编辑了我的代码
当用户选择加密时,检查布尔值,如果为true,则在调度zip完成事件后调用加密方法。
public class Course { public function Pack(encryptCourse:Boolean) { for each (var item:CourseItem in courseItems) { item.addEventListener("ZIP_COMPLETE", onitemzip); if(encryptCourse) item.encrypt = true; item.zip(); } } } public class CourseItem { private var _encrypt:Boolean; public function set encrypt(value:Boolean):void { _encrypt = value; } private function onZipComplete(e:Event) { if(_encrypt) Encrypt(); //here you can choose to dispatch a complete event according //to the value of _encrypt , if true , dispatch the event //after encryption dispatchEvent(new ZipEvent("ZIP_COMPLETE")); } }