diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index c66493cff..6a59024d8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -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 getScriptPacksByClassNames(List classNames) throws Exception { + Set resultSet = new HashSet<>(); List abcList = getAbcList(); List 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 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 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 uniqueAS3Packs(List packs) { @@ -1349,15 +1340,15 @@ public final class SWF implements SWFContainerItem, Timelined { } public List 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 exportActionScript(AbortRetryIgnoreHandler handler, String outdir, ScriptExportSettings exportSettings, boolean parallel, EventListener evl, boolean as2, boolean as3) throws IOException { + public List exportActionScript(AbortRetryIgnoreHandler handler, String outdir, List as3scripts, ScriptExportSettings exportSettings, boolean parallel, EventListener evl, boolean as2, boolean as3) throws IOException { List 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) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java index 0cb560e9a..4116e08ef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java @@ -48,9 +48,9 @@ public class AS3ScriptExporter { private static final Logger logger = Logger.getLogger(AS3ScriptExporter.class.getName()); - public List exportActionScript3(SWF swf, AbortRetryIgnoreHandler handler, String outdir, ScriptExportSettings exportSettings, boolean parallel, EventListener evl) { + public List exportActionScript3(SWF swf, AbortRetryIgnoreHandler handler, String outdir, List as3scripts, ScriptExportSettings exportSettings, boolean parallel, EventListener evl) { final List ret = new ArrayList<>(); - final List packs = swf.getAS3Packs(); + final List packs = as3scripts != null ? as3scripts : swf.getAS3Packs(); int cnt = 1; List tasks = new ArrayList<>(); diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index 2cac50ea2..97b3b7aee 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -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 as3packs = as3classes.isEmpty() ? null : swf.getScriptPacksByClassNames(as3classes); + exportOK = swf.exportActionScript(handler, scriptsFolder, as3classes.isEmpty() ? null : as3packs, scriptExportSettings, parallel, evl, exportAs2Script, exportAs3Script) != null && exportOK; } } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 1c3be445d..7b29e337d 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -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 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 asmsToExport = swf.getASMs(true, as12scripts, false); ret.addAll(new AS2ScriptExporter().exportAS2Scripts(handler, scriptsFolder, asmsToExport, scriptExportSettings, parallel, evl)); } }