Skip to content

Commit f3fa82a

Browse files
task update
1 parent 3a49de6 commit f3fa82a

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

keychain_linux/passentry_gui/include/keychain_gui_win.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
#include "KeychainWarningMessage.h"
2626
#include "RawHashWidget.h"
2727

28+
#include <QThread>
29+
#include "polling.hpp"
30+
2831
using namespace keychain_app;
2932
using secmod_commands::secmod_parser_f;
3033

@@ -36,9 +39,11 @@ class keychain_gui_win : public QDialog
3639
Ui::keychain_gui_winClass ui;
3740

3841
public:
42+
QThread pollingThread;
3943
keychain_gui_win(Transaction &transaction, QWidget *parent = Q_NULLPTR);
44+
~keychain_gui_win();
4045
PopupWindow * popupWindow;
41-
46+
4247
private:
4348
QString mExpertValue;
4449

@@ -56,9 +61,11 @@ class keychain_gui_win : public QDialog
5661
PasswordEnterElement * password;
5762
KeychainServiceExchange * serviceExchange =NULL;
5863

64+
bool passClearOnExit;
5965
private:
6066
void _roundCorners();
6167
void _disableSignButton();
68+
void parse(const std::string);
6269

6370
protected:
6471
void keyPressEvent(QKeyEvent *event) override;
@@ -72,4 +79,10 @@ public slots:
7279
void transaction_sign();
7380
void cancel_sign();
7481
void set_sign_focus();
82+
83+
void found_pass();
84+
void send(std::string);
85+
signals:
86+
void poll();
87+
7588
};

keychain_linux/passentry_gui/src/keychain_gui_win.cpp

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
#include "keychain_gui_win.h"
22

3+
#include <fc_light/io/json.hpp>
4+
#include "cmd.hpp"
5+
6+
#include <fc_light/reflect/reflect.hpp>
7+
#include <fc_light/variant.hpp>
8+
9+
Q_DECLARE_METATYPE(std::string)
10+
int id1 = qRegisterMetaType<std::string>();
11+
312
keychain_gui_win::keychain_gui_win(Transaction &transaction, QWidget *parent)
413
: QDialog(parent)
514
{
@@ -160,9 +169,22 @@ keychain_gui_win::keychain_gui_win(Transaction &transaction, QWidget *parent)
160169
_roundCorners();
161170
password->setValueFocus();
162171
connect(password, &PasswordEnterElement::finishEnterPassword, this, &keychain_gui_win::transaction_sign);
163-
if (transaction.isCreatePassword()) {
172+
if (transaction.isCreatePassword())
164173
connect(password, &PasswordEnterElement::changePassword, this, &keychain_gui_win::_disableSignButton);
165-
}
174+
175+
Polling *polling = new Polling;
176+
polling->moveToThread(&pollingThread);
177+
connect(&pollingThread, &QThread::finished, polling, &QObject::deleteLater);
178+
179+
connect(this, &keychain_gui_win::poll, polling, &Polling::Select, Qt::QueuedConnection);
180+
connect(polling, &Polling::poll, polling, &Polling::Select, Qt::QueuedConnection);
181+
connect(polling, &Polling::rx, this, &keychain_gui_win::parse);
182+
connect(polling, &Polling::err, this, &keychain_gui_win::close);
183+
184+
pollingThread.start();
185+
passClearOnExit = true;
186+
emit keychain_gui_win::poll();
187+
166188
}
167189

168190
void keychain_gui_win::transaction_sign() {
@@ -246,11 +268,44 @@ void keychain_gui_win::keyPressEvent(QKeyEvent *event)
246268
}
247269
}
248270

271+
void keychain_gui_win::parse(const std::string s)
272+
{
273+
auto a = fc_light::json::from_string(s);
274+
try {
275+
auto cmd = a.as<slave::cmd_common>();
276+
auto cmd_map = slave::cmd_list_singletone::instance();
277+
auto p_func = cmd_map[cmd.cmd];
278+
// (*p_func)(this, cmd.params);
279+
}
280+
catch (const std::exception &e) {throw std::runtime_error(e.what());}
281+
catch (const fc_light::exception &e) {throw std::runtime_error(e.what());}
282+
}
283+
284+
249285
void keychain_gui_win::closeEvent(QCloseEvent * event)
250286
{
287+
// passClearOnExit ?
288+
// send(fc_light::json::to_string(fc_light::variant( master::cmd<( master::cmds::cancel)>().base))) :
289+
// send(fc_light::json::to_string(fc_light::variant( master::cmd<( master::cmds::ok)>().base)));
290+
// event->accept();
251291
serviceExchange->EncodeCancel();
252292
this->close();
253293
}
254294

295+
void keychain_gui_win::found_pass()
296+
{
297+
passClearOnExit = false;
298+
}
299+
300+
void keychain_gui_win::send(std::string a)
301+
{
302+
if ( write(STDIN_FILENO, a.c_str(), a.length() ) != a.length() )
303+
close();
304+
}
255305

306+
keychain_gui_win::~keychain_gui_win()
307+
{
308+
pollingThread.quit();
309+
pollingThread.wait();
310+
}
256311

keychain_linux/passentry_gui/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "keychain_gui_win.h"
22

3-
#include "widget.hpp"
3+
//#include "widget.hpp"
44
#include <QApplication>
55
#include <QDesktopWidget>
66
#include <stdlib.h>

0 commit comments

Comments
 (0)