mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-12 17:38:26 +00:00
as3 classes export simplified
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user