diff --git a/frigate/mqtt.py b/frigate/mqtt.py
index ee8aee6cb..d606721ed 100644
--- a/frigate/mqtt.py
+++ b/frigate/mqtt.py
@@ -90,7 +90,7 @@ def create_mqtt_client(config: FrigateConfig, camera_metrics):
client.publish(state_topic, payload, retain=True)
def on_restart_command(client, userdata, message):
- restart_frigate()
+ restart_frigate(client, mqtt_config.topic_prefix)
def on_connect(client, userdata, flags, rc):
threading.current_thread().name = "mqtt"
diff --git a/frigate/util.py b/frigate/util.py
index dae3845f2..14821daf6 100755
--- a/frigate/util.py
+++ b/frigate/util.py
@@ -519,8 +519,15 @@ def clipped(obj, frame_shape):
return False
-def restart_frigate():
- os.kill(os.getpid(), signal.SIGTERM)
+def restart_frigate(mqtt_client, topic_prefix, from_ui = 1):
+
+ def on_publish(client,userdata,result):
+ time.sleep(0.67)
+ logger.info("Restart requested.")
+ os.kill(os.getpid(), signal.SIGTERM)
+
+ mqtt_client.on_publish = on_publish
+ mqtt_client.publish(f"{topic_prefix}/restarted", int(from_ui))
class EventsPerSecond:
diff --git a/web/src/AppBar.jsx b/web/src/AppBar.jsx
index 8a8183e00..27c8c182c 100644
--- a/web/src/AppBar.jsx
+++ b/web/src/AppBar.jsx
@@ -6,17 +6,14 @@ import AutoAwesomeIcon from './icons/AutoAwesome';
import LightModeIcon from './icons/LightMode';
import DarkModeIcon from './icons/DarkMode';
import FrigateRestartIcon from './icons/FrigateRestart';
-import Dialog from './components/Dialog';
+import DialogRestart from './components/DialogRestart';
import { useDarkMode } from './context';
import { useCallback, useRef, useState } from 'preact/hooks';
-import { useRestart } from './api/mqtt';
export default function AppBar() {
const [showMoreMenu, setShowMoreMenu] = useState(false);
- const [showDialog, setShowDialog] = useState(false);
- const [showDialogWait, setShowDialogWait] = useState(false);
+ const [showDialogRestart, setShowDialogRestart] = useState(false);
const { setDarkMode } = useDarkMode();
- const { send: sendRestart } = useRestart();
const handleSelectDarkMode = useCallback(
(value, label) => {
@@ -36,16 +33,6 @@ export default function AppBar() {
setShowMoreMenu(false);
}, [setShowMoreMenu]);
- const handleClickRestartDialog = useCallback(() => {
- setShowDialog(false);
- setShowDialogWait(true);
- sendRestart();
- }, [setShowDialog]); // eslint-disable-line react-hooks/exhaustive-deps
-
- const handleDismissRestartDialog = useCallback(() => {
- setShowDialog(false);
- }, [setShowDialog]);
-
const handleRestart = useCallback(() => {
setShowMoreMenu(false);
setShowDialog(true);
@@ -64,23 +51,7 @@ export default function AppBar() {
) : null},
- {showDialog ? (
-
- ) : null},
- {showDialogWait ? (
-
- ) : null}
+
{text}