Skip to content

Commit

Permalink
Don't cache encoded pref values during tests. (#1288)
Browse files Browse the repository at this point in the history
Co-authored-by: Samuel Gaus <sam@gaus.co.uk>
  • Loading branch information
phulin and gausie committed Nov 15, 2022
1 parent 9a91981 commit ea23553
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions src/net/sourceforge/kolmafia/preferences/Preferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,10 @@ private static String encodeProperty(String name, String value) {
return buffer.toString();
}

private static boolean mustTrackEncodedValues() {
return Preferences.getBoolean("saveSettingsOnSet") && Preferences.saveSettingsToFile;
}

private static void reinitializeEncodedValuesOn(
Map<String, Object> valuesMap, Map<String, byte[]> encodedMap) {
for (Entry<String, Object> entry : valuesMap.entrySet()) {
Expand All @@ -699,6 +703,11 @@ private static void reinitializeEncodedValuesOn(

/** Recompute all cached encoded values from the value maps. */
private static void reinitializeEncodedValues() {
// No need to do this at all if not writing to a file.
if (!Preferences.saveSettingsToFile) {
return;
}

Preferences.reinitializeEncodedValuesOn(
Preferences.globalValues, Preferences.globalEncodedValues);
Preferences.reinitializeEncodedValuesOn(Preferences.userValues, Preferences.userEncodedValues);
Expand Down Expand Up @@ -788,26 +797,26 @@ public static String getDefault(final String name) {
}

public static void removeProperty(final String name, final boolean global) {
boolean saveSettingsOnSet = getBoolean("saveSettingsOnSet");
boolean trackEncoded = Preferences.mustTrackEncodedValues();
// Remove only properties which do not have defaults
if (global) {
if (!Preferences.globalNames.containsKey(name)) {
// We are changing the structure of the map.
// globalValues is a synchronized map.

Preferences.globalValues.remove(name);
if (saveSettingsOnSet) Preferences.globalEncodedValues.remove(name);
if (trackEncoded) Preferences.globalEncodedValues.remove(name);
}
} else {
if (!Preferences.userNames.containsKey(name)) {
// We are changing the structure of the map.
// userValues is a synchronized map.

Preferences.userValues.remove(name);
if (saveSettingsOnSet) Preferences.userEncodedValues.remove(name);
if (trackEncoded) Preferences.userEncodedValues.remove(name);
}
}
Preferences.maybeSaveToFileAfterUpdating(saveSettingsOnSet, name);
Preferences.maybeSaveToFileAfterUpdating(trackEncoded, name);
PreferenceListenerRegistry.firePreferenceChanged(name);
}

Expand Down Expand Up @@ -1104,17 +1113,18 @@ private static void setObject(
}
}

boolean saveSettings = Preferences.getBoolean("saveSettingsOnSet");
boolean trackEncoded = Preferences.mustTrackEncodedValues();

// We stop tracking encoded values when saveSettingsOnSet is off. When it is turned back on,
// many encoded values will be out of date, and we don't know which ones, so we have to
// recompute all of them.
if (name == "saveSettingsOnSet" && (boolean) object) {
Preferences.reinitializeEncodedValues();
trackEncoded |= Preferences.saveSettingsToFile;
}

Preferences.put(user, name, object, saveSettings);
Preferences.maybeSaveToFileAfterUpdating(saveSettings, name);
Preferences.put(user, name, object, trackEncoded);
Preferences.maybeSaveToFileAfterUpdating(trackEncoded, name);

PreferenceListenerRegistry.firePreferenceChanged(name);

Expand Down

0 comments on commit ea23553

Please sign in to comment.