diff --git a/src/main/java/device/Fitbit.java b/src/main/java/device/Fitbit.java index 0bfe25c..961c4a7 100644 --- a/src/main/java/device/Fitbit.java +++ b/src/main/java/device/Fitbit.java @@ -147,9 +147,9 @@ public class Fitbit { * * @return un intero rappresentante le ore passate a dormire */ - public synchronized long getHoursSleep() { + public synchronized double getHoursSleep() { sleep = update(Sleep.class, sleep,"1.2" + USER + "sleep/date/today.json"); - return sleep.getMinutesAsleep()/60; + return (double)sleep.getMinutesAsleep()/60; } /** diff --git a/src/main/java/device/fitbitdata/Sleep.java b/src/main/java/device/fitbitdata/Sleep.java index 6d1c27d..963964b 100644 --- a/src/main/java/device/fitbitdata/Sleep.java +++ b/src/main/java/device/fitbitdata/Sleep.java @@ -16,13 +16,13 @@ import java.util.Map; @JsonIgnoreProperties(ignoreUnknown = true) public class Sleep { - private long minutesAsleep; + private int minutesAsleep; private List datas; @JsonProperty("summary") private void setMinutesAsleep(Map map) { - minutesAsleep = (long) map.get("totalMinutesAsleep"); + minutesAsleep = (int) map.get("totalMinutesAsleep"); } @JsonProperty("sleep") diff --git a/src/main/java/main/SeniorAssistant.java b/src/main/java/main/SeniorAssistant.java index d4a4768..a1423e1 100644 --- a/src/main/java/main/SeniorAssistant.java +++ b/src/main/java/main/SeniorAssistant.java @@ -70,6 +70,8 @@ public class SeniorAssistant { LOG.info("Connessione al database..."); Database database = remoteDbUser == null ? new LocalDB() : new RemoteDB(remoteDbUser); + if(remoteDbUser != null && !database.isReachable()) + database = new LocalDB(); threads.startInsertData(database, fitbit); threads.startHueControlledByHeartBeat(lights, fitbit, database); diff --git a/src/main/java/main/VariousThreads.java b/src/main/java/main/VariousThreads.java index 346b3c6..8f82998 100644 --- a/src/main/java/main/VariousThreads.java +++ b/src/main/java/main/VariousThreads.java @@ -8,7 +8,6 @@ import device.fitbitdata.HeartRate; import device.fitbitdata.Steps; import support.audio.Audio; import support.audio.AudioFile; -import support.audio.Musich; import support.database.Database; import java.sql.Timestamp; @@ -102,8 +101,8 @@ public class VariousThreads { return String.format("Oggi hai percorso circa %.2f kilometri", steps/2000); }); df.addOnAction("ReqSleep", (params) -> { - long sleep = fitbit.getHoursSleep(); - return String.format("Oggi hai dormito per %.2f ore", (double)sleep/3600000); + double sleep = fitbit.getHoursSleep(); + return String.format("Oggi hai dormito per %.2f ore", sleep); }); df.startServer(); @@ -172,7 +171,6 @@ public class VariousThreads { public void startHueControlledByHeartBeat(final Hue lights, final Fitbit fitbit, final Database database) { final int minutes = 30; final int delta = 15; - final Audio audio = new AudioFile(); Thread thread = getThreadStartingEach(new Runnable() { @Override public synchronized void run() { @@ -198,11 +196,11 @@ public class VariousThreads { if (Math.abs(rateNow-average) > delta ) { // ALTO lights.decreaseBrightness(); audio.playRandom("relax"); - new AudioFile().play("molti battiti.wav"); + new AudioFile("molti battiti.wav"); } else if (Math.abs(rateNow-average) < delta) { // BASSO avvisa ma niente musica lights.increaseBrightness(); - audio.play("pochi battiti.wav"); + new AudioFile("pochi battiti.wav"); } } }, minutes, "lights-with-heartbeat"); @@ -219,7 +217,6 @@ public class VariousThreads { public void startCheckSteps(final Database database) { final int norm = 4500; final int delta = 1500; // average steps for 60 year old -> 3.500-5.500 or so they say - final Audio audio = new AudioFile(); Thread thread = getThreadStartingAt(new Runnable() { @Override @@ -233,9 +230,9 @@ public class VariousThreads { final long average = size!=0? (long)(sum/size):0; if (Math.abs(norm-average) > delta ) - audio.play("molti passi.wav"); + new AudioFile("molti passi.wav"); else if (Math.abs(norm-average) < delta) - audio.play("pochi passi.wav"); + new AudioFile("pochi passi.wav"); } }, 20, "checking-steps"); diff --git a/src/main/java/support/audio/AudioFile.java b/src/main/java/support/audio/AudioFile.java index 96a4f30..c75e58a 100644 --- a/src/main/java/support/audio/AudioFile.java +++ b/src/main/java/support/audio/AudioFile.java @@ -1,11 +1,10 @@ package support.audio; -import sun.audio.AudioPlayer; -import sun.audio.AudioStream; - +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; +import javax.sound.sampled.LineUnavailableException; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -24,7 +23,7 @@ public class AudioFile implements Audio { /** * L'ultimo audio fatto partire */ - private AudioStream lastIn = null; + private final Clip clip; /** * Serve per crearsi una mappa di tutte le canzoni @@ -36,6 +35,28 @@ public class AudioFile implements Audio { */ private final static Map> dirs = getAllDirs(PATH_AUDIO); + /** + * Crea un oggetto audio che si puo' poi far riprodurre e stoppare + */ + public AudioFile() { + Clip clip = null; + try { + clip = AudioSystem.getClip(); + } catch (LineUnavailableException e) { + e.printStackTrace(); + } + this.clip = clip; + } + + /** + * Utilizzando questo costruttore si fa partire in automatico il file scelto + * @param file il nome del file scelto da far partire subito + */ + public AudioFile(String file) { + this(); + this.play(file); + } + /** * Fa partire una canzone che si trova nella cartella audio o in una delle sue sottocartelle * @param name la stringa per far partire la canzone @@ -45,10 +66,10 @@ public class AudioFile implements Audio { stop(); try { File file = files.get(name); - lastIn = new AudioStream( new FileInputStream(file)); - AudioPlayer.player.start(lastIn); - - } catch (IOException e) { + AudioInputStream audioIn = AudioSystem.getAudioInputStream(file); + clip.open(audioIn); + clip.start(); + } catch (Exception e) { e.printStackTrace(); } } @@ -66,12 +87,11 @@ public class AudioFile implements Audio { @Override public void stop() { try { - AudioPlayer.player.stop(lastIn); - lastIn.close(); - lastIn = null; - } catch (IOException e) { + clip.stop(); + clip.close(); + } catch (Exception e) { e.printStackTrace(); - } catch (NullPointerException e) {} + } } /** diff --git a/src/main/java/support/database/LocalDB.java b/src/main/java/support/database/LocalDB.java index ba7939d..b048aee 100644 --- a/src/main/java/support/database/LocalDB.java +++ b/src/main/java/support/database/LocalDB.java @@ -20,7 +20,7 @@ public class LocalDB implements Database { /** * Il percorso dove trovare il database, strutturato in: <interfaccia>:<implementazione>:<percorso vero e proprio> */ - public static final String DB_LOCATION = "jdbc:sqlite:"; + public static final String DB_LOCATION = "jdbc:sqlite:src/main/resources/"; /** * Il nome del database (aka il nome del file) diff --git a/src/main/resources/audio/molti battiti.wav b/src/main/resources/audio/molti battiti.wav deleted file mode 100644 index 800babc..0000000 Binary files a/src/main/resources/audio/molti battiti.wav and /dev/null differ diff --git a/src/main/resources/audio/molti passi.wav b/src/main/resources/audio/molti passi.wav deleted file mode 100644 index 2f8e670..0000000 Binary files a/src/main/resources/audio/molti passi.wav and /dev/null differ diff --git a/src/main/resources/audio/pochi battiti.wav b/src/main/resources/audio/pochi battiti.wav deleted file mode 100644 index 64212d4..0000000 Binary files a/src/main/resources/audio/pochi battiti.wav and /dev/null differ diff --git a/src/main/resources/audio/pochi passi.wav b/src/main/resources/audio/pochi passi.wav deleted file mode 100644 index 384ae79..0000000 Binary files a/src/main/resources/audio/pochi passi.wav and /dev/null differ diff --git a/src/main/resources/audio/random/Godzilla.wav b/src/main/resources/audio/random/Godzilla.wav index 4831bab..a6c7779 100644 Binary files a/src/main/resources/audio/random/Godzilla.wav and b/src/main/resources/audio/random/Godzilla.wav differ diff --git a/src/main/resources/audio/warnings/molti battiti.wav b/src/main/resources/audio/warnings/molti battiti.wav new file mode 100644 index 0000000..63d0db9 Binary files /dev/null and b/src/main/resources/audio/warnings/molti battiti.wav differ diff --git a/src/main/resources/audio/warnings/molti passi.wav b/src/main/resources/audio/warnings/molti passi.wav new file mode 100644 index 0000000..11d54c4 Binary files /dev/null and b/src/main/resources/audio/warnings/molti passi.wav differ diff --git a/src/main/resources/audio/warnings/pochi battiti.wav b/src/main/resources/audio/warnings/pochi battiti.wav new file mode 100644 index 0000000..16713d3 Binary files /dev/null and b/src/main/resources/audio/warnings/pochi battiti.wav differ diff --git a/src/main/resources/audio/warnings/pochi passi.wav b/src/main/resources/audio/warnings/pochi passi.wav new file mode 100644 index 0000000..7660167 Binary files /dev/null and b/src/main/resources/audio/warnings/pochi passi.wav differ diff --git a/src/main/resources/simplelogger.properties b/src/main/resources/simplelogger.properties index 2d84343..8cdea67 100644 --- a/src/main/resources/simplelogger.properties +++ b/src/main/resources/simplelogger.properties @@ -1,2 +1,2 @@ -org.slf4j.simpleLogger.defaultLogLevel=warn +org.slf4j.simpleLogger.defaultLogLevel=info org.slf4j.simpleLogger.logFile=System.out \ No newline at end of file diff --git a/src/main/resources/user_data.db b/src/main/resources/user_data.db index 94bb9af..c5420c3 100644 Binary files a/src/main/resources/user_data.db and b/src/main/resources/user_data.db differ diff --git a/src/test/java/test/TestMusich.java b/src/test/java/test/TestMusich.java index 9732491..cfe5cd3 100644 --- a/src/test/java/test/TestMusich.java +++ b/src/test/java/test/TestMusich.java @@ -21,7 +21,7 @@ public class TestMusich { @Test public void test2() { AudioFile audio = new AudioFile(); - audio.play("Godzilla.wav"); // apparently it doesn't like some wav + audio.play("Godzilla.wav"); waitAndPrint(3); audio.play("Tullio.wav"); waitAndPrint(10); @@ -46,6 +46,18 @@ public class TestMusich { audio2.stop(); } + @Test + public void test4() { + AudioFile audio = new AudioFile(); + + new AudioFile("pochi passi.wav"); + waitAndPrint(3); + audio.play("molti battiti.wav"); + waitAndPrint(3); + audio.stop(); + } + + public void waitAndPrint(Integer seconds) { if(seconds != null) synchronized (seconds) { try {