From 940dfe33ecaff123fcc5ed7955145566d613382c Mon Sep 17 00:00:00 2001 From: Bartosz Firyn Date: Fri, 11 Jan 2013 08:42:26 +0100 Subject: [PATCH] Small fixes in discovery service --- .../sarxos/webcam/WebcamDiscoveryService.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java b/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java index ee8a93b3..f351215c 100644 --- a/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java +++ b/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamDiscoveryService.java @@ -204,36 +204,35 @@ public void run() { // if any left in old ones it means that devices has been removed if (oldones.size() > 0) { + List notified = new ArrayList(); + for (WebcamDevice device : oldones) { for (Webcam webcam : webcams) { if (webcam.getDevice().getName().equals(device.getName())) { - notifyWebcamGone(webcam, listeners); + notified.add(webcam); + break; } } } - webcams = toWebcams(tmpnew); + setCurrentWebcams(tmpnew); - if (Webcam.isHandleTermSignal()) { - WebcamDeallocator.unstore(); - WebcamDeallocator.store(webcams.toArray(new Webcam[webcams.size()])); + for (Webcam webcam : notified) { + notifyWebcamGone(webcam, listeners); + webcam.dispose(); } } // if any left in new ones it means that devices has been added if (newones.size() > 0) { - webcams = toWebcams(tmpnew); - - if (Webcam.isHandleTermSignal()) { - WebcamDeallocator.unstore(); - WebcamDeallocator.store(webcams.toArray(new Webcam[webcams.size()])); - } + setCurrentWebcams(tmpnew); for (WebcamDevice device : newones) { for (Webcam webcam : webcams) { if (webcam.getDevice().getName().equals(device.getName())) { notifyWebcamFound(webcam, listeners); + break; } } } @@ -242,6 +241,14 @@ public void run() { } while (running); } + private void setCurrentWebcams(List devices) { + webcams = toWebcams(devices); + if (Webcam.isHandleTermSignal()) { + WebcamDeallocator.unstore(); + WebcamDeallocator.store(webcams.toArray(new Webcam[webcams.size()])); + } + } + private static void notifyWebcamGone(Webcam webcam, WebcamDiscoveryListener[] listeners) { WebcamDiscoveryEvent event = new WebcamDiscoveryEvent(webcam, WebcamDiscoveryEvent.REMOVED); for (WebcamDiscoveryListener l : listeners) {