Skip to content

Commit

Permalink
Check for Linux settings files per #288
Browse files Browse the repository at this point in the history
  • Loading branch information
winder committed Feb 20, 2016
1 parent 9d268b0 commit 089b113
Showing 1 changed file with 70 additions and 23 deletions.
93 changes: 70 additions & 23 deletions src/com/willwinder/universalgcodesender/utils/SettingsFactory.java
Expand Up @@ -31,6 +31,7 @@ This file is part of Universal Gcode Sender (UGS).
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.SystemUtils;

/**
*
Expand All @@ -39,30 +40,75 @@ This file is part of Universal Gcode Sender (UGS).
public class SettingsFactory {
private static final Logger logger = Logger.getLogger(SettingsFactory.class.getName());

public static File getSettingsFolder(){
File settingsFolder = new File(System.getProperty("user.home"));
if (System.getProperty("os.name").toLowerCase().contains("mac")) {
settingsFolder = new File(System.getProperty("user.home")+"/Library/Preferences/");
}
return settingsFolder;
private static File getSettingsFile() {
String propertiesFilename = "UniversalGcodeSender.properties";
String jsonFilename = "UniversalGcodeSender.json";

File properties = null;
File json = null;

String homeDir = System.getProperty("user.home");

if (System.getProperty("os.name").toLowerCase().contains("mac")) {
homeDir = homeDir + "/Library/Preferences/";
properties = new File(homeDir + propertiesFilename);
json = new File(homeDir + jsonFilename);
}
else if (System.getProperty("os.name").toLowerCase().contains("windows")) {
properties = new File(homeDir + propertiesFilename);
json = new File(homeDir + jsonFilename);
}
// Unix
else {
properties = new File(homeDir + propertiesFilename);

// Check homedir hidden/not hidden
json = new File(homeDir + "/" + jsonFilename);
if (!json.exists()) {
json = new File(homeDir + "/." + jsonFilename);
}
// Check /etc
if (!json.exists()) {
json = new File("/etc/" + jsonFilename);
}
// Check /usr/share
if (!json.exists()) {
json = new File("/usr/share/UniversalGcodeSender/" + jsonFilename);
}

// No file.
if (!json.exists()) {
json = new File(homeDir + "/" + jsonFilename);
}
}

return properties.exists() ? properties : json;
}


@Deprecated
private static File getSettingsFolder(){
File settingsFolder = new File(System.getProperty("user.home"));
if (System.getProperty("os.name").toLowerCase().contains("mac")) {
settingsFolder = new File(System.getProperty("user.home")+"/Library/Preferences/");
}
return settingsFolder;
}

public static Settings loadSettings() {
// the defaults are now in the settings bean
Settings out = new Settings();

File propertiesFile = new File(getSettingsFolder(), "UniversalGcodeSender.properties");
File jsonFile = new File(getSettingsFolder(), "UniversalGcodeSender.json");

// the defaults are now in the settings bean
Settings out = new Settings();

File settingsFile = getSettingsFile();

logger.info(Localization.getString("settings.log.loading"));
try {
if(jsonFile.exists()){
logger.log(Level.INFO, "{0}: {1}", new Object[]{Localization.getString("settings.log.location"), jsonFile});
out = new Gson().fromJson(new FileReader(jsonFile), Settings.class);
} else if(propertiesFile.exists()){
logger.log(Level.INFO, "{0}: {1}", new Object[]{Localization.getString("settings.log.location"), propertiesFile});
if(settingsFile.getName().endsWith("json") && settingsFile.exists()){
logger.log(Level.INFO, "{0}: {1}", new Object[]{Localization.getString("settings.log.location"), settingsFile});
out = new Gson().fromJson(new FileReader(settingsFile), Settings.class);
} else if(settingsFile.getName().endsWith("properties")){
logger.log(Level.INFO, "{0}: {1}", new Object[]{Localization.getString("settings.log.location"), settingsFile});
Properties properties = new Properties();
properties.load(new FileInputStream(propertiesFile));
properties.load(new FileInputStream(settingsFile));
out.setLastOpenedFilename(properties.getProperty("last.dir", System.getProperty("user.home")));
out.setPort(properties.getProperty("port", ""));
out.setPortRate(properties.getProperty("port.rate", "9600"));
Expand All @@ -89,7 +135,7 @@ public static Settings loadSettings() {
out.updateMacro(4, null, null, properties.getProperty("customGcode4", ""));
out.updateMacro(5, null, null, properties.getProperty("customGcode5", ""));
out.setLanguage(properties.getProperty("language", "en_US"));
}
}
out.finalizeInitialization();
} catch (Exception e) {
logger.warning(Localization.getString("settings.log.error"));
Expand All @@ -102,14 +148,15 @@ public static Settings loadSettings() {
public static void saveSettings(Settings settings) {
logger.info(Localization.getString("settings.log.saving"));
try {
File jsonFile = new File(getSettingsFolder(), "UniversalGcodeSender.json");
// Save json file.
File jsonFile = getSettingsFile();
try (FileWriter fileWriter = new FileWriter(jsonFile)) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
fileWriter.write(gson.toJson(settings, Settings.class));
}

File propertiesFile = new File(getSettingsFolder(), "UniversalGcodeSender.properties");

// Delete the old settings file if it exists.
File propertiesFile = new File(getSettingsFolder(), "UniversalGcodeSender.properties");
if(propertiesFile.exists()){
propertiesFile.delete();
}
Expand Down

0 comments on commit 089b113

Please sign in to comment.