diff --git a/config.properties b/config.properties index 91c2973..1a15db8 100644 --- a/config.properties +++ b/config.properties @@ -1,4 +1,4 @@ -#Tue May 13 14:43:52 WIB 2025 +#Thu May 22 11:19:22 WIB 2025 AudioPhase1=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase1.mp3 AudioPhase2=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase2.mp3 AudioPhase3=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase3.mp3 @@ -21,7 +21,7 @@ FTPPort=21 FTPUser=user FlipCamera=true MirrorCamera=true -PhotoDirectory=C\:\\Users\\rdkar\\OneDrive\\Desktop\\Erha Capture +PhotoDirectory=C\:\\Users\\Erha\\Desktop\\ErhaCapture SharpnessThreshold=1000.0 cascadeMaxSize=500 cascadeMinNeighbors=3 diff --git a/database.db b/database.db index eca0180..2f470de 100644 Binary files a/database.db and b/database.db differ diff --git a/src/main/java/Config/SomeCodes.java b/src/main/java/Config/SomeCodes.java index c0ca2ac..902f10e 100644 --- a/src/main/java/Config/SomeCodes.java +++ b/src/main/java/Config/SomeCodes.java @@ -42,6 +42,7 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; import static org.bytedeco.opencv.global.opencv_core.CV_64F; @@ -147,6 +148,19 @@ public class SomeCodes { } } + public static void WaitAsync(long millis, String threadname, Consumer success){ + Thread thread = new Thread(()->{ + try { + Thread.sleep(millis); + } catch (Exception ignored){ } + if (success != null) success.accept(null); + }); + thread.setName(threadname); + thread.setDaemon(true); + thread.start(); + + } + /** * Make thumbfile from source jpg file * @param sourcejpg source jpg file diff --git a/src/main/java/id/co/gtc/erhacam/CaptureView.java b/src/main/java/id/co/gtc/erhacam/CaptureView.java index 1502e1a..d512d75 100644 --- a/src/main/java/id/co/gtc/erhacam/CaptureView.java +++ b/src/main/java/id/co/gtc/erhacam/CaptureView.java @@ -318,6 +318,7 @@ public class CaptureView { PlayFileWithoutEvent(audio_pengambilan_gagal); } else { PlayFileWithoutEvent(audio_hubungi_staf_kami); + clear(); } return; @@ -839,6 +840,7 @@ public class CaptureView { runningTask = timeoutExecutor.schedule(()->{ // timeout clear(); + System.out.println("180 seconds timeout"); }, timeout, TimeUnit.SECONDS); // Revisi 19/05/2025 @@ -847,12 +849,90 @@ public class CaptureView { // terakhir, PlayFile audio_hubungi_staf_kami audioTimeline = new Timeline(); - int file_duration = 8; // audio_posisikan_muka durasi 7 detik - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), k1 -> PlayFileWithoutEvent(audio_posisikan_muka))); - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(5+file_duration), k2 -> PlayFileWithoutEvent(audio_posisikan_muka))); - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(10+file_duration), k3 -> PlayFileWithoutEvent(audio_posisikan_muka))); - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(15+file_duration), k4 ->{ - PlayFileWithoutEvent(audio_hubungi_staf_kami); + final int file_duration = 8; // audio_posisikan_muka durasi 7 detik + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), k1 ->{ + + PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan pertama audio_posisikan_muka"); + } + + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } + + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }); + + })); + + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(file_duration+5), k2 -> { + PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { + + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan kedua audio_posisikan_muka"); + } + + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } + + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }); + })); + + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(3*file_duration+5), k3 -> { + + PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { + + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan ketiga audio_posisikan_muka"); + } + + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } + + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }); + + })); + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(5*file_duration+5), k4 ->{ + PlayFileWithEvent(audio_hubungi_staf_kami, new PlaybackStatus() { + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan keempat audio_hubungi_staf_kami"); + } + + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } + + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }); clear(); })); @@ -899,35 +979,9 @@ public class CaptureView { TextAreaSetText(medicalRecordID,""+medrecid); TextAreaSetText(PatientName, pr.name); - // harusnya ganti ke Timeline, tapi belum tested - //if (audioTimeline!=null) audioTimeline.play(); + if (anti_bawel.get()) return; // sudah ada LiveCamEvent lain yang bunyiin, jadi tidak usah bunyiin lagi + if (audioTimeline!=null) audioTimeline.play(); - if (anti_bawel.get()) return; - PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { - @Override - public void onPlaybackStarted(String filename) { - anti_bawel.set(true); - } - - @Override - public void onPlaybackFinished(String filename) { - Thread antibawel = new Thread(()->{ - try { - Thread.sleep(15*1000); - } catch (InterruptedException ignored) { - } - anti_bawel.set(false); - }); - antibawel.setName("anti bawel"); - antibawel.setDaemon(true); - antibawel.start(); - } - - @Override - public void onPlaybackFailure(String filename) { - anti_bawel.set(false); - } - }); } }); @@ -963,39 +1017,33 @@ public class CaptureView { } //update_status(image); - if (hasface && audioTimeline!=null) audioTimeline.stop(); + if (hasface){ + // ada face terdeteksi + if (Objects.equals(AutoCloseAlert.shownBanner, AutoCloseAlert.banner_01)){ + // WelcomeUI masih muncul + if (anti_bawel.get()) return; // sudah ada LiveCamEvent lain yang bunyiin, jadi tidak usah bunyiin lagi + PlayFileWithEvent(audio_scan_barcode, new PlaybackStatus() { + @Override + public void onPlaybackStarted(String filename) { - // instruksi scan barcode ketika welcomeUI masih muncul dan ada muka terdeteksi - if (hasface && Objects.equals(AutoCloseAlert.shownBanner, AutoCloseAlert.banner_01)){ - if (anti_bawel.get()) return; - PlayFileWithEvent(audio_scan_barcode, new PlaybackStatus() { - @Override - public void onPlaybackStarted(String filename) { + } - } - - @Override - public void onPlaybackFinished(String filename) { - Thread antibawel = new Thread(()->{ - try { - Thread.sleep(15*1000); - } catch (InterruptedException ignored) { - } - anti_bawel.set(false); - }); - antibawel.setName("anti bawel"); - antibawel.setDaemon(true); - antibawel.start(); - } - - @Override - public void onPlaybackFailure(String filename) { - - } - }); + @Override + public void onPlaybackFinished(String filename) { + WaitAsync(15*1000, "anti bawel", x-> anti_bawel.set(false)); + } + @Override + public void onPlaybackFailure(String filename) { + } + }); + } else if (audioTimeline!=null){ + // WelcomeUI sudah tidak muncul, tapi audioTimeLine masih ada + audioTimeline.stop(); + } } + } diff --git a/src/main/java/id/co/gtc/erhacam/MainApplication.java b/src/main/java/id/co/gtc/erhacam/MainApplication.java index 1c03010..d18ae85 100644 --- a/src/main/java/id/co/gtc/erhacam/MainApplication.java +++ b/src/main/java/id/co/gtc/erhacam/MainApplication.java @@ -28,13 +28,13 @@ public class MainApplication extends Application { public void start(Stage stage) throws IOException { Runtime.getRuntime().addShutdownHook(new Thread(() -> { + if (photoCleaner!=null) photoCleaner.Stop(); System.out.println("ShutdownHook Checking running threads..."); Map allThreads = Thread.getAllStackTraces(); for(Thread thread : allThreads.keySet()){ - //System.out.println("Thread: " + thread.getName()+", State: " + thread.getState()+", Daemon: " + thread.isDaemon()); + System.out.println("Thread: " + thread.getName()+", State: " + thread.getState()+", Daemon: " + thread.isDaemon()); thread.interrupt(); } - if (photoCleaner!=null) photoCleaner.Stop(); })); @@ -50,7 +50,7 @@ public class MainApplication extends Application { Screen screen = Screen.getPrimary(); Rectangle2D screenbound = screen.getBounds(); Scene scene = new Scene(fxmlLoader.load(), screenbound.getWidth(), screenbound.getHeight()); - stage.setTitle("MultiCam Capture App for ERHA 20052025-001"); + stage.setTitle("MultiCam Capture App for ERHA 22052025-004"); stage.setScene(scene); stage.setResizable(true); stage.setMaximized(true);