X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FVideoDeviceListener.java;fp=src%2Fkaka%2Fcakelight%2FVideoDeviceListener.java;h=23c0b0200668f50bae98e2d6407c1563a84d2233;hb=03670958a5eab132a4f1a6ae5ae58b88f55bfe2f;hp=0000000000000000000000000000000000000000;hpb=100b82fe1c5ada6ef2ce768bf7b9f6f469650e11;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/VideoDeviceListener.java b/src/kaka/cakelight/VideoDeviceListener.java new file mode 100644 index 0000000..23c0b02 --- /dev/null +++ b/src/kaka/cakelight/VideoDeviceListener.java @@ -0,0 +1,50 @@ +package kaka.cakelight; + +import java.io.File; +import java.util.Optional; +import java.util.function.Consumer; + +import static kaka.cakelight.Main.log; + +public class VideoDeviceListener { + private Thread thread; + private Consumer> changeConsumer; + private File lastDevice = null; + + public void startListening() { + thread = new Thread() { + public void run() { + try { + while (!isInterrupted()) { + Optional device = findVideoDevice(); + if (!device.equals(Optional.ofNullable(lastDevice))) { + log("Video device change: %s", device.map(File::getAbsolutePath).orElse("none")); + changeConsumer.accept(device); + lastDevice = device.orElseGet(() -> null); + } + Thread.sleep(1000); + } + } catch (InterruptedException e) { + } + } + }; + thread.start(); + } + + public void stopListening() { + thread.interrupt(); + } + + private Optional findVideoDevice() { + File[] files = new File("/dev").listFiles((dir, name) -> name.matches("video[0-9]+")); + if (files == null || files.length == 0) { + return Optional.empty(); + } else { + return Optional.of(files[0]); + } + } + + public void onVideoDeviceChange(Consumer> consumer) { + changeConsumer = consumer; + } +}