mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-24 23:42:05 +08:00
Multithreaded ssh activation (#19988)
No more lag on SSH enable/disable
This commit is contained in:
+1
-1
@@ -265,7 +265,7 @@ qt_env = None
|
||||
if arch in ["x86_64", "Darwin", "larch64"]:
|
||||
qt_env = env.Clone()
|
||||
|
||||
qt_modules = ["Widgets", "Gui", "Core", "DBus", "Multimedia", "Network"]
|
||||
qt_modules = ["Widgets", "Gui", "Core", "DBus", "Multimedia", "Network", "Concurrent"]
|
||||
|
||||
qt_libs = []
|
||||
if arch == "Darwin":
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <QPushButton>
|
||||
#include <QLineEdit>
|
||||
#include <QRandomGenerator>
|
||||
#include <QtConcurrent>
|
||||
|
||||
#include "networking.hpp"
|
||||
|
||||
@@ -245,7 +246,6 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
|
||||
QHBoxLayout* enableSSHLayout = new QHBoxLayout(this);
|
||||
enableSSHLayout->addWidget(new QLabel("Enable SSH", this));
|
||||
toggle_switch_SSH = new Toggle(this);
|
||||
toggle_switch_SSH->immediateOffset = 40;
|
||||
toggle_switch_SSH->setFixedSize(150, 100);
|
||||
if (isSSHEnabled()) {
|
||||
toggle_switch_SSH->togglePosition();
|
||||
@@ -293,9 +293,15 @@ bool AdvancedNetworking::isSSHEnabled(){
|
||||
|
||||
void AdvancedNetworking::refresh(){
|
||||
ipLabel->setText(wifi->ipv4_address);
|
||||
// Don't refresh while changing SSH state
|
||||
if(!toggle_switch_SSH->getEnabled()){
|
||||
return;
|
||||
}
|
||||
if (toggle_switch_SSH->on != isSSHEnabled()) {
|
||||
toggle_switch_SSH->togglePosition();
|
||||
}
|
||||
//Qt can be lazy
|
||||
repaint();
|
||||
}
|
||||
|
||||
void AdvancedNetworking::toggleTethering(int enable) {
|
||||
@@ -306,16 +312,28 @@ void AdvancedNetworking::toggleTethering(int enable) {
|
||||
}
|
||||
editPasswordButton->setEnabled(!enable);
|
||||
}
|
||||
void AdvancedNetworking::toggleSSH(int enable) {
|
||||
if (enable) {
|
||||
system("sudo systemctl enable ssh");
|
||||
system("sudo systemctl start ssh");
|
||||
} else {
|
||||
system("sudo systemctl stop ssh");
|
||||
system("sudo systemctl disable ssh");
|
||||
|
||||
void enableSSH(Toggle* toggle_switch_SSH){
|
||||
system("sudo systemctl enable ssh");
|
||||
system("sudo systemctl start ssh");
|
||||
toggle_switch_SSH->setEnabled(true);
|
||||
}
|
||||
|
||||
void disableSSH(Toggle* toggle_switch_SSH){
|
||||
system("sudo systemctl stop ssh");
|
||||
system("sudo systemctl disable ssh");
|
||||
toggle_switch_SSH->setEnabled(true);
|
||||
}
|
||||
|
||||
void AdvancedNetworking::toggleSSH(int enable) {
|
||||
toggle_switch_SSH->setEnabled(false);
|
||||
if (enable) {
|
||||
QtConcurrent::run(enableSSH, toggle_switch_SSH);
|
||||
} else {
|
||||
QtConcurrent::run(disableSSH, toggle_switch_SSH);
|
||||
}
|
||||
}
|
||||
|
||||
void AdvancedNetworking::receiveText(QString text){
|
||||
wifi->changeTetheringPassword(text);
|
||||
s->setCurrentIndex(1);
|
||||
|
||||
@@ -10,6 +10,9 @@ _anim(new QPropertyAnimation(this, "offset_circle", this))
|
||||
_x_circle = _radius;
|
||||
_y_circle = _radius;
|
||||
_y_rect = (_height - _height_rect)/2;
|
||||
circleColor = QColor(0xffffff); // placeholder
|
||||
green = QColor(0xffffff); // placeholder
|
||||
setEnabled(true);
|
||||
}
|
||||
|
||||
void Toggle::paintEvent(QPaintEvent *e) {
|
||||
@@ -19,7 +22,7 @@ void Toggle::paintEvent(QPaintEvent *e) {
|
||||
p.setRenderHint(QPainter::Antialiasing, true);
|
||||
|
||||
// Draw toggle background left
|
||||
p.setBrush(QColor(0x33ab4c));
|
||||
p.setBrush(green);
|
||||
p.drawRoundedRect(QRect(0, _y_rect, _x_circle + _radius, _height_rect), _height_rect/2, _height_rect/2);
|
||||
|
||||
// Draw toggle background right
|
||||
@@ -27,11 +30,14 @@ void Toggle::paintEvent(QPaintEvent *e) {
|
||||
p.drawRoundedRect(QRect(_x_circle - _radius, _y_rect, width() - (_x_circle - _radius), _height_rect), _height_rect/2, _height_rect/2);
|
||||
|
||||
// Draw toggle circle
|
||||
p.setBrush(QColor(0xfafafa));
|
||||
p.setBrush(circleColor);
|
||||
p.drawEllipse(QRectF(_x_circle - _radius, _y_circle - _radius, 2 * _radius, 2 * _radius));
|
||||
}
|
||||
|
||||
void Toggle::mouseReleaseEvent(QMouseEvent *e) {
|
||||
if(!enabled){
|
||||
return;
|
||||
}
|
||||
const int left = _radius;
|
||||
const int right = width() - _radius;
|
||||
if(_x_circle != left && _x_circle != right){
|
||||
@@ -58,3 +64,18 @@ void Toggle::togglePosition() {
|
||||
void Toggle::enterEvent(QEvent *e) {
|
||||
QAbstractButton::enterEvent(e);
|
||||
}
|
||||
|
||||
bool Toggle::getEnabled(){
|
||||
return enabled;
|
||||
}
|
||||
|
||||
void Toggle::setEnabled(bool value){
|
||||
enabled = value;
|
||||
if(value){
|
||||
circleColor.setRgb(0xfafafa);
|
||||
green.setRgb(0x33ab4c);
|
||||
}else{
|
||||
circleColor.setRgb(0x888888);
|
||||
green.setRgb(0x227722);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,8 @@ public:
|
||||
_x_circle = o;
|
||||
update();
|
||||
}
|
||||
|
||||
bool getEnabled();
|
||||
void setEnabled(bool value);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent*) override;
|
||||
@@ -27,6 +28,9 @@ protected:
|
||||
void enterEvent(QEvent*) override;
|
||||
|
||||
private:
|
||||
QColor circleColor;
|
||||
QColor green;
|
||||
bool enabled = true;
|
||||
int _x_circle, _y_circle;
|
||||
int _height, _radius;
|
||||
int _height_rect, _y_rect;
|
||||
|
||||
Reference in New Issue
Block a user