From 13cfed7be81c8f680de0248372effe855e480c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Wed, 18 Oct 2023 20:09:01 +0200 Subject: [PATCH] Added #2005 Export files to directories by bundle names on multiple bundle (zips, etc.) selection --- CHANGELOG.md | 2 ++ .../flash/treeitems/OpenableList.java | 2 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 24 +++++++++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc58e17b..a4a1618ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. opening dialogs on same screen as the main window, do not restore window size to larger value that actual screen size - [#1717] AS1/2/3 Option to hide P-code panel +- [#2005] Export files to directories by bundle names on multiple bundle (zips, etc.) selection ### Fixed - [#1306], [#1768] Maximizing window on other than main monitor @@ -3195,6 +3196,7 @@ Major version of SWF to XML export changed to 2. [#1130]: https://www.free-decompiler.com/flash/issues/1130 [#1220]: https://www.free-decompiler.com/flash/issues/1220 [#1717]: https://www.free-decompiler.com/flash/issues/1717 +[#2005]: https://www.free-decompiler.com/flash/issues/2005 [#1306]: https://www.free-decompiler.com/flash/issues/1306 [#1768]: https://www.free-decompiler.com/flash/issues/1768 [#2013]: https://www.free-decompiler.com/flash/issues/2013 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java index ad8088317..58b114b96 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java @@ -45,7 +45,7 @@ public class OpenableList implements List, SWFContainerItem { @Override public Openable getOpenable() { - throw new UnsupportedOperationException("Not supported."); + return null; } @Override diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index b70b1523f..6b3deb3c5 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -1899,11 +1899,18 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se List sel = getSelection(null, selection); Set usedOpenables = new HashSet<>(); + Set usedOpenableLists = new HashSet<>(); + + Map> usedSwfIdsInBundles = new HashMap<>(); + for (TreeItem d : sel) { Openable selectedNodeOpenable = d.getOpenable(); - if (!usedOpenables.contains(selectedNodeOpenable)) { - usedOpenables.add(selectedNodeOpenable); - } + usedOpenables.add(selectedNodeOpenable); + + OpenableList list = selectedNodeOpenable.getOpenableList(); + if (list != null) { + usedOpenableLists.add(list); + } } Map usedSwfsIds = new HashMap<>(); @@ -2026,8 +2033,15 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } String selFile2; - if (usedOpenables.size() > 1) { - selFile2 = selFile + File.separator + Helper.getNextId(openable.getTitleOrShortFileName(), usedSwfsIds); + if (usedOpenables.size() > 1) { + if (usedOpenableLists.size() > 1 && openable.getOpenableList() != null && openable.getOpenableList().isBundle()) { + if (!usedSwfIdsInBundles.containsKey(openable.getOpenableList())) { + usedSwfIdsInBundles.put(openable.getOpenableList(), new HashMap<>()); + } + selFile2 = selFile + File.separator + openable.getOpenableList().name + File.separator + Helper.getNextId(openable.getTitleOrShortFileName(), usedSwfIdsInBundles.get(openable.getOpenableList())); + } else { + selFile2 = selFile + File.separator + Helper.getNextId(openable.getTitleOrShortFileName(), usedSwfsIds); + } } else { selFile2 = selFile; }