From 672a5dc75406fe0a9db010f50071372968fca742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Wed, 14 Aug 2024 06:03:02 +0200 Subject: [PATCH] Added: Updated Flash player to SWF version map --- CHANGELOG.md | 3 + .../decompiler/flash/FlashPlayerVersion.java | 98 +++++++++++++++++++ .../decompiler/flash/xfl/FLAVersion.java | 38 +------ .../decompiler/flash/xfl/XFLConverter.java | 3 +- 4 files changed, 104 insertions(+), 38 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FlashPlayerVersion.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 171926247..d1ad7cd04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added +- Updated Flash player to SWF version map + ### Fixed - [#2266] StartSound/2 and VideoFrame tags, classNames not taken as dependencies (needed chars) - [#2275] Export to FlashDevelop - framerate setting diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FlashPlayerVersion.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FlashPlayerVersion.java new file mode 100644 index 000000000..3be955366 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FlashPlayerVersion.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2010-2024 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import java.util.HashMap; +import java.util.Map; + +/** + * Converts Flash player version to SWF version and vice versa. + * @author JPEXS + */ +public class FlashPlayerVersion { + private static final Map flashPlayerToSwfVersion = new HashMap<>(); + private static final Map swfVersionToFlashPlayer = new HashMap<>(); + static { + flashPlayerToSwfVersion.put("9.0", 9); //9.0.115.0 + flashPlayerToSwfVersion.put("10.0", 10); + flashPlayerToSwfVersion.put("10.1", 10); + flashPlayerToSwfVersion.put("10.2", 11); + flashPlayerToSwfVersion.put("10.3", 12); + flashPlayerToSwfVersion.put("11.0", 13); + flashPlayerToSwfVersion.put("11.1", 14); + flashPlayerToSwfVersion.put("11.2", 15); + flashPlayerToSwfVersion.put("11.3", 16); + flashPlayerToSwfVersion.put("11.4", 17); + flashPlayerToSwfVersion.put("11.5", 18); + flashPlayerToSwfVersion.put("11.6", 19); + flashPlayerToSwfVersion.put("11.7", 20); + flashPlayerToSwfVersion.put("11.8", 21); + flashPlayerToSwfVersion.put("11.9", 22); + flashPlayerToSwfVersion.put("12.0", 23); + flashPlayerToSwfVersion.put("13.0", 24); + flashPlayerToSwfVersion.put("14.0", 25); + flashPlayerToSwfVersion.put("15.0", 26); + flashPlayerToSwfVersion.put("16.0", 27); + flashPlayerToSwfVersion.put("17.0", 28); + flashPlayerToSwfVersion.put("18.0", 29); + flashPlayerToSwfVersion.put("19.0", 30); + flashPlayerToSwfVersion.put("20.0", 31); + flashPlayerToSwfVersion.put("21.0", 32); + flashPlayerToSwfVersion.put("22.0", 33); + flashPlayerToSwfVersion.put("23.0", 34); + flashPlayerToSwfVersion.put("24.0", 35); + flashPlayerToSwfVersion.put("25.0", 36); + flashPlayerToSwfVersion.put("26.0", 37); + flashPlayerToSwfVersion.put("27.0", 38); + flashPlayerToSwfVersion.put("28.0", 39); + flashPlayerToSwfVersion.put("29.0", 40); + flashPlayerToSwfVersion.put("30.0", 41); + flashPlayerToSwfVersion.put("31.0", 42); + flashPlayerToSwfVersion.put("32.0", 43); + flashPlayerToSwfVersion.put("33.0", 44); + flashPlayerToSwfVersion.put("33.1", 44); + flashPlayerToSwfVersion.put("50.0", 50); + + for (String flashPlayer : flashPlayerToSwfVersion.keySet()) { + int swfVersion = flashPlayerToSwfVersion.get(flashPlayer); + if (!swfVersionToFlashPlayer.containsKey(swfVersion)) { + swfVersionToFlashPlayer.put(swfVersion, flashPlayer); + } + } + } + + /** + * Gets Flash player version by SWF version + * @param swfVersion SWF version + * @return Flash player version or null if not found + */ + public static String getFlashPlayerBySwfVersion(int swfVersion) { + return swfVersionToFlashPlayer.get(swfVersion); + } + + /** + * Gets SWF version by Flash player version. + * @param flashPlayerVersion Flash player version + * @return SWF version or -1 if not found + */ + public static int getSwfVersionByFlashPlayer(String flashPlayerVersion) { + if (!flashPlayerToSwfVersion.containsKey(flashPlayerVersion)) { + return -1; + } + return flashPlayerToSwfVersion.get(flashPlayerVersion); + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java index 7e0766ab3..eb495971a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java @@ -16,9 +16,6 @@ */ package com.jpexs.decompiler.flash.xfl; -import java.util.HashMap; -import java.util.Map; - /** * FLA version enumeration. * @@ -42,33 +39,7 @@ public enum FLAVersion { private final String applicationName; - private final int maxSwfVersion; - - private static final Map versionToPlayerMap = new HashMap<>(); - - static { - versionToPlayerMap.put(9, "FlashPlayer9.0"); // 9.0.115.0 - versionToPlayerMap.put(10, "FlashPlayer10.0"); //10 & 10.1 - versionToPlayerMap.put(11, "FlashPlayer10.2"); - versionToPlayerMap.put(12, "FlashPlayer10.3"); - versionToPlayerMap.put(13, "FlashPlayer11.0"); - versionToPlayerMap.put(14, "FlashPlayer11.1"); - versionToPlayerMap.put(15, "FlashPlayer11.2"); - versionToPlayerMap.put(16, "FlashPlayer11.3"); - versionToPlayerMap.put(17, "FlashPlayer11.4"); - versionToPlayerMap.put(18, "FlashPlayer11.5"); - versionToPlayerMap.put(19, "FlashPlayer11.6"); - versionToPlayerMap.put(20, "FlashPlayer11.7"); - versionToPlayerMap.put(21, "FlashPlayer11.8"); - versionToPlayerMap.put(22, "FlashPlayer11.9"); - versionToPlayerMap.put(23, "FlashPlayer12.0"); - versionToPlayerMap.put(24, "FlashPlayer13.0"); - versionToPlayerMap.put(25, "FlashPlayer14.0"); - versionToPlayerMap.put(26, "FlashPlayer15.0"); - versionToPlayerMap.put(27, "FlashPlayer16.0"); - versionToPlayerMap.put(28, "FlashPlayer17.0"); - versionToPlayerMap.put(29, "FlashPlayer18.0"); - } + private final int maxSwfVersion; private FLAVersion(String shortName, String applicationName, String xflVersion, int maxSwfVersion) { this.xflVersion = xflVersion; @@ -102,13 +73,6 @@ public enum FLAVersion { return shortName; } - public static String swfVersionToPlayer(int version) { - if (versionToPlayerMap.containsKey(version)) { - return versionToPlayerMap.get(version); - } - return ""; - } - public static FLAVersion fromString(String s) { if (s == null) { return null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 6e5f9a56e..c1bd2fa70 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.xfl; import com.jpexs.decompiler.flash.AbortRetryIgnoreHandler; +import com.jpexs.decompiler.flash.FlashPlayerVersion; import com.jpexs.decompiler.flash.ReadOnlyTagList; import com.jpexs.decompiler.flash.RetryTask; import com.jpexs.decompiler.flash.SWF; @@ -4988,7 +4989,7 @@ public class XFLConverter { publishSettings.writeElementValue("EventCompress", 7); publishSettings.writeElementValue("OverrideSounds", 0); publishSettings.writeElementValue("Version", flaSwfVersion); - publishSettings.writeElementValue("ExternalPlayer", FLAVersion.swfVersionToPlayer(flaSwfVersion)); + publishSettings.writeElementValue("ExternalPlayer", "FlashPlayer" + FlashPlayerVersion.getFlashPlayerBySwfVersion(flaSwfVersion)); publishSettings.writeElementValue("ActionScriptVersion", useAS3 ? 3 : 2); publishSettings.writeElementValue("PackageExportFrame", 1); publishSettings.writeElementValue("PackagePaths", "");