Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve preview handling #6

Merged
merged 11 commits into from Aug 25, 2022
25 changes: 10 additions & 15 deletions api/cameracontrol.py
@@ -1,11 +1,6 @@
#!/usr/bin/env python

import signal
import sys
import time
import psutil
import zmq
import argparse
import os, signal, sys, time, psutil, zmq, argparse
from argparse import Namespace
from subprocess import Popen, PIPE
import gphoto2 as gp
Expand Down Expand Up @@ -254,13 +249,11 @@ def __init__(self, message):
print('Interrupted!')


def is_already_running():
instances = 0
def get_running_pid():
for p in psutil.process_iter(['name', 'cmdline']):
if p.name() == 'python3':
if p.cmdline()[1].endswith('cameracontrol.py'):
instances += 1
return instances > 1
if p.name() == 'python3' and p.cmdline()[1].endswith('cameracontrol.py') and p.pid != os.getpid():
return p.pid
return -1


def main():
Expand Down Expand Up @@ -289,10 +282,12 @@ def main():
parser.add_argument('--exit', action='store_true', help='exit the service')

args = parser.parse_args()
if not is_already_running():
CameraControl(args)
else:
pid = get_running_pid()
if pid > 0:
MessageSender(vars(args))
print(pid)
else:
CameraControl(args)


if __name__ == '__main__':
Expand Down
6 changes: 4 additions & 2 deletions api/takeVideo.php
Expand Up @@ -33,11 +33,13 @@ function isRunning($pid) {
die($LogString);
} elseif ($_POST['play'] === 'false') {
$killcmd = sprintf($config['preview']['killcmd']);
exec($killcmd);
if ($killcmd != '') {
exec($killcmd);
}

$LogData = [
'isRunning' => isRunning($_POST['pid']),
'pid' => $_POST['pid'],
'pid' => intval($_POST['pid']),
'php' => basename($_SERVER['PHP_SELF']),
];
$LogString = json_encode($LogData);
Expand Down
316 changes: 163 additions & 153 deletions index.php
Expand Up @@ -49,163 +49,173 @@
<html>

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
<meta name="msapplication-TileColor" content="<?=$config['colors']['primary']?>">
<meta name="theme-color" content="<?=$config['colors']['primary']?>">

<title><?=$config['ui']['branding']?></title>

<!-- Favicon + Android/iPhone Icons -->
<link rel="apple-touch-icon" sizes="180x180" href="resources/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="resources/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="resources/img/favicon-16x16.png">
<link rel="manifest" href="resources/img/site.webmanifest">
<link rel="mask-icon" href="resources/img/safari-pinned-tab.svg" color="#5bbad5">

<!-- Fullscreen Mode on old iOS-Devices when starting photobooth from homescreen -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />

<link rel="stylesheet" href="node_modules/normalize.css/normalize.css" />
<link rel="stylesheet" href="node_modules/font-awesome/css/font-awesome.css" />
<link rel="stylesheet" href="vendor/PhotoSwipe/dist/photoswipe.css" />
<link rel="stylesheet" href="vendor/PhotoSwipe/dist/default-skin/default-skin.css" />
<link rel="stylesheet" href="resources/css/<?php echo $config['ui']['style']; ?>_style.css" />
<?php if ($config['gallery']['bottom_bar']): ?>
<link rel="stylesheet" href="resources/css/photoswipe-bottom.css" />
<?php endif; ?>
<?php if (is_file("private/overrides.css")): ?>
<link rel="stylesheet" href="private/overrides.css" />
<?php endif; ?>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
<meta name="msapplication-TileColor" content="<?= $config['colors']['primary'] ?>">
<meta name="theme-color" content="<?= $config['colors']['primary'] ?>">

<title><?= $config['ui']['branding'] ?></title>

<!-- Favicon + Android/iPhone Icons -->
<link rel="apple-touch-icon" sizes="180x180" href="resources/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="resources/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="resources/img/favicon-16x16.png">
<link rel="manifest" href="resources/img/site.webmanifest">
<link rel="mask-icon" href="resources/img/safari-pinned-tab.svg" color="#5bbad5">

<!-- Fullscreen Mode on old iOS-Devices when starting photobooth from homescreen -->
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>

<link rel="stylesheet" href="node_modules/normalize.css/normalize.css"/>
<link rel="stylesheet" href="node_modules/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="vendor/PhotoSwipe/dist/photoswipe.css"/>
<link rel="stylesheet" href="vendor/PhotoSwipe/dist/default-skin/default-skin.css"/>
<link rel="stylesheet" href="resources/css/<?php echo $config['ui']['style']; ?>_style.css"/>
<?php if ($config['gallery']['bottom_bar']): ?>
<link rel="stylesheet" href="resources/css/photoswipe-bottom.css"/>
<?php endif; ?>
<?php if (is_file("private/overrides.css")): ?>
<link rel="stylesheet" href="private/overrides.css"/>
<?php endif; ?>
</head>

<video id="video--preview" class="<?php echo $config['preview']['flip']; ?> <?php echo $config['preview']['style']; ?>" autoplay playsinline></video>
<body class="deselect">
<video id="video--view" class="<?php echo $config['preview']['flip']; ?> <?php echo $config['preview']['style']; ?>"
autoplay playsinline></video>
<div id="blocker"></div>
<div id="aperture"></div>
<div id="wrapper">
<?php include('template/' . $config['ui']['style'] . '.template.php'); ?>

<!-- image Filter Pane -->
<?php if ($config['filters']['enabled']): ?>
<div id="mySidenav" class="dragscroll sidenav rotarygroup">
<a href="#" class="<?php echo $btnClass; ?> closebtn rotaryfocus"><i class="fa fa-times"></i></a>

<?php foreach(AVAILABLE_FILTERS as $filter => $name): ?>
<?php if (!in_array($filter, $config['filters']['disabled'])): ?>
<div id="<?=$filter?>" class="filter <?php if($config['filters']['defaults'] === $filter)echo 'activeSidenavBtn'; ?>">
<a class="btn btn--small rotaryfocus" href="#"><?=$name?></a>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php endif; ?>

<!-- Loader -->
<div class="stages" id="loader">
<div class="loaderInner">
<div class="spinner">
<i class="fa fa-cog fa-spin"></i>
</div>

<div id="ipcam--view" class="<?php echo $config['preview']['style']; ?>"></div>

<video id="video--view" class="<?php echo $config['preview']['flip']; ?> <?php echo $config['preview']['style']; ?>" autoplay></video>

<div id="counter">
<canvas id="video--sensor"></canvas>
</div>
<div class="cheese"></div>
<div class="loaderImage"></div>
<div class="loading rotarygroup"></div>
</div>
</div>

<!-- Result Page -->
<div class="stages rotarygroup" id="result">

<div class="resultInner hidden">
<?php if ($config['button']['homescreen']): ?>
<a href="#" class="<?php echo $btnClass; ?> homebtn rotaryfocus"><i class="fa fa-home"></i> <span data-i18n="home"></span></a>
<?php endif; ?>

<?php if ($config['gallery']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> gallery-button rotaryfocus" ><i class="fa <?php echo $galleryIcon; ?>"></i> <span data-i18n="gallery"></span></a>
<?php endif; ?>

<?php if ($config['qr']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> qrbtn rotaryfocus"><i class="fa fa-qrcode"></i> <span data-i18n="qr"></span></a>
<?php endif; ?>

<?php if ($config['mail']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> mailbtn rotaryfocus"><i class="fa fa-envelope"></i> <span data-i18n="mail"></span></a>
<?php endif; ?>

<?php if ($config['print']['from_result']): ?>
<a href="#" class="<?php echo $btnClass; ?> printbtn rotaryfocus"><i class="fa fa-print"></i> <span data-i18n="print"></span></a>
<?php endif; ?>

<?php if (!$config['button']['force_buzzer']): ?>
<?php if (!($config['collage']['enabled'] && $config['collage']['only'])): ?>
<a href="#" class="<?php echo $btnClass; ?> newpic rotaryfocus"><i class="fa fa-camera"></i> <span data-i18n="newPhoto"></span></a>
<?php endif; ?>

<?php if ($config['collage']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> newcollage rotaryfocus"><i class="fa fa-th-large"></i> <span
data-i18n="newCollage"></span></a>
<?php endif; ?>
<?php endif; ?>

<?php if ($config['filters']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> imageFilter rotaryfocus"><i class="fa fa-magic"></i> <span data-i18n="selectFilter"></span></a>
<?php endif; ?>

<?php if ($config['picture']['allow_delete']): ?>
<a href="#" class="<?php echo $btnClass; ?> deletebtn <?php if ($config['delete']['no_request']){ echo 'rotaryfocus';} ?> "><i class="fa fa-trash"></i> <span data-i18n="delete"></span></a>
<?php endif; ?>
</div>

<?php if ($config['qr']['enabled']): ?>
<div id="qrCode" class="modal">
<div class="modal__body"></div>
</div>
<?php endif; ?>
</div>

<?php if ($config['gallery']['enabled']): ?>
<?php include('template/gallery.template.php'); ?>
<?php endif; ?>
</div>

<?php include('template/pswp.template.php'); ?>

<?php include('template/send-mail.template.php'); ?>

<div class="modal" id="print_mesg">
<div class="modal__body"><span data-i18n="printing"></span></div>
</div>

<div id="adminsettings">
<div style="position:absolute; bottom:0; right:0;">
<img src="resources/img/spacer.png" alt="adminsettings" ondblclick="adminsettings()" />
</div>
</div>

<script src="node_modules/whatwg-fetch/dist/fetch.umd.js"></script>
<script type="text/javascript" src="api/config.php"></script>
<script type="text/javascript" src="resources/js/adminshortcut.js"></script>
<script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="vendor/PhotoSwipe/dist/photoswipe.min.js"></script>
<script type="text/javascript" src="vendor/PhotoSwipe/dist/photoswipe-ui-default.min.js"></script>
<script type="text/javascript" src="resources/js/tools.js"></script>
<script type="text/javascript" src="resources/js/remotebuzzer_client.js"></script>
<script type="text/javascript" src="resources/js/photoinit.js"></script>
<script type="text/javascript" src="resources/js/theme.js"></script>
<script type="text/javascript" src="resources/js/core.js"></script>
<script src="node_modules/@andreasremdt/simple-translator/dist/umd/translator.min.js"></script>
<script type="text/javascript" src="resources/js/i18n.js"></script>

<?php require_once('lib/services_start.php'); ?>
<div id="wrapper">
<?php include('template/' . $config['ui']['style'] . '.template.php'); ?>

<!-- image Filter Pane -->
<?php if ($config['filters']['enabled']): ?>
<div id="mySidenav" class="dragscroll sidenav rotarygroup">
<a href="#" class="<?php echo $btnClass; ?> closebtn rotaryfocus"><i class="fa fa-times"></i></a>

<?php foreach (AVAILABLE_FILTERS as $filter => $name): ?>
<?php if (!in_array($filter, $config['filters']['disabled'])): ?>
<div id="<?= $filter ?>"
class="filter <?php if ($config['filters']['defaults'] === $filter) echo 'activeSidenavBtn'; ?>">
<a class="btn btn--small rotaryfocus" href="#"><?= $name ?></a>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php endif; ?>

<!-- Loader -->
<div class="stages" id="loader">
<div class="loaderInner">
<div class="spinner">
<i class="fa fa-cog fa-spin"></i>
</div>

<div id="ipcam--view" class="<?php echo $config['preview']['style']; ?>"></div>

<div id="counter">
<canvas id="video--sensor"></canvas>
</div>
<div class="cheese"></div>
<div class="loaderImage"></div>
<div class="loading rotarygroup"></div>
</div>
</div>

<!-- Result Page -->
<div class="stages rotarygroup" id="result">

<div class="resultInner hidden">
<?php if ($config['button']['homescreen']): ?>
<a href="#" class="<?php echo $btnClass; ?> homebtn rotaryfocus"><i class="fa fa-home"></i> <span
data-i18n="home"></span></a>
<?php endif; ?>

<?php if ($config['gallery']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> gallery-button rotaryfocus"><i
class="fa <?php echo $galleryIcon; ?>"></i> <span data-i18n="gallery"></span></a>
<?php endif; ?>

<?php if ($config['qr']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> qrbtn rotaryfocus"><i class="fa fa-qrcode"></i> <span
data-i18n="qr"></span></a>
<?php endif; ?>

<?php if ($config['mail']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> mailbtn rotaryfocus"><i class="fa fa-envelope"></i> <span
data-i18n="mail"></span></a>
<?php endif; ?>

<?php if ($config['print']['from_result']): ?>
<a href="#" class="<?php echo $btnClass; ?> printbtn rotaryfocus"><i class="fa fa-print"></i> <span
data-i18n="print"></span></a>
<?php endif; ?>

<?php if (!$config['button']['force_buzzer']): ?>
<?php if (!($config['collage']['enabled'] && $config['collage']['only'])): ?>
<a href="#" class="<?php echo $btnClass; ?> newpic rotaryfocus"><i class="fa fa-camera"></i> <span
data-i18n="newPhoto"></span></a>
<?php endif; ?>

<?php if ($config['collage']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> newcollage rotaryfocus"><i class="fa fa-th-large"></i>
<span
data-i18n="newCollage"></span></a>
<?php endif; ?>
<?php endif; ?>

<?php if ($config['filters']['enabled']): ?>
<a href="#" class="<?php echo $btnClass; ?> imageFilter rotaryfocus"><i class="fa fa-magic"></i> <span
data-i18n="selectFilter"></span></a>
<?php endif; ?>

<?php if ($config['picture']['allow_delete']): ?>
<a href="#" class="<?php echo $btnClass; ?> deletebtn <?php if ($config['delete']['no_request']) {
echo 'rotaryfocus';
} ?> "><i class="fa fa-trash"></i> <span data-i18n="delete"></span></a>
<?php endif; ?>
</div>

<?php if ($config['qr']['enabled']): ?>
<div id="qrCode" class="modal">
<div class="modal__body"></div>
</div>
<?php endif; ?>
</div>

<?php if ($config['gallery']['enabled']): ?>
<?php include('template/gallery.template.php'); ?>
<?php endif; ?>
</div>

<?php include('template/pswp.template.php'); ?>

<?php include('template/send-mail.template.php'); ?>

<div class="modal" id="print_mesg">
<div class="modal__body"><span data-i18n="printing"></span></div>
</div>

<div id="adminsettings">
<div style="position:absolute; bottom:0; right:0;">
<img src="resources/img/spacer.png" alt="adminsettings" ondblclick="adminsettings()"/>
</div>
</div>

<script src="node_modules/whatwg-fetch/dist/fetch.umd.js"></script>
<script type="text/javascript" src="api/config.php"></script>
<script type="text/javascript" src="resources/js/adminshortcut.js"></script>
<script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="vendor/PhotoSwipe/dist/photoswipe.min.js"></script>
<script type="text/javascript" src="vendor/PhotoSwipe/dist/photoswipe-ui-default.min.js"></script>
<script type="text/javascript" src="resources/js/tools.js"></script>
<script type="text/javascript" src="resources/js/remotebuzzer_client.js"></script>
<script type="text/javascript" src="resources/js/photoinit.js"></script>
<script type="text/javascript" src="resources/js/theme.js"></script>
<script type="text/javascript" src="resources/js/core.js"></script>
<script src="node_modules/@andreasremdt/simple-translator/dist/umd/translator.min.js"></script>
<script type="text/javascript" src="resources/js/i18n.js"></script>

<?php require_once('lib/services_start.php'); ?>
</body>
</html>