as3 classes export simplified

This commit is contained in:
honfika@gmail.com
2015-07-18 19:47:26 +02:00
parent a7d57c19a4
commit 91fb53d665
4 changed files with 25 additions and 51 deletions

View File

@@ -1251,8 +1251,8 @@ public final class SWF implements SWFContainerItem, Timelined {
return true;
}
public boolean exportAS3Class(String className, String outdir, ScriptExportSettings exportSettings, boolean parallel, EventListener evl) throws Exception {
boolean exported = false;
public List<ScriptPack> getScriptPacksByClassNames(List<String> classNames) throws Exception {
Set<ScriptPack> resultSet = new HashSet<>();
List<ABCContainerTag> abcList = getAbcList();
List<ABC> allAbcList = new ArrayList<>();
@@ -1260,27 +1260,18 @@ public final class SWF implements SWFContainerItem, Timelined {
allAbcList.add(abcList.get(i).getABC());
}
for (int i = 0; i < abcList.size(); i++) {
ABC abc = abcList.get(i).getABC();
List<ScriptPack> scrs = abc.findScriptPacksByPath(className, allAbcList);
for (int j = 0; j < scrs.size(); j++) {
ScriptPack scr = scrs.get(j);
if (!scr.isSimple && Configuration.ignoreCLikePackages.get()) {
continue;
for (String className : classNames) {
for (int i = 0; i < abcList.size(); i++) {
ABC abc = abcList.get(i).getABC();
List<ScriptPack> scrs = abc.findScriptPacksByPath(className, allAbcList);
for (int j = 0; j < scrs.size(); j++) {
ScriptPack scr = scrs.get(j);
resultSet.add(scr);
}
String cnt = "";
if (scrs.size() > 1) {
cnt = "script " + (j + 1) + "/" + scrs.size() + " ";
}
String eventData = cnt + scr.getPath() + " ...";
evl.handleExportingEvent("tag", i + 1, abcList.size(), eventData);
File file = scr.getExportFile(outdir, exportSettings);
scr.export(file, exportSettings, parallel);
evl.handleExportedEvent("tag", i + 1, abcList.size(), eventData);
exported = true;
}
}
return exported;
return new ArrayList<>(resultSet);
}
private List<ScriptPack> uniqueAS3Packs(List<ScriptPack> packs) {
@@ -1349,15 +1340,15 @@ public final class SWF implements SWFContainerItem, Timelined {
}
public List<File> exportActionScript(AbortRetryIgnoreHandler handler, String outdir, ScriptExportSettings exportSettings, boolean parallel, EventListener evl) throws IOException {
return exportActionScript(handler, outdir, exportSettings, parallel, evl, true, true);
return exportActionScript(handler, outdir, null, exportSettings, parallel, evl, true, true);
}
public List<File> exportActionScript(AbortRetryIgnoreHandler handler, String outdir, ScriptExportSettings exportSettings, boolean parallel, EventListener evl, boolean as2, boolean as3) throws IOException {
public List<File> exportActionScript(AbortRetryIgnoreHandler handler, String outdir, List<ScriptPack> as3scripts, ScriptExportSettings exportSettings, boolean parallel, EventListener evl, boolean as2, boolean as3) throws IOException {
List<File> ret = new ArrayList<>();
if (isAS3()) {
if (as3) {
ret.addAll(new AS3ScriptExporter().exportActionScript3(this, handler, outdir, exportSettings, parallel, evl));
ret.addAll(new AS3ScriptExporter().exportActionScript3(this, handler, outdir, as3scripts, exportSettings, parallel, evl));
}
} else {
if (as2) {

View File

@@ -48,9 +48,9 @@ public class AS3ScriptExporter {
private static final Logger logger = Logger.getLogger(AS3ScriptExporter.class.getName());
public List<File> exportActionScript3(SWF swf, AbortRetryIgnoreHandler handler, String outdir, ScriptExportSettings exportSettings, boolean parallel, EventListener evl) {
public List<File> exportActionScript3(SWF swf, AbortRetryIgnoreHandler handler, String outdir, List<ScriptPack> as3scripts, ScriptExportSettings exportSettings, boolean parallel, EventListener evl) {
final List<File> ret = new ArrayList<>();
final List<ScriptPack> packs = swf.getAS3Packs();
final List<ScriptPack> packs = as3scripts != null ? as3scripts : swf.getAS3Packs();
int cnt = 1;
List<ExportPackTask> tasks = new ArrayList<>();

View File

@@ -1301,13 +1301,8 @@ public class CommandLineArgumentParser {
String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension());
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
if (!as3classes.isEmpty()) {
for (String as3class : as3classes) {
exportOK = swf.exportAS3Class(as3class, scriptsFolder, scriptExportSettings, parallel, evl) && exportOK;
}
} else {
exportOK = swf.exportActionScript(handler, scriptsFolder, scriptExportSettings, parallel, evl, exportAs2Script, exportAs3Script) != null && exportOK;
}
List<ScriptPack> as3packs = as3classes.isEmpty() ? null : swf.getScriptPacksByClassNames(as3classes);
exportOK = swf.exportActionScript(handler, scriptsFolder, as3classes.isEmpty() ? null : as3packs, scriptExportSettings, parallel, evl, exportAs2Script, exportAs3Script) != null && exportOK;
}
}

View File

@@ -57,6 +57,7 @@ import com.jpexs.decompiler.flash.exporters.modes.SpriteExportMode;
import com.jpexs.decompiler.flash.exporters.modes.SymbolClassExportMode;
import com.jpexs.decompiler.flash.exporters.modes.TextExportMode;
import com.jpexs.decompiler.flash.exporters.script.AS2ScriptExporter;
import com.jpexs.decompiler.flash.exporters.script.AS3ScriptExporter;
import com.jpexs.decompiler.flash.exporters.settings.BinaryDataExportSettings;
import com.jpexs.decompiler.flash.exporters.settings.ButtonExportSettings;
import com.jpexs.decompiler.flash.exporters.settings.FontExportSettings;
@@ -1233,25 +1234,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
Path.createDirectorySafe(new File(scriptsFolder));
ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), !parallel && Configuration.scriptExportSingleFile.get());
String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension());
if (swf.isAS3()) {
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
for (int i = 0; i < as3scripts.size(); i++) {
ScriptPack tls = as3scripts.get(i);
if (!tls.isSimple && Configuration.ignoreCLikePackages.get()) {
continue;
}
Main.startWork(translate("work.exporting") + " " + (i + 1) + "/" + as3scripts.size() + " " + tls.getPath() + " ...", null);
File file = tls.getExportFile(scriptsFolder, scriptExportSettings);
ret.add(tls.export(file, scriptExportSettings, parallel));
}
}
} else {
Map<String, ASMSource> asmsToExport = swf.getASMs(true, as12scripts, false);
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
if (swf.isAS3()) {
ret.addAll(new AS3ScriptExporter().exportActionScript3(swf, handler, scriptsFolder, as3scripts, scriptExportSettings, parallel, evl));
} else {
Map<String, ASMSource> asmsToExport = swf.getASMs(true, as12scripts, false);
ret.addAll(new AS2ScriptExporter().exportAS2Scripts(handler, scriptsFolder, asmsToExport, scriptExportSettings, parallel, evl));
}
}