diff --git a/public/scripts/camera-image-handler.js b/public/scripts/camera-image-handler.js index d63a11d..6955e80 100644 --- a/public/scripts/camera-image-handler.js +++ b/public/scripts/camera-image-handler.js @@ -1,37 +1,37 @@ jQuery(document).ready(function () { - var cameraImages = []; - var cameraPointer = 0; + var cameraImages = []; + var cameraPointer = 0; - function changeImage(pointer) { - $('#cameraImage').css( - 'background-image', - 'url(' + cameraImageBaseUrl + cameraImages[pointer].camera + '/' + cameraImages[pointer].imageName + ')' - ); - $('#cameraText').text(cameraImages[pointer].text); - } + function changeImage(pointer) { + $('#cameraImage').css( + 'background-image', + 'url(' + cameraImageBaseUrl + cameraImages[pointer].camera + '/' + cameraImages[pointer].imageName + ')' + ); + $('#cameraText').text(cameraImages[pointer].text); + } - function refreshCameraImages() { + function refreshCameraImages() { + jQuery.get(cameraImageApiUrl, function (data) { + cameraImages = data; + }).always(function () { + window.setTimeout(refreshCameraImages, refreshInterval); + }); + } + + // initial image load jQuery.get(cameraImageApiUrl, function (data) { - cameraImages = data; - }).always(function() { - window.setTimeout(refreshCameraImages, refreshInterval); + cameraImages = data; + + changeImage(0); + window.setTimeout(refreshCameraImages, refreshInterval); + + // change displayed image + window.setInterval(function () { + cameraPointer = cameraPointer >= cameraImages.length - 1 + ? 0 + : cameraPointer + 1; + changeImage(cameraPointer); + }, changeDelay); }); - } - - // initial image load - jQuery.get(cameraImageApiUrl, function (data) { - cameraImages = data; - - changeImage(0); - window.setTimeout(refreshCameraImages, refreshInterval); - - // change displayed image - window.setInterval(function () { - cameraPointer = cameraPointer === cameraImages.length - 1 - ? 0 - : cameraPointer + 1; - changeImage(cameraPointer); - }, changeDelay); - }); }); diff --git a/src/App/Service/CameraPictureManagerService.php b/src/App/Service/CameraPictureManagerService.php index a4529f8..0a9b076 100644 --- a/src/App/Service/CameraPictureManagerService.php +++ b/src/App/Service/CameraPictureManagerService.php @@ -31,7 +31,10 @@ class CameraPictureManagerService $cameraImageFolders = array_diff(scandir($cameraImageBaseFolder), ['.', '..']); foreach ($cameraImageFolders as $cameraImageFolder) { - $cameraImages[] = $this->getLatestImageInDirectory("{$cameraImageBaseFolder}/{$cameraImageFolder}"); + $theImage = $this->getLatestCompleteImageInDirectory("{$cameraImageBaseFolder}/{$cameraImageFolder}"); + if (null != $theImage) { + $cameraImages[] = $theImage; + } } return $cameraImages; @@ -66,13 +69,21 @@ class CameraPictureManagerService * @param string $directory * @return CameraImage */ - private function getLatestImageInDirectory(string $directory): CameraImage + private function getLatestCompleteImageInDirectory(string $directory): ?CameraImage { $cameraImage = new CameraImage(); $cameraImage->setCamera(basename($directory)); $allImages = glob("{$directory}/*.{png,jpeg,jpg}", GLOB_NOSORT | GLOB_BRACE); - $latestImage = array_pop($allImages); + if (count($allImages) < 2) { + return null; + } + + $imageModificationTimes = array_map('filemtime', $allImages); + array_multisort($imageModificationTimes, SORT_DESC, $allImages); + + $latestImage = $allImages[1]; + unset($allImages); $cameraImage->setImageName(pathinfo($latestImage, PATHINFO_BASENAME)) ->setCreatedAt(new \DateTime(sprintf("@%s", filemtime($latestImage)))); diff --git a/test/AppTest/Service/CameraPictureManagerServiceTest.php b/test/AppTest/Service/CameraPictureManagerServiceTest.php index d235183..78d95af 100644 --- a/test/AppTest/Service/CameraPictureManagerServiceTest.php +++ b/test/AppTest/Service/CameraPictureManagerServiceTest.php @@ -12,7 +12,7 @@ class CameraPictureManagerServiceTest extends TestCase { const EXISTING_CAM_DIR = 'cam1'; const EXISTING_IMAGE = 'img1.png'; - const MISSING_IMAGE = 'img9.png'; + const MISSING_IMAGE = 'imgXX.png'; const TEST_DATA_DIR = 'test/data'; /** @var Config */ diff --git a/test/data/cam1/img9.png b/test/data/cam1/img9.png new file mode 100644 index 0000000..a3618bd Binary files /dev/null and b/test/data/cam1/img9.png differ diff --git a/test/data/cam2/img9.png b/test/data/cam2/img9.png new file mode 100644 index 0000000..dc3d225 Binary files /dev/null and b/test/data/cam2/img9.png differ diff --git a/test/data/cam3/img9.jpeg b/test/data/cam3/img9.jpeg new file mode 100644 index 0000000..dc3d225 Binary files /dev/null and b/test/data/cam3/img9.jpeg differ diff --git a/test/data/cam5/img1.png b/test/data/cam5/img1.png new file mode 100644 index 0000000..a3618bd Binary files /dev/null and b/test/data/cam5/img1.png differ diff --git a/test/data/cam5/overlay.txt b/test/data/cam5/overlay.txt new file mode 100644 index 0000000..2b38c47 --- /dev/null +++ b/test/data/cam5/overlay.txt @@ -0,0 +1 @@ +img1 \ No newline at end of file