aboutsummaryrefslogtreecommitdiff
path: root/src/lock.cpp
diff options
context:
space:
mode:
authorLibravatar keshavbhatt <keshavnrj@gmail.com>2021-04-05 09:51:04 +0530
committerLibravatar keshavbhatt <keshavnrj@gmail.com>2021-04-05 09:51:04 +0530
commit6805310b65751f52bff954e3d2e78036a6e5c5a9 (patch)
tree1c46b0f4f9a4ebccbc644738eaadfbc690217dc0 /src/lock.cpp
parent03576d577f9aa691df207a559e840c6f27d86e88 (diff)
downloadwhatsie-6805310b65751f52bff954e3d2e78036a6e5c5a9.tar.gz
whatsie-6805310b65751f52bff954e3d2e78036a6e5c5a9.zip
added app lock class
Diffstat (limited to 'src/lock.cpp')
-rw-r--r--src/lock.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/lock.cpp b/src/lock.cpp
new file mode 100644
index 0000000..3a43a91
--- /dev/null
+++ b/src/lock.cpp
@@ -0,0 +1,172 @@
+#include "lock.h"
+#include "ui_lock.h"
+#include <QDebug>
+#include <QKeyEvent>
+#ifdef Q_OS_WIN32
+#include <Windows.h>
+#else
+#include <X11/XKBlib.h> // sudo apt install libx11-dev
+#endif
+
+Lock::Lock(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Lock)
+{
+ ui->setupUi(this);
+ ui->unlock->setEnabled(false);
+ ui->setPass->setEnabled(false);
+ ui->wrong->hide();
+
+ if(settings.value("asdfg").isValid() == false)
+ {
+ ui->signup->show();
+ ui->login->hide();
+ ui->passcode1->setFocus();
+ }
+ else
+ {
+ lock_app();
+ }
+ checkCaps();
+ QString capsStyle = QString("background-color: rgba(0,170,0,20);"
+ "padding:4px;"
+ "border:1px solid rgba(78, 154, 6,50);"
+ "border-radius: 2px;");
+ ui->caps1->setStyleSheet(capsStyle);
+ ui->caps2->setStyleSheet(capsStyle);
+ ui->signup_warning->setStyleSheet(capsStyle);
+ ui->wrong->setStyleSheet(capsStyle);
+}
+
+Lock::~Lock()
+{
+ delete ui;
+}
+
+void Lock::checkCaps()
+{
+ if(getCapsLockOn()){
+ ui->caps1->show();
+ ui->caps2->show();
+ }else{
+ ui->caps1->hide();
+ ui->caps2->hide();
+ }
+}
+
+void Lock::keyReleaseEvent(QKeyEvent *event){
+ if(event->key() == Qt::Key_CapsLock){
+ checkCaps();
+ }
+}
+
+bool Lock::event(QEvent* e)
+{
+ return QWidget::event(e);
+}
+
+void Lock::on_passcode1_textChanged(const QString &arg1)
+{
+ if(arg1.contains(" ")){
+ ui->passcode1->setText(arg1.simplified());
+ }
+ ui->setPass->setEnabled(arg1.length()>4 && arg1== ui->passcode2->text());
+}
+
+void Lock::on_passcode2_textChanged(const QString &arg1)
+{
+ if(arg1.contains(" ")){
+ ui->passcode2->setText(arg1.simplified());
+ }
+ ui->setPass->setEnabled(arg1.length()>4 && arg1== ui->passcode1->text());
+}
+
+void Lock::on_setPass_clicked()
+{
+ QString pass1,pass2;
+ pass1 = ui->passcode1->text().trimmed();
+ pass2 = ui->passcode2->text().trimmed();
+ if(pass1==pass2)
+ {
+ settings.setValue("asdfg",QByteArray(pass1.toUtf8()).toBase64());
+ settings.setValue("lockscreen",true);
+ ui->passcode1->clear();
+ ui->passcode2->clear();
+ emit passwordSet();
+ if(check_password_set()){
+ ui->signup->hide();
+ ui->login->show();
+ ui->passcodeLogin->setFocus();
+ }
+ }else {
+ return;
+ }
+}
+
+bool Lock::check_password_set(){
+ return settings.value("asdfg").isValid();
+}
+
+void Lock::on_unlock_clicked()
+{
+ QString password = QByteArray::fromBase64(settings.value("asdfg").toByteArray());
+ if(ui->passcodeLogin->text() == password && check_password_set())
+ {
+ ui->login->hide();
+ ui->signup->hide();
+ ui->passcodeLogin->clear();
+ isLocked = false;
+ this->hide();
+ emit unLocked();
+ }else{
+ ui->wrong->show();
+ }
+}
+
+void Lock::on_passcodeLogin_textChanged(const QString &arg1)
+{
+ if(arg1.contains(" ")){
+ ui->passcodeLogin->setText(arg1.simplified());
+ }
+ ui->wrong->hide();
+ ui->unlock->setEnabled(arg1.length()>4);
+}
+
+void Lock::lock_app()
+{
+ checkCaps();
+ ui->wrong->hide();
+ ui->signup->hide();
+ ui->login->show();
+ ui->passcodeLogin->setFocus();
+ isLocked = true;
+ this->show();
+}
+
+void Lock::on_passcodeLogin_returnPressed()
+{
+ on_unlock_clicked();
+}
+
+bool Lock::getCapsLockOn()
+{
+// platform dependent method of determining if CAPS LOCK is on
+#ifdef Q_OS_WIN32 // MS Windows version
+ return GetKeyState(VK_CAPITAL) == 1;
+#else // X11 version (Linux/Unix/Mac OS X/etc...)
+ Display* d = XOpenDisplay((char*)0);
+ bool caps_state = false;
+ if (d) {
+ unsigned n;
+ XkbGetIndicatorState(d, XkbUseCoreKbd, &n);
+ caps_state = (n & 0x01) == 1;
+ }
+ return caps_state;
+#endif
+}
+
+void Lock::on_cancelSetting_clicked()
+{
+ emit passwordNotSet();
+ this->hide();
+}