Merge pull request #1314 from ispyisail/feature/live-remember

Remember live mode's start warning and "Always" across restarts
This commit is contained in:
ispyisail
2026-10-05 22:14:31 +13:00
committed by GitHub
7 changed files with 88 additions and 11 deletions
+16 -3
View File
@@ -48,6 +48,7 @@
#include <QPixmap>
#include <QPlainTextEdit>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QDialog>
#include <QDir>
#include <QFileInfo>
@@ -81,7 +82,8 @@ LiveServer &LiveServer::instance()
return server;
}
LiveServer::LiveServer()
LiveServer::LiveServer() :
m_ask_first(QetSettings::liveAskFirst())
{
connect(qApp, &QCoreApplication::aboutToQuit, this, &LiveServer::stop);
}
@@ -112,6 +114,10 @@ void LiveServer::askAndStart(QWidget *parent)
return;
}
m_asked = true;
if (QetSettings::liveSkipStartWarning()) {
start();
return;
}
QMessageBox box(QMessageBox::Warning, tr("Mode direct"),
tr("Le mode direct est activé : un assistant IA connecté "
@@ -125,11 +131,17 @@ void LiveServer::askAndStart(QWidget *parent)
box.addButton(tr("&Pas pour cette session"), QMessageBox::RejectRole);
QPushButton *off = box.addButton(tr("&Désactiver"), QMessageBox::DestructiveRole);
box.setDefaultButton(go);
auto *remember = new QCheckBox(tr("Ne plus demander au démarrage"), &box);
remember->setToolTip(tr("Le mode direct s'ouvrira à chaque démarrage. Pour être "
"de nouveau averti, désactivez-le puis réactivez-le dans "
"Configurer QElectroTech > Général > Projets."));
box.setCheckBox(remember);
box.exec();
if (box.clickedButton() == off) {
QetSettings::setLiveAssistantEnabled(false);
} else if (box.clickedButton() == go) {
if (remember->isChecked()) QetSettings::setLiveSkipStartWarning(true);
start();
}
}
@@ -249,7 +261,7 @@ void LiveServer::handle(const QJsonObject &request)
const QString name = request.value(QStringLiteral("name")).toString();
const QString source = request.value(QStringLiteral("source")).toString();
//A script the assistant just wrote: the user sees it first,
//unless they said "always" this session. A stored script
//unless they chose "always" (remembered). A stored script
//is one the user already has, so it runs as a click would.
if (m_ask_first && !confirm(name, source))
answer = failure(QStringLiteral("refused by the user"));
@@ -405,6 +417,7 @@ void LiveServer::setAskFirst(bool ask)
{
if (ask == m_ask_first) return;
m_ask_first = ask;
QetSettings::setLiveAskFirst(ask);
emit askFirstChanged(ask);
}
@@ -909,7 +922,7 @@ bool LiveServer::confirm(const QString &name, const QString &source)
auto *buttons = new QDialogButtonBox(&dialog);
QPushButton *run = buttons->addButton(tr("&Exécuter"), QDialogButtonBox::AcceptRole);
buttons->addButton(tr("&Refuser"), QDialogButtonBox::RejectRole);
QPushButton *always = buttons->addButton(tr("&Toujours pour cette session"),
QPushButton *always = buttons->addButton(tr("&Toujours"),
QDialogButtonBox::AcceptRole);
layout->addWidget(buttons);
QPushButton *clicked = nullptr;
+3 -2
View File
@@ -35,7 +35,8 @@ class QWidget;
Three things must all be true before anything can connect: scripting is
allowed, the "mode direct" setting is on (off by default), and the user
accepted the warning shown at this start. With the setting off this
accepted the warning shown at this start (or once ticked "don't ask
again", which lasts until the setting is switched off). With the setting off this
class opens nothing and QElectroTech behaves as if it did not exist.
The channel is a QLocalServer only the user's own account can open,
@@ -106,7 +107,7 @@ class LiveServer : public QObject
State m_state = Off;
bool m_asked = false;
bool m_busy = false;
bool m_ask_first = true; ///< per session, never saved: every start asks again
bool m_ask_first = true; ///< saved: QetSettings::liveAskFirst()
};
#endif // LIVESERVER_H