diff --git a/buildNumber.properties b/buildNumber.properties
index a792328..155add6 100644
--- a/buildNumber.properties
+++ b/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:53 GMT 2021
-buildNumber=137
+#Sun Feb 07 22:19:12 GMT 2021
+buildNumber=145
diff --git a/snake-app-linux/buildNumber.properties b/snake-app-linux/buildNumber.properties
index 526038f..abab5bb 100644
--- a/snake-app-linux/buildNumber.properties
+++ b/snake-app-linux/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:59 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:18 GMT 2021
+buildNumber=131
diff --git a/snake-backend-openrazer/buildNumber.properties b/snake-backend-openrazer/buildNumber.properties
index b13404c..dd0c726 100644
--- a/snake-backend-openrazer/buildNumber.properties
+++ b/snake-backend-openrazer/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:57 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:16 GMT 2021
+buildNumber=131
diff --git a/snake-dist/buildNumber.properties b/snake-dist/buildNumber.properties
index a69a465..494ba43 100644
--- a/snake-dist/buildNumber.properties
+++ b/snake-dist/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:13:01 GMT 2021
-buildNumber=122
+#Sun Feb 07 22:19:20 GMT 2021
+buildNumber=130
diff --git a/snake-dist/pom.xml b/snake-dist/pom.xml
index ec6caaa..096017b 100644
--- a/snake-dist/pom.xml
+++ b/snake-dist/pom.xml
@@ -85,6 +85,7 @@
install-location ${installer.home}/snake-razer
jvmarg --add-modules
jvmarg themes.awhitelight,themes.agreenfuture,themes.aredsky,themes.abluelife,themes.ayellowdwarf,themes.anorangetwist,themes.apinkburst,themes.apurplehaze
+ jvmarg -Djfreedesktop.quiet=true
@@ -178,6 +179,7 @@
install-location ${installer.home}/snake-razer
jvmarg --add-modules
jvmarg themes.awhitelight,themes.agreenfuture,themes.aredsky,themes.abluelife,themes.ayellowdwarf,themes.anorangetwist,themes.apinkburst,themes.apurplehaze
+ jvmarg -Djfreedesktop.quiet=true
diff --git a/snake-lib/buildNumber.properties b/snake-lib/buildNumber.properties
index c10d8dd..8e6a609 100644
--- a/snake-lib/buildNumber.properties
+++ b/snake-lib/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:55 GMT 2021
-buildNumber=136
+#Sun Feb 07 22:19:14 GMT 2021
+buildNumber=144
diff --git a/snake-themes/buildNumber.properties b/snake-themes/buildNumber.properties
index b13404c..dd0c726 100644
--- a/snake-themes/buildNumber.properties
+++ b/snake-themes/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:57 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:16 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-abluelife/buildNumber.properties b/snake-themes/snake-theme-abluelife/buildNumber.properties
index 6be298e..5e707c1 100644
--- a/snake-themes/snake-theme-abluelife/buildNumber.properties
+++ b/snake-themes/snake-theme-abluelife/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:58 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-agreenfuture/buildNumber.properties b/snake-themes/snake-theme-agreenfuture/buildNumber.properties
index 6be298e..5e707c1 100644
--- a/snake-themes/snake-theme-agreenfuture/buildNumber.properties
+++ b/snake-themes/snake-theme-agreenfuture/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:58 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-anorangetwist/buildNumber.properties b/snake-themes/snake-theme-anorangetwist/buildNumber.properties
index 6be298e..5e707c1 100644
--- a/snake-themes/snake-theme-anorangetwist/buildNumber.properties
+++ b/snake-themes/snake-theme-anorangetwist/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:58 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-apinkburst/buildNumber.properties b/snake-themes/snake-theme-apinkburst/buildNumber.properties
index 6be298e..5e707c1 100644
--- a/snake-themes/snake-theme-apinkburst/buildNumber.properties
+++ b/snake-themes/snake-theme-apinkburst/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:58 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-apurplehaze/buildNumber.properties b/snake-themes/snake-theme-apurplehaze/buildNumber.properties
index 526038f..5e707c1 100644
--- a/snake-themes/snake-theme-apurplehaze/buildNumber.properties
+++ b/snake-themes/snake-theme-apurplehaze/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:59 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-aredsky/buildNumber.properties b/snake-themes/snake-theme-aredsky/buildNumber.properties
index 6be298e..5e707c1 100644
--- a/snake-themes/snake-theme-aredsky/buildNumber.properties
+++ b/snake-themes/snake-theme-aredsky/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:58 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-awhitelight/buildNumber.properties b/snake-themes/snake-theme-awhitelight/buildNumber.properties
index b13404c..dd0c726 100644
--- a/snake-themes/snake-theme-awhitelight/buildNumber.properties
+++ b/snake-themes/snake-theme-awhitelight/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:57 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:16 GMT 2021
+buildNumber=131
diff --git a/snake-themes/snake-theme-ayellowdwarf/buildNumber.properties b/snake-themes/snake-theme-ayellowdwarf/buildNumber.properties
index 6be298e..5e707c1 100644
--- a/snake-themes/snake-theme-ayellowdwarf/buildNumber.properties
+++ b/snake-themes/snake-theme-ayellowdwarf/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:58 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:17 GMT 2021
+buildNumber=131
diff --git a/snake-ui-linux/buildNumber.properties b/snake-ui-linux/buildNumber.properties
index b13404c..dd0c726 100644
--- a/snake-ui-linux/buildNumber.properties
+++ b/snake-ui-linux/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:57 GMT 2021
-buildNumber=123
+#Sun Feb 07 22:19:16 GMT 2021
+buildNumber=131
diff --git a/snake-ui/buildNumber.properties b/snake-ui/buildNumber.properties
index 834f74a..5ad9a8e 100644
--- a/snake-ui/buildNumber.properties
+++ b/snake-ui/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:57 GMT 2021
-buildNumber=124
+#Sun Feb 07 22:19:16 GMT 2021
+buildNumber=132
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/App.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/App.java
index 1a92502..99d8be1 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/App.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/App.java
@@ -467,11 +467,6 @@ else if (evt.getKey().equals(Configuration.PREF_TRANSPARENCY)) {
PlatformService.get().setStartOnLogin(true);
PREFS.putBoolean("installed", true);
}
-
- addOnManager.start();
- effectManager.open();
-
- new DesktopNotifications(this);
}
private void clearControllers() {
@@ -525,6 +520,11 @@ private void createMainScene() throws IOException {
try {
if (!backendInited) {
initBackend();
+
+ addOnManager.start();
+ effectManager.open();
+
+ new DesktopNotifications(this);
}
if (!macroManager.isStarted())
@@ -535,6 +535,7 @@ private void createMainScene() throws IOException {
} else {
push(Overview.class, Direction.FADE);
}
+
} catch (Exception e) {
LOG.log(Level.ERROR, "Failed to initialize.", e);
Error fc = openScene(Error.class, null);
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/AudioOptions.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/AudioOptions.java
index 7be6411..f0b4063 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/AudioOptions.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/AudioOptions.java
@@ -67,13 +67,17 @@ protected void onConfigure() throws Exception {
gain.setValue(cfg.getAudioGain());
gain.valueProperty().addListener((e, o, n) -> cfg.setAudioGain(n.floatValue()));
+ checkAudioState(context, this);
+
+ }
+
+ public static void checkAudioState(App context, AbstractController controller) {
if (context.getAudioManager().getError() != null) {
- notifyMessage(MessagePersistence.EVERYTIME, MessageType.DANGER, null,
+ controller.notifyMessage(MessagePersistence.EVERYTIME, MessageType.DANGER, null,
MessageFormat.format(bundle.getString("error.noAudioSystem"),
context.getAudioManager().getError().getLocalizedMessage()),
60);
}
-
}
@Override
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/Cache.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/Cache.java
index db5ecd1..db7f21d 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/Cache.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/Cache.java
@@ -85,7 +85,10 @@ public String getCachedImage(String image) {
resolved.put(image, cacheFile.toURI().toURL().toExternalForm());
}
} catch (IOException ioe) {
- LOG.log(Level.ERROR, "Failed to cache image.", ioe);
+ if(LOG.isLoggable(Level.DEBUG))
+ LOG.log(Level.ERROR, "Failed to cache image.", ioe);
+ else
+ LOG.log(Level.ERROR, "Failed to cache image. " + ioe.getMessage());
resolved.put(image, image);
return;
}
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/addons/AddOnManager.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/addons/AddOnManager.java
index fff7783..8998303 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/addons/AddOnManager.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/addons/AddOnManager.java
@@ -383,7 +383,7 @@ public void start() {
try {
startDeviceEffects(effect);
} catch (Exception e) {
- LOG.log(Level.ERROR, "Failed to start script.", e);
+ LOG.log(Level.ERROR, "Failed to start custom effects.", e);
}
}
context.getBackend().addListener(this);
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/audio/AudioManager.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/audio/AudioManager.java
index 03835ec..be180fb 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/audio/AudioManager.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/audio/AudioManager.java
@@ -100,7 +100,7 @@ public String toString() {
private ScheduledFuture> grabTask;
private Configuration cfg;
private ScheduledExecutorService queue;
- private Exception error;
+ private Throwable error;
public AudioManager(App context) {
this.context = context;
@@ -164,7 +164,7 @@ public List getSinks() {
return backend == null ? Collections.emptyList() : backend.getSinks();
}
- public Exception getError() {
+ public Throwable getError() {
return error;
}
@@ -285,7 +285,64 @@ public void preferenceChange(PreferenceChangeEvent evt) {
}
protected AudioBackend createBackend() {
- return new JImpulseAudioBackend(this);
+ try {
+ return new JImpulseAudioBackend(this);
+ } catch (UnsatisfiedLinkError | Exception e) {
+ error = e;
+ if (LOG.isLoggable(Level.DEBUG))
+ LOG.log(Level.ERROR, "Failed to setup audio backend. Do you have libfftw-3 installed?", e);
+ else
+ LOG.log(Level.ERROR,
+ "Failed to setup audio backend. Do you have libfftw-3 installed? " + e.getLocalizedMessage());
+ return new AudioBackend() {
+
+ @Override
+ public void setSourceIndex(int index) {
+ }
+
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public void stop() {
+ }
+
+ @Override
+ public double[] getSnapshot(boolean audioFFT) {
+ return null;
+ }
+
+ @Override
+ public List getSources() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List getSinks() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public int getVolume(AudioSink sink) {
+ return 0;
+ }
+
+ @Override
+ public void setVolume(AudioSink sink, int volume) {
+ }
+
+ @Override
+ public boolean isMuted(AudioSink sink) {
+ return false;
+ }
+
+ @Override
+ public void setMuted(AudioSink sink, boolean muted) {
+ }
+
+ };
+ }
}
@SuppressWarnings("resource")
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/effects/EffectManager.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/effects/EffectManager.java
index 3f004ca..0da0be7 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/effects/EffectManager.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/effects/EffectManager.java
@@ -324,7 +324,12 @@ public void add(Device device, EffectHandler, ?> handler) {
public void open() {
context.getBackend().addListener(this);
- context.getBackend().setSync(context.getPreferences().getBoolean(PREF_SYNC, false));
+ try {
+ context.getBackend().setSync(context.getPreferences().getBoolean(PREF_SYNC, false));
+ }
+ catch(Exception e) {
+ LOG.log(Level.ERROR, "Failed to set sync state.", e);
+ }
}
public void addListener(Listener listener) {
diff --git a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/tray/Tray.java b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/tray/Tray.java
index 7af920b..83fa21d 100644
--- a/snake-ui/src/main/java/uk/co/bithatch/snake/ui/tray/Tray.java
+++ b/snake-ui/src/main/java/uk/co/bithatch/snake/ui/tray/Tray.java
@@ -1,5 +1,6 @@
package uk.co.bithatch.snake.ui.tray;
+
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
@@ -17,6 +18,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.System.Logger.Level;
import java.net.URL;
import java.text.MessageFormat;
import java.util.ArrayList;
@@ -39,6 +41,7 @@
import dorkbox.systemTray.MenuItem;
import dorkbox.systemTray.Separator;
import dorkbox.systemTray.SystemTray;
+import dorkbox.systemTray.util.SystemTrayFixes;
import javafx.application.Platform;
import uk.co.bithatch.macrolib.MacroSystem.RecordingListener;
import uk.co.bithatch.macrolib.RecordingSession;
@@ -66,6 +69,8 @@
public class Tray implements AutoCloseable, BackendListener, Listener, PreferenceChangeListener, RecordingListener {
+ final static System.Logger LOG = System.getLogger(Tray.class.getName());
+
final static ResourceBundle bundle = ResourceBundle.getBundle(Tray.class.getName());
private Configuration cfg;
@@ -107,6 +112,7 @@ public void close() throws Exception {
Menu addDevice(Device device, Menu toMenu) throws IOException {
var img = context.getDefaultImage(device.getType(), context.getCache().getCachedImage(device.getImage()));
+ Menu menu = null;
if (img.startsWith("http:") || img.startsWith("https:")) {
var url = new URL(img);
var path = url.getPath();
@@ -119,13 +125,26 @@ Menu addDevice(Device device, Menu toMenu) throws IOException {
try (var fos = new FileOutputStream(tf)) {
try (InputStream is = url.openStream()) {
is.transferTo(fos);
+ img = tf.getAbsolutePath();
+ }
+ } catch(IOException ioe) {
+ try(InputStream in = SystemTrayFixes.class.getResource("error_32.png").openStream()) {
+ menu = new Menu(device.getName(), in);
}
+ if(LOG.isLoggable(Level.DEBUG))
+ LOG.log(Level.WARNING, "Failed to load device image.", ioe);
+ else
+ LOG.log(Level.WARNING, "Failed to load device image. " + ioe.getMessage() );
}
- img = tf.getAbsolutePath();
} else if (img.startsWith("file:")) {
img = img.substring(5);
}
- var menu = toMenu == null ? new Menu(device.getName(), img) : toMenu;
+ if(toMenu == null) {
+ if(menu == null)
+ menu = new Menu(device.getName(), img);
+ }
+ else
+ menu = toMenu;
/* Open */
var openDev = new MenuItem(bundle.getString("open"), (e) -> Platform.runLater(() -> {
diff --git a/snake-ui/src/main/resources/uk/co/bithatch/snake/ui/AudioOptions.properties b/snake-ui/src/main/resources/uk/co/bithatch/snake/ui/AudioOptions.properties
index d2056b0..a73becc 100644
--- a/snake-ui/src/main/resources/uk/co/bithatch/snake/ui/AudioOptions.properties
+++ b/snake-ui/src/main/resources/uk/co/bithatch/snake/ui/AudioOptions.properties
@@ -15,4 +15,4 @@ audioEffectMode.ExpandAudioEffectMode=Growy
audioEffectMode.BlobbyAudioEffectMode=Blobby
audioEffectMode.BurstyAudioEffectMode=Bursty
audioEffectMode.LineyAudioEffectMode=Liney
-error.noAudioSystem=No audio system is available. {0}.
\ No newline at end of file
+error.noAudioSystem=No audio system is available. {0}. Do you have libpulse and libfftw-3 installed?
\ No newline at end of file
diff --git a/snake-updater/buildNumber.properties b/snake-updater/buildNumber.properties
index a69a465..494ba43 100644
--- a/snake-updater/buildNumber.properties
+++ b/snake-updater/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:13:01 GMT 2021
-buildNumber=122
+#Sun Feb 07 22:19:20 GMT 2021
+buildNumber=130
diff --git a/snake-widgets/buildNumber.properties b/snake-widgets/buildNumber.properties
index 36d9b9f..6c8fc8a 100644
--- a/snake-widgets/buildNumber.properties
+++ b/snake-widgets/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
-#Thu Feb 04 01:12:54 GMT 2021
-buildNumber=150
+#Sun Feb 07 22:19:13 GMT 2021
+buildNumber=158
diff --git a/target/CHANGES.md b/target/CHANGES.md
index 081c5c6..f0e7177 100644
--- a/target/CHANGES.md
+++ b/target/CHANGES.md
@@ -1,4 +1,4 @@
-# 1.0.0-SNAPSHOT-137
+# 1.0.0-SNAPSHOT-145
* Audio lighting effects. Requires `libpulse` and `libfftw-3` to be installed.