fix: prefs change events didn't work after loading
Showing 4 of 6 files from the diff.
Other files ignored by Codecov
CHANGELOG.md
has changed.
@@ -1,9 +1,12 @@
Loading
1 | 1 | package nl.weeaboo.vn.impl.core; |
|
2 | 2 | ||
3 | + | import java.io.IOException; |
|
4 | + | import java.io.ObjectInputStream; |
|
3 | 5 | import java.io.Serializable; |
|
4 | 6 | ||
5 | 7 | import nl.weeaboo.common.Dim; |
|
6 | 8 | import nl.weeaboo.common.Rect; |
|
9 | + | import nl.weeaboo.io.CustomSerializable; |
|
7 | 10 | import nl.weeaboo.lua2.LuaRunState; |
|
8 | 11 | import nl.weeaboo.vn.core.IContextManager; |
|
9 | 12 | import nl.weeaboo.vn.core.IEnvironment; |
@@ -11,7 +14,6 @@
Loading
11 | 14 | import nl.weeaboo.vn.core.ISystemModule; |
|
12 | 15 | import nl.weeaboo.vn.image.IImageModule; |
|
13 | 16 | import nl.weeaboo.vn.impl.script.lua.LuaScriptEnv; |
|
14 | - | import nl.weeaboo.vn.impl.signal.SignalUtil; |
|
15 | 17 | import nl.weeaboo.vn.render.IRenderEnv; |
|
16 | 18 | import nl.weeaboo.vn.save.ISaveModule; |
|
17 | 19 | import nl.weeaboo.vn.signal.RenderEnvChangeSignal; |
@@ -23,6 +25,7 @@
Loading
23 | 25 | /** |
|
24 | 26 | * Default implementation of {@link IEnvironment}. |
|
25 | 27 | */ |
|
28 | + | @CustomSerializable |
|
26 | 29 | public class DefaultEnvironment extends AbstractEnvironment implements Serializable { |
|
27 | 30 | ||
28 | 31 | private static final long serialVersionUID = CoreImpl.serialVersionUID; |
@@ -43,9 +46,19 @@
Loading
43 | 46 | private boolean destroyed; |
|
44 | 47 | ||
45 | 48 | public DefaultEnvironment() { |
|
49 | + | initTransients(); |
|
50 | + | } |
|
51 | + | ||
52 | + | private void initTransients() { |
|
46 | 53 | getPrefStore().addPreferenceListener(this); |
|
47 | 54 | } |
|
48 | 55 | ||
56 | + | private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { |
|
57 | + | in.defaultReadObject(); |
|
58 | + | ||
59 | + | initTransients(); |
|
60 | + | } |
|
61 | + | ||
49 | 62 | @Override |
|
50 | 63 | public void destroy() { |
|
51 | 64 | if (destroyed) { |
@@ -135,9 +148,7 @@
Loading
135 | 148 | IRenderEnv old = getRenderEnv(); |
|
136 | 149 | renderEnv = new RenderEnv(old.getVirtualSize(), realClip, realScreenSize); |
|
137 | 150 | ||
138 | - | RenderEnvChangeSignal signal = new RenderEnvChangeSignal(renderEnv); |
|
139 | - | SignalUtil.forward(signal, getModules()); |
|
140 | - | SignalUtil.forward(signal, contextManager); |
|
151 | + | fireSignal(new RenderEnvChangeSignal(renderEnv)); |
|
141 | 152 | } |
|
142 | 153 | ||
143 | 154 | } |
@@ -16,6 +16,7 @@
Loading
16 | 16 | import nl.weeaboo.vn.gdx.res.GdxCleaner; |
|
17 | 17 | import nl.weeaboo.vn.gdx.res.NativeMemoryTracker; |
|
18 | 18 | import nl.weeaboo.vn.impl.signal.SignalUtil; |
|
19 | + | import nl.weeaboo.vn.signal.ISignal; |
|
19 | 20 | import nl.weeaboo.vn.signal.PrefsChangeSignal; |
|
20 | 21 | import nl.weeaboo.vn.stats.IResourceLoadLog; |
|
21 | 22 |
@@ -87,10 +88,13 @@
Loading
87 | 88 | /** Called when the global preferences change. */ |
|
88 | 89 | @Override |
|
89 | 90 | public <T> void onPreferenceChanged(Preference<T> pref, T oldValue, T newValue) { |
|
90 | - | IPreferenceStore prefsStore = getPrefStore(); |
|
91 | - | PrefsChangeSignal prefsChangeSignal = new PrefsChangeSignal(prefsStore); |
|
92 | - | SignalUtil.forward(prefsChangeSignal, getModules()); |
|
93 | - | SignalUtil.forward(prefsChangeSignal, getContextManager()); |
|
91 | + | fireSignal(new PrefsChangeSignal(getPrefStore())); |
|
92 | + | } |
|
93 | + | ||
94 | + | @Override |
|
95 | + | public final void fireSignal(ISignal signal) { |
|
96 | + | SignalUtil.forward(signal, getModules()); |
|
97 | + | SignalUtil.forward(signal, getContextManager()); |
|
94 | 98 | } |
|
95 | 99 | ||
96 | 100 | @Override |
@@ -42,6 +42,8 @@
Loading
42 | 42 | import nl.weeaboo.vn.save.IStorage; |
|
43 | 43 | import nl.weeaboo.vn.save.SaveFormatException; |
|
44 | 44 | import nl.weeaboo.vn.save.ThumbnailInfo; |
|
45 | + | import nl.weeaboo.vn.signal.PrefsChangeSignal; |
|
46 | + | import nl.weeaboo.vn.signal.RenderEnvChangeSignal; |
|
45 | 47 | import nl.weeaboo.vn.stats.IStatsModule; |
|
46 | 48 | ||
47 | 49 | /** |
@@ -133,6 +135,10 @@
Loading
133 | 135 | for (IPersistentSavePlugin plugin : Lists.reverse(getPersistentSavePlugins())) { |
|
134 | 136 | plugin.loadPersistent(writer); |
|
135 | 137 | } |
|
138 | + | ||
139 | + | // The external environment may have also changed |
|
140 | + | env.fireSignal(new RenderEnvChangeSignal(env.getRenderEnv())); |
|
141 | + | env.fireSignal(new PrefsChangeSignal(env.getPrefStore())); |
|
136 | 142 | } |
|
137 | 143 | ||
138 | 144 | @Override |
@@ -247,17 +253,19 @@
Loading
247 | 253 | is.setDepthWarnLimit(125); |
|
248 | 254 | try { |
|
249 | 255 | novel.readAttributes(is); |
|
250 | - | ||
251 | - | /* |
|
252 | - | * Note: be very careful here. We've just recreated the env in novel, but we're still running |
|
253 | - | * in the SaveModule of the previous env. |
|
254 | - | */ |
|
255 | - | novel.getEnv().getSaveModule().loadPersistent(); |
|
256 | + | is.close(); |
|
256 | 257 | } catch (ClassNotFoundException e) { |
|
257 | 258 | throw new IOException(e); |
|
258 | 259 | } finally { |
|
260 | + | // Note: The 'readDelayed' objects are resolved during close() |
|
259 | 261 | is.close(); |
|
260 | 262 | } |
|
263 | + | ||
264 | + | /* |
|
265 | + | * Note: be very careful here. We've just recreated the env in novel, but we're still running |
|
266 | + | * in the SaveModule of the previous env. |
|
267 | + | */ |
|
268 | + | novel.getEnv().getSaveModule().loadPersistent(); |
|
261 | 269 | } finally { |
|
262 | 270 | in.close(); |
|
263 | 271 | } |
@@ -136,6 +136,11 @@
Loading
136 | 136 | ||
137 | 137 | static boolean callFunction(IEnvironment env, String functionName) { |
|
138 | 138 | IContext context = env.getContextManager().getPrimaryContext(); |
|
139 | + | if (context == null) { |
|
140 | + | LOG.warn("No context is active, unable to call {}", functionName); |
|
141 | + | return false; |
|
142 | + | } |
|
143 | + | ||
139 | 144 | try { |
|
140 | 145 | LuaScriptUtil.callFunction(context, functionName); |
|
141 | 146 | return true; |
Files | Complexity | Coverage |
---|---|---|
api/src/main/java/nl/weeaboo/vn | 91.53% | 96.76% |
buildtools/src/main/java/nl/weeaboo/vn/buildtools | 83.33% | 89.43% |
core/src/main/java/nl/weeaboo/vn | 82.37% | 86.62% |
Project Totals (369 files) | 83.24% | 87.66% |
712230364
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file.
The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files.
The size and color of each slice is representing the number of statements and the coverage, respectively.