package hueimmersive;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.prefs.Preferences;
public class Settings
{
private static Preferences prefs = Preferences.userRoot().node("/hueimmersive");
public static SettingsLight Light = new SettingsLight();
public static SettingsBridge Bridge = new SettingsBridge();
public static void check() throws Exception
{
if (prefs.node("/hueimmersive").keys().length != 0)
{
ArrayList<String> keys = new ArrayList<String>(Arrays.asList(prefs.keys()));
String[] settingList = {
"ui_x",
"ui_y",
"cpi_x",
"cpi_y",
"oi_x",
"oi_y",
"chunks",
"brightness",
"saturation",
"format",
"colorgrid",
"restorelight",
"autoswitch",
"gammacorrection",
"screen"};
ArrayList<String> settings = new ArrayList<String>(Arrays.asList(settingList));
if(keys.containsAll(settings) == false)
{
Debug.info(null, "some settings are missing");
setDefaultSettings();
}
}
else
{
setDefaultSettings();
}
}
public static void debug() throws Exception
{
String[] keys;
ArrayList<String> settings;
keys = prefs.keys();
Arrays.sort(keys);
settings = new ArrayList<String>();
for (String s : keys)
{
settings.add(s + " = " + prefs.get(s, null));
}
Debug.info("settings general", settings);
}
public static void setDefaultSettings()
{
Debug.info(null, "set default settings");
prefs.putInt("ui_x", 250);
prefs.putInt("ui_y", 200);
prefs.putInt("cpi_x", 600);
prefs.putInt("cpi_y", 200);
prefs.putInt("oi_x", 250);
prefs.putInt("oi_y", 450);
prefs.putInt("chunks", 12);
prefs.putInt("brightness", 100);
prefs.putInt("saturation", 110);
prefs.putInt("format", 0);
prefs.putBoolean("colorgrid", false);
prefs.putBoolean("restorelight", true);
prefs.putBoolean("autoswitch", false);
prefs.putBoolean("gammacorrection", true);
prefs.putInt("screen", 0);
}
public static void reset(boolean exit) throws Exception // delete all settings and exit the program
{
Debug.info(null, "reset all settings");
prefs.node("/hueimmersive").removeNode();
if(exit == true)
{
Debug.closeLog();
System.exit(0);
}
}
public static ArrayList<String> getArguments()
{
String args = prefs.get("arguments", null);
ArrayList<String> arrArgs = new ArrayList<String>();
if (args != null)
{
arrArgs.addAll(Arrays.asList(args.split(",")));
}
return arrArgs;
}
public static void setArguments(ArrayList<String> args)
{
if (args.size() != 0)
{
String arguments = "";
for (String arg : args)
{
arguments += "," + arg;
}
arguments = arguments.replaceFirst(",", "");
prefs.put("arguments", arguments);
}
else
{
prefs.remove("arguments");
}
}
public static int getInteger(String key)
{
return prefs.getInt(key, 0);
}
public static boolean getBoolean(String key)
{
return prefs.getBoolean(key, false);
}
public static void set(String key, int value)
{
prefs.putInt(key, value);
}
public static void set(String key, boolean value)
{
prefs.putBoolean(key, value);
}
}
class SettingsBridge // bridge settings
{
private Preferences prefs = Preferences.userRoot().node("/hueimmersive/bridge");
public void debug() throws Exception
{
String[] keys = prefs.keys();
Arrays.sort(keys);
ArrayList<String> settings = new ArrayList<String>();
for (String k : keys)
{
settings.add(k + " = " + prefs.get(k, null));
}
Debug.info("settings bridge", settings);
}
public void setInternalipaddress(String internalipaddress)
{
prefs.put("internalipaddress", internalipaddress);
}
public String getInternalipaddress()
{
return prefs.get("internalipaddress", null);
}
}
class SettingsLight // light settings
{
private Preferences prefs = Preferences.userRoot().node("/hueimmersive/lights");
private int nexAlg = 0;
private int maxAlg = ImmersiveProcess.algorithms;
public void check(HLight light) throws Exception // setup default light settings if it doesn't have
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
if (lprefs.get("active", null) == null)
{
lprefs.putBoolean("active", true);
}
if (lprefs.get("bri", null) == null)
{
lprefs.putInt("bri", 100);
}
if (lprefs.get("alg", null) == null)
{
lprefs.putInt("alg", nexAlg);
nexAlg++;
if (nexAlg > maxAlg)
{
nexAlg = 0;
}
}
}
public void debug() throws Exception
{
ArrayList<String> settings = new ArrayList<String>();
for (String node : prefs.childrenNames())
{
settings.add(node + "");
String[] keys = prefs.node(node).keys();
Arrays.sort(keys);
for (String s : keys)
{
settings.add(" " + s + " = " + prefs.node(node).get(s, null));
}
}
Debug.info("settings lights", settings);
}
public void setBrightness(HLight light, int bri)
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
lprefs.putInt("bri", bri);
}
public void setActive(HLight light, boolean active)
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
lprefs.putBoolean("active", active);
}
public void setAlgorithm(HLight light, int alg)
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
lprefs.putInt("alg", alg);
}
public boolean getActive(HLight light)
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
return lprefs.getBoolean("active", true);
}
public int getAlgorithm(HLight light)
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
return lprefs.getInt("alg", -1);
}
public int getBrightness(HLight light)
{
Preferences lprefs = Preferences.userRoot().node(prefs.absolutePath() + "/" + light.uniqueid);
return lprefs.getInt("bri", -1);
}
}