From 984773450692abd8640eb249714f9e12a887b46f Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sat, 12 Sep 2015 15:49:47 +0000 Subject: [PATCH] * make sure that "Getting Started" is only shown once (even if WebKit crashes the JVM) --- source/net/filebot/Main.java | 4 +- source/net/filebot/util/PreferencesMap.java | 54 +++++---------------- 2 files changed, 14 insertions(+), 44 deletions(-) diff --git a/source/net/filebot/Main.java b/source/net/filebot/Main.java index 83c055fc..7e37afe2 100644 --- a/source/net/filebot/Main.java +++ b/source/net/filebot/Main.java @@ -372,10 +372,12 @@ public class Main { private static void checkGettingStarted() throws Exception { PreferencesEntry started = Settings.forPackage(Main.class).entry("getting.started").defaultValue("0"); if ("0".equals(started.getValue())) { + started.setValue("1"); + started.flush(); + SwingUtilities.invokeLater(() -> { GettingStartedStage.start(); }); - started.setValue("1"); } } diff --git a/source/net/filebot/util/PreferencesMap.java b/source/net/filebot/util/PreferencesMap.java index f535d21e..0d2dfaea 100644 --- a/source/net/filebot/util/PreferencesMap.java +++ b/source/net/filebot/util/PreferencesMap.java @@ -1,7 +1,5 @@ - package net.filebot.util; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -17,28 +15,26 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; - public class PreferencesMap implements Map { private final Preferences prefs; private final Adapter adapter; - public PreferencesMap(Preferences prefs, Adapter adapter) { this.prefs = prefs; this.adapter = adapter; } - @Override public T get(Object key) { return adapter.get(prefs, key.toString()); } - @Override public T put(String key, T value) { adapter.put(prefs, key, value); @@ -47,7 +43,6 @@ public class PreferencesMap implements Map { return null; } - @Override public T remove(Object key) { adapter.remove(prefs, key.toString()); @@ -56,7 +51,6 @@ public class PreferencesMap implements Map { return null; } - public String[] keys() { try { return adapter.keys(prefs); @@ -65,7 +59,6 @@ public class PreferencesMap implements Map { } } - @Override public void clear() { for (String key : keys()) { @@ -73,7 +66,6 @@ public class PreferencesMap implements Map { } } - @Override public boolean containsKey(Object key) { if (key instanceof String) { @@ -83,7 +75,6 @@ public class PreferencesMap implements Map { return false; } - @Override public boolean containsValue(Object value) { for (String key : keys()) { @@ -94,7 +85,6 @@ public class PreferencesMap implements Map { return false; } - @Override public Set> entrySet() { Set> entries = new LinkedHashSet>(); @@ -106,19 +96,16 @@ public class PreferencesMap implements Map { return entries; } - @Override public boolean isEmpty() { return size() == 0; } - @Override public Set keySet() { return new LinkedHashSet(Arrays.asList(keys())); } - @Override public void putAll(Map map) { for (Map.Entry entry : map.entrySet()) { @@ -126,13 +113,11 @@ public class PreferencesMap implements Map { } } - @Override public int size() { return keys().length; } - @Override public Collection values() { List values = new ArrayList(); @@ -144,48 +129,38 @@ public class PreferencesMap implements Map { return values; } - public static PreferencesMap map(Preferences prefs) { return map(prefs, new StringAdapter()); } - public static PreferencesMap map(Preferences prefs, Adapter adapter) { return new PreferencesMap(prefs, adapter); } - public static interface Adapter { public String[] keys(Preferences prefs) throws BackingStoreException; - public T get(Preferences prefs, String key); - public void put(Preferences prefs, String key, T value); - public void remove(Preferences prefs, String key); } - public static abstract class AbstractAdapter implements Adapter { @Override public abstract T get(Preferences prefs, String key); - @Override public abstract void put(Preferences prefs, String key, T value); - @Override public String[] keys(Preferences prefs) throws BackingStoreException { return prefs.keys(); } - @Override public void remove(Preferences prefs, String key) { prefs.remove(key); @@ -193,7 +168,6 @@ public class PreferencesMap implements Map { } - public static class StringAdapter extends AbstractAdapter { @Override @@ -201,7 +175,6 @@ public class PreferencesMap implements Map { return prefs.get(key, null); } - @Override public void put(Preferences prefs, String key, String value) { prefs.put(key, value); @@ -209,12 +182,10 @@ public class PreferencesMap implements Map { } - public static class SimpleAdapter extends AbstractAdapter { private final Constructor constructor; - public SimpleAdapter(Class type) { try { constructor = type.getConstructor(String.class); @@ -223,7 +194,6 @@ public class PreferencesMap implements Map { } } - @Override public T get(Preferences prefs, String key) { String value = prefs.get(key, null); @@ -242,20 +212,17 @@ public class PreferencesMap implements Map { return null; } - @Override public void put(Preferences prefs, String key, T value) { prefs.put(key, value.toString()); } - public static SimpleAdapter forClass(Class type) { return new SimpleAdapter(type); } } - public static class SerializableAdapter extends AbstractAdapter { @SuppressWarnings("unchecked") @@ -277,7 +244,6 @@ public class PreferencesMap implements Map { } } - @Override public void put(Preferences prefs, String key, T value) { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); @@ -294,7 +260,6 @@ public class PreferencesMap implements Map { } } - public static class PreferencesEntry implements Entry { private final String key; @@ -305,43 +270,46 @@ public class PreferencesMap implements Map { private T defaultValue = null; - public PreferencesEntry(Preferences prefs, String key, Adapter adapter) { this.key = key; this.prefs = prefs; this.adapter = adapter; } - @Override public String getKey() { return key; } - @Override public T getValue() { T value = adapter.get(prefs, key); return value != null ? value : defaultValue; } - @Override public T setValue(T value) { adapter.put(prefs, key, value); return null; } - public PreferencesEntry defaultValue(T defaultValue) { this.defaultValue = defaultValue; return this; } - public void remove() { adapter.remove(prefs, key); } + + public void flush() { + try { + prefs.flush(); + } catch (Exception e) { + Logger.getLogger(PreferencesMap.class.getName()).log(Level.WARNING, e.toString()); + } + } + } }