mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-12 18:21:54 +00:00
Better logging intialization. Separate class for providing app directory.
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (C) 2010-2025 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.configuration;
|
||||
|
||||
import com.jpexs.decompiler.flash.ApplicationInfo;
|
||||
import java.io.File;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* App directory provider
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class AppDirectoryProvider {
|
||||
|
||||
private static final File UNSPECIFIED_FILE = new File("unspecified");
|
||||
|
||||
private static File directory = UNSPECIFIED_FILE;
|
||||
|
||||
private enum OSId {
|
||||
WINDOWS, OSX, UNIX
|
||||
}
|
||||
|
||||
private static OSId getOSId() {
|
||||
String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
|
||||
if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) {
|
||||
return OSId.OSX;
|
||||
} else if (OS.indexOf("win") >= 0) {
|
||||
return OSId.WINDOWS;
|
||||
} else {
|
||||
return OSId.UNIX;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get FFDec home directory
|
||||
*
|
||||
* @return FFDec home directory
|
||||
*/
|
||||
public static String getFFDecHome() {
|
||||
if (directory == UNSPECIFIED_FILE) {
|
||||
directory = null;
|
||||
String userHome = null;
|
||||
try {
|
||||
userHome = System.getProperty("user.home");
|
||||
} catch (SecurityException ignore) {
|
||||
//ignored
|
||||
}
|
||||
if (userHome != null) {
|
||||
String applicationId = ApplicationInfo.SHORT_APPLICATION_NAME;
|
||||
OSId osId = getOSId();
|
||||
if (osId == OSId.WINDOWS) {
|
||||
File appDataDir = null;
|
||||
try {
|
||||
String appDataEV = System.getenv("APPDATA");
|
||||
if ((appDataEV != null) && (appDataEV.length() > 0)) {
|
||||
appDataDir = new File(appDataEV);
|
||||
}
|
||||
} catch (SecurityException ignore) {
|
||||
//ignored
|
||||
}
|
||||
String vendorId = ApplicationInfo.VENDOR;
|
||||
if ((appDataDir != null) && appDataDir.isDirectory()) {
|
||||
// ${APPDATA}\{vendorId}\${applicationId}
|
||||
String path = vendorId + "\\" + applicationId + "\\";
|
||||
directory = new File(appDataDir, path);
|
||||
} else {
|
||||
// ${userHome}\Application Data\${vendorId}\${applicationId}
|
||||
String path = "Application Data\\" + vendorId + "\\" + applicationId + "\\";
|
||||
directory = new File(userHome, path);
|
||||
}
|
||||
} else if (osId == OSId.OSX) {
|
||||
// ${userHome}/Library/Application Support/${applicationId}
|
||||
String path = "Library/Application Support/" + applicationId + "/";
|
||||
directory = new File(userHome, path);
|
||||
} else {
|
||||
File xdgConfigHome = null;
|
||||
File oldConfigDir = new File(userHome, "." + applicationId + "/");
|
||||
try {
|
||||
String xdgConfigHomeEV = System.getenv("XDG_CONFIG_HOME");
|
||||
if ((xdgConfigHomeEV != null) && (xdgConfigHomeEV.length() > 0)) {
|
||||
xdgConfigHome = new File(xdgConfigHomeEV);
|
||||
}
|
||||
} catch (SecurityException ignore) {
|
||||
//ignored
|
||||
}
|
||||
if ((xdgConfigHome != null) && xdgConfigHome.isDirectory()) {
|
||||
// ${xdgConfigHome}/${applicationId}
|
||||
String path = applicationId + "/";
|
||||
directory = new File(xdgConfigHome, path);
|
||||
} else if (oldConfigDir.isDirectory()) {
|
||||
// ${userHome}/.${applicationId}
|
||||
directory = oldConfigDir;
|
||||
} else {
|
||||
// ${userHome}/.config/${applicationId}
|
||||
String path = ".config/" + applicationId + "/";
|
||||
directory = new File(userHome, path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//no home, then use application directory
|
||||
directory = new File(".");
|
||||
}
|
||||
}
|
||||
if (!directory.exists()) {
|
||||
if (!directory.mkdirs()) {
|
||||
if (!directory.exists()) {
|
||||
directory = new File("."); //fallback to current directory
|
||||
}
|
||||
}
|
||||
}
|
||||
String ret = directory.getAbsolutePath();
|
||||
if (!ret.endsWith(File.separator)) {
|
||||
ret += File.separator;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -61,10 +61,6 @@ public final class Configuration {
|
||||
|
||||
private static final ConfigurationStorage storage = new TomlConfigurationStorage();
|
||||
|
||||
private static final File UNSPECIFIED_FILE = new File("unspecified");
|
||||
|
||||
private static File directory = UNSPECIFIED_FILE;
|
||||
|
||||
/**
|
||||
* Log level
|
||||
*/
|
||||
@@ -1141,24 +1137,24 @@ public final class Configuration {
|
||||
@ConfigurationDefaultBoolean(false)
|
||||
@ConfigurationCategory("display")
|
||||
public static ConfigurationItem<Boolean> snapAlignCenterAlignmentVertical = null;
|
||||
|
||||
|
||||
@ConfigurationDefaultBoolean(true)
|
||||
@ConfigurationName("warning.linkTypes")
|
||||
@ConfigurationCategory("script")
|
||||
public static ConfigurationItem<Boolean> warningLinkTypes = null;
|
||||
|
||||
|
||||
@ConfigurationDefaultBoolean(true)
|
||||
@ConfigurationCategory("script")
|
||||
public static ConfigurationItem<Boolean> showCodeCompletionOnDot = null;
|
||||
|
||||
|
||||
@ConfigurationDefaultBoolean(false)
|
||||
@ConfigurationCategory("script")
|
||||
public static ConfigurationItem<Boolean> skipDetectionOfUnitializedClassFields = null;
|
||||
|
||||
|
||||
@ConfigurationDefaultBoolean(false)
|
||||
@ConfigurationInternal
|
||||
public static ConfigurationItem<Boolean> showHeapStatusWidget = null;
|
||||
|
||||
|
||||
@ConfigurationDefaultBoolean(false)
|
||||
@ConfigurationCategory("script")
|
||||
public static ConfigurationItem<Boolean> autoDeobfuscateIdentifiers = null;
|
||||
@@ -1166,10 +1162,6 @@ public final class Configuration {
|
||||
private static Map<String, String> configurationDescriptions = new LinkedHashMap<>();
|
||||
private static Map<String, String> configurationTitles = new LinkedHashMap<>();
|
||||
|
||||
private enum OSId {
|
||||
WINDOWS, OSX, UNIX
|
||||
}
|
||||
|
||||
public static void setConfigurationDescriptions(Map<String, String> configurationDescriptions) {
|
||||
Configuration.configurationDescriptions = configurationDescriptions;
|
||||
}
|
||||
@@ -1186,101 +1178,6 @@ public final class Configuration {
|
||||
return configurationDescriptions.get(confirationName);
|
||||
}
|
||||
|
||||
private static OSId getOSId() {
|
||||
String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
|
||||
if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) {
|
||||
return OSId.OSX;
|
||||
} else if (OS.indexOf("win") >= 0) {
|
||||
return OSId.WINDOWS;
|
||||
} else {
|
||||
return OSId.UNIX;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get FFDec home directory
|
||||
*
|
||||
* @return FFDec home directory
|
||||
*/
|
||||
public static String getFFDecHome() {
|
||||
if (directory == UNSPECIFIED_FILE) {
|
||||
directory = null;
|
||||
String userHome = null;
|
||||
try {
|
||||
userHome = System.getProperty("user.home");
|
||||
} catch (SecurityException ignore) {
|
||||
//ignored
|
||||
}
|
||||
if (userHome != null) {
|
||||
String applicationId = ApplicationInfo.SHORT_APPLICATION_NAME;
|
||||
OSId osId = getOSId();
|
||||
if (osId == OSId.WINDOWS) {
|
||||
File appDataDir = null;
|
||||
try {
|
||||
String appDataEV = System.getenv("APPDATA");
|
||||
if ((appDataEV != null) && (appDataEV.length() > 0)) {
|
||||
appDataDir = new File(appDataEV);
|
||||
}
|
||||
} catch (SecurityException ignore) {
|
||||
//ignored
|
||||
}
|
||||
String vendorId = ApplicationInfo.VENDOR;
|
||||
if ((appDataDir != null) && appDataDir.isDirectory()) {
|
||||
// ${APPDATA}\{vendorId}\${applicationId}
|
||||
String path = vendorId + "\\" + applicationId + "\\";
|
||||
directory = new File(appDataDir, path);
|
||||
} else {
|
||||
// ${userHome}\Application Data\${vendorId}\${applicationId}
|
||||
String path = "Application Data\\" + vendorId + "\\" + applicationId + "\\";
|
||||
directory = new File(userHome, path);
|
||||
}
|
||||
} else if (osId == OSId.OSX) {
|
||||
// ${userHome}/Library/Application Support/${applicationId}
|
||||
String path = "Library/Application Support/" + applicationId + "/";
|
||||
directory = new File(userHome, path);
|
||||
} else {
|
||||
File xdgConfigHome = null;
|
||||
File oldConfigDir = new File(userHome, "." + applicationId + "/");
|
||||
try {
|
||||
String xdgConfigHomeEV = System.getenv("XDG_CONFIG_HOME");
|
||||
if ((xdgConfigHomeEV != null) && (xdgConfigHomeEV.length() > 0)) {
|
||||
xdgConfigHome = new File(xdgConfigHomeEV);
|
||||
}
|
||||
} catch (SecurityException ignore) {
|
||||
//ignored
|
||||
}
|
||||
if ((xdgConfigHome != null) && xdgConfigHome.isDirectory()) {
|
||||
// ${xdgConfigHome}/${applicationId}
|
||||
String path = applicationId + "/";
|
||||
directory = new File(xdgConfigHome, path);
|
||||
} else if (oldConfigDir.isDirectory()) {
|
||||
// ${userHome}/.${applicationId}
|
||||
directory = oldConfigDir;
|
||||
} else {
|
||||
// ${userHome}/.config/${applicationId}
|
||||
String path = ".config/" + applicationId + "/";
|
||||
directory = new File(userHome, path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//no home, then use application directory
|
||||
directory = new File(".");
|
||||
}
|
||||
}
|
||||
if (!directory.exists()) {
|
||||
if (!directory.mkdirs()) {
|
||||
if (!directory.exists()) {
|
||||
directory = new File("."); //fallback to current directory
|
||||
}
|
||||
}
|
||||
}
|
||||
String ret = directory.getAbsolutePath();
|
||||
if (!ret.endsWith(File.separator)) {
|
||||
ret += File.separator;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static Font getSourceFont() {
|
||||
return FontHelper.stringToFont(sourceFontString.get());
|
||||
}
|
||||
@@ -1408,7 +1305,7 @@ public final class Configuration {
|
||||
|
||||
return map.get(fileName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get per-swf custom configuration.
|
||||
*
|
||||
@@ -1434,7 +1331,7 @@ public final class Configuration {
|
||||
|
||||
return swfConf;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get or create per-swf custom configuration.
|
||||
*
|
||||
@@ -1446,11 +1343,11 @@ public final class Configuration {
|
||||
}
|
||||
|
||||
private static String getConfigFile() throws IOException {
|
||||
return getFFDecHome() + storage.getConfigName();
|
||||
return AppDirectoryProvider.getFFDecHome() + storage.getConfigName();
|
||||
}
|
||||
|
||||
private static String getLegacyConfigFile() throws IOException {
|
||||
return getFFDecHome() + legacyStorage.getConfigName();
|
||||
return AppDirectoryProvider.getFFDecHome() + legacyStorage.getConfigName();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1460,15 +1357,15 @@ public final class Configuration {
|
||||
Logger.getLogger(Configuration.class.getName()).fine("Saving configuration...");
|
||||
try {
|
||||
storage.saveToFile(getConfigFile());
|
||||
Logger.getLogger(Configuration.class.getName()).fine("TOML configuration saved.");
|
||||
Logger.getLogger(Configuration.class.getName()).fine("TOML configuration saved.");
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, "Cannot save TOML configuration", ex);
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, "Cannot save TOML configuration", ex);
|
||||
}
|
||||
try {
|
||||
legacyStorage.saveToFile(getLegacyConfigFile());
|
||||
Logger.getLogger(Configuration.class.getName()).fine("Legacy configuration saved.");
|
||||
Logger.getLogger(Configuration.class.getName()).fine("Legacy configuration saved.");
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.WARNING, "Cannot save legacy configuration", ex);
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.WARNING, "Cannot save legacy configuration", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1555,14 +1452,18 @@ public final class Configuration {
|
||||
* Set configuration fields.
|
||||
*/
|
||||
public static void setConfigurationFields() {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.FINE, "Setting configuration fields...");
|
||||
try {
|
||||
Map<String, Object> config;
|
||||
if (new File(getConfigFile()).exists()) {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.FINE, "Using TOML file.");
|
||||
config = storage.loadFromFile(getConfigFile());
|
||||
} else {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.FINE, "Using legacy file.");
|
||||
config = legacyStorage.loadFromFile(getLegacyConfigFile());
|
||||
}
|
||||
loadFromMap(config);
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.FINE, "Configuration fields set.");
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
@@ -1702,7 +1603,7 @@ public final class Configuration {
|
||||
* @return Folder
|
||||
*/
|
||||
public static File getPath(String folder) {
|
||||
String home = getFFDecHome();
|
||||
String home = AppDirectoryProvider.getFFDecHome();
|
||||
File dir = new File(home + folder);
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
|
||||
@@ -61,6 +61,8 @@ public class TomlConfigurationStorage implements ConfigurationStorage {
|
||||
|
||||
@Override
|
||||
public Map<String, Object> loadFromFile(String file) {
|
||||
Logger.getLogger(TomlConfigurationStorage.class.getName()).log(Level.FINE, "Loading TOML file {0}", file);
|
||||
|
||||
Map<String, Object> result = new LinkedHashMap<>();
|
||||
TomlParseResult tomlResult;
|
||||
try {
|
||||
@@ -209,6 +211,7 @@ public class TomlConfigurationStorage implements ConfigurationStorage {
|
||||
Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, "Exception during loading TOML configuration", ex);
|
||||
}
|
||||
}
|
||||
Logger.getLogger(TomlConfigurationStorage.class.getName()).log(Level.FINE, "TOML file loaded.");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.jpexs.decompiler.flash.abc.ABC;
|
||||
import com.jpexs.decompiler.flash.abc.ABCInputStream;
|
||||
import com.jpexs.decompiler.flash.abc.ABCOpenException;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.AVM2Code;
|
||||
import com.jpexs.decompiler.flash.configuration.AppDirectoryProvider;
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.configuration.CustomConfigurationKeys;
|
||||
import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration;
|
||||
@@ -228,6 +229,8 @@ public class Main {
|
||||
private static SWF runningSWF = null;
|
||||
|
||||
private static SwfPreparation runningPreparation = null;
|
||||
|
||||
private static boolean loggingFileLoaded = false;
|
||||
|
||||
public static SWF getRunningSWF() {
|
||||
return runningSWF;
|
||||
@@ -3167,10 +3170,11 @@ public class Main {
|
||||
*/
|
||||
public static void main(String[] args) throws IOException {
|
||||
decodeLaunch5jArgs(args);
|
||||
preInitLogging();
|
||||
setSessionLoaded(false);
|
||||
|
||||
System.setProperty("sun.io.serialization.extendedDebugInfo", "true");
|
||||
|
||||
System.setProperty("sun.io.serialization.extendedDebugInfo", "true");
|
||||
|
||||
clearTemp();
|
||||
|
||||
try {
|
||||
@@ -3293,9 +3297,9 @@ public class Main {
|
||||
}
|
||||
|
||||
public static String tempFile(String url) throws IOException {
|
||||
File f = new File(Configuration.getFFDecHome() + "saved" + File.separator);
|
||||
File f = new File(AppDirectoryProvider.getFFDecHome() + "saved" + File.separator);
|
||||
Path.createDirectorySafe(f);
|
||||
return Configuration.getFFDecHome() + "saved" + File.separator + "asdec_" + Integer.toHexString(url.hashCode()) + ".tmp";
|
||||
return AppDirectoryProvider.getFFDecHome() + "saved" + File.separator + "asdec_" + Integer.toHexString(url.hashCode()) + ".tmp";
|
||||
}
|
||||
|
||||
public static void removeTrayIcon() {
|
||||
@@ -3534,7 +3538,7 @@ public class Main {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
|
||||
|
||||
try {
|
||||
fileName = Configuration.getFFDecHome() + "logs" + File.separator;
|
||||
fileName = AppDirectoryProvider.getFFDecHome() + "logs" + File.separator;
|
||||
if (Configuration.useDetailedLogging.get()) {
|
||||
fileName += "log-" + sdf.format(new Date()) + ".txt";
|
||||
} else {
|
||||
@@ -3594,17 +3598,24 @@ public class Main {
|
||||
System.getProperty("java.version"), System.getProperty("java.vendor"), System.getProperty("os.arch")});
|
||||
}
|
||||
|
||||
public static void initLogging(boolean debug) {
|
||||
File loggingFile = new File(Configuration.getFFDecHome() + "/logging.properties");
|
||||
public static void preInitLogging() {
|
||||
File loggingFile = new File(AppDirectoryProvider.getFFDecHome() + "/logging.properties");
|
||||
if (loggingFile.exists()) { //use manual configuration file
|
||||
final LogManager logManager = LogManager.getLogManager();
|
||||
try {
|
||||
logManager.readConfiguration(new FileInputStream(loggingFile));
|
||||
loggingFileLoaded = true;
|
||||
return;
|
||||
} catch (IOException ex) {
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void initLogging(boolean debug) {
|
||||
if (loggingFileLoaded) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Logger logger = Logger.getLogger("");
|
||||
logger.setLevel(Configuration.logLevel);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.jpexs.decompiler.flash.gui;
|
||||
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.configuration.AppDirectoryProvider;
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.search.ABCSearchResult;
|
||||
import com.jpexs.decompiler.flash.search.ActionSearchResult;
|
||||
@@ -54,7 +55,7 @@ public class SearchResultsStorage {
|
||||
private static final int DATA_ACTION = 2;
|
||||
|
||||
private static String getConfigFile() throws IOException {
|
||||
return Configuration.getFFDecHome() + SEARCH_RESULTS_FILE;
|
||||
return AppDirectoryProvider.getFFDecHome() + SEARCH_RESULTS_FILE;
|
||||
}
|
||||
|
||||
List<String> openableIds = new ArrayList<>();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.gui.translator;
|
||||
|
||||
import com.jpexs.decompiler.flash.configuration.AppDirectoryProvider;
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.gui.View;
|
||||
import com.jpexs.decompiler.flash.gui.ViewMessages;
|
||||
@@ -899,11 +900,11 @@ public class Translator extends JFrame implements ItemListener {
|
||||
}
|
||||
|
||||
private String getStorageFile() {
|
||||
return Configuration.getFFDecHome() + "translated.zip";
|
||||
return AppDirectoryProvider.getFFDecHome() + "translated.zip";
|
||||
}
|
||||
|
||||
private String getWindowFile() {
|
||||
return Configuration.getFFDecHome() + "translated.ini";
|
||||
return AppDirectoryProvider.getFFDecHome() + "translated.ini";
|
||||
}
|
||||
|
||||
private String escapeUnicode(String s) {
|
||||
@@ -1137,7 +1138,7 @@ public class Translator extends JFrame implements ItemListener {
|
||||
}
|
||||
|
||||
private void saveAll() throws FileNotFoundException, IOException {
|
||||
String storageFile = Configuration.getFFDecHome() + "alltranslated.zip";
|
||||
String storageFile = AppDirectoryProvider.getFFDecHome() + "alltranslated.zip";
|
||||
save(storageFile, resourceValues);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user