Skip to content

Commit 61d9eb6

Browse files
committed
add register dialog
1 parent e8a8278 commit 61d9eb6

11 files changed

+288
-38
lines changed

XMYChatClient/XMYChatClient.pro

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ SOURCES += \
1616
loginsession.cpp \
1717
main.cpp \
1818
loginwindow.cpp \
19+
registerdialog.cpp \
1920
settingdialog.cpp \
2021
userinfodialog.cpp \
2122
usermainwindow.cpp \
@@ -30,6 +31,7 @@ HEADERS += \
3031
friendsearchdialog.h \
3132
loginsession.h \
3233
loginwindow.h \
34+
registerdialog.h \
3335
settingdialog.h \
3436
userinfodialog.h \
3537
usermainwindow.h \
@@ -39,6 +41,7 @@ HEADERS += \
3941
FORMS += \
4042
friendsearchdialog.ui \
4143
loginwindow.ui \
44+
registerdialog.ui \
4245
settingdialog.ui \
4346
userinfodialog.ui \
4447
usermainwindow.ui \

XMYChatClient/loginsession.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,23 @@ void loginsession::user_login(QString email, QString password)
3131
socket->send_json(login_info);
3232
}
3333

34-
void loginsession::user_register(QString email, QString password)
34+
bool loginsession::user_register(QString email, QString password, QString username)
3535
{
3636
if(socket->state()!=QAbstractSocket::ConnectedState) {
3737
emit general_return(CONNECTION_ERROR);
3838
emit connection_error();
39-
return;
39+
return false;
4040
}
4141
info["email"]=email;
4242
QJsonObject user_info;
4343
user_info.insert("type",TYPE_REGISTER);
4444
QString hash_password=QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Sha384).toHex();
4545
user_info.insert("email",email);
4646
user_info.insert("password",hash_password);
47+
user_info.insert("username",username);
4748
QJsonDocument data(user_info);
4849
socket->write(data.toJson(QJsonDocument::Compact));
50+
return true;
4951
}
5052

5153
void loginsession::establish_connect()

XMYChatClient/loginsession.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class loginsession : public QObject
2222
explicit loginsession(QObject *parent = nullptr);
2323
~loginsession();
2424
void user_login(QString email, QString password);
25-
void user_register(QString username, QString password);
25+
bool user_register(QString email, QString password, QString username);
2626
void establish_connect();
2727
void logout();
2828
void send_message(QString to_email, QString msg);

XMYChatClient/loginwindow.cpp

+6-26
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ LoginWindow::LoginWindow(QWidget *parent)
99
ui->setupUi(this);
1010
ui->pushButton_login->setShortcut(Qt::Key_Enter);
1111
connect(session,&loginsession::login_return,this,&LoginWindow::slot_login_callback);
12-
connect(session,&loginsession::register_return,this,&LoginWindow::slot_register_callback);
1312
connect(session,&loginsession::general_return,this,&LoginWindow::slot_general_callback);
1413
settings=new xmyUserSettings;
1514
ui->pushButton_login->setDefault(true);
@@ -29,7 +28,6 @@ LoginWindow::~LoginWindow()
2928
delete settings;
3029
}
3130

32-
3331
void LoginWindow::on_checkBox_stateChanged(int arg1)
3432
{
3533
switch (arg1) {
@@ -87,26 +85,6 @@ void LoginWindow::slot_login_callback(int result)
8785
set_widgets(true);
8886
}
8987

90-
void LoginWindow::slot_register_callback(int result)
91-
{
92-
if(result==REGISTER_SUCCESS) {
93-
ui->label_warnMessage->setText("Register successful");
94-
ui->label_warnMessage->setStyleSheet("color:green;");
95-
}
96-
else {
97-
switch (result) {
98-
case REGISTER_WAITING_VERIFICATION: {
99-
verify();
100-
break;
101-
}
102-
case REGISTER_USER_EXISTED: ui->label_warnMessage->setText("User existed!");break;
103-
case REGISTER_INFO_ERROR: ui->label_warnMessage->setText("Username or password illegal!");break;
104-
default: ui->label_warnMessage->setText(QString("Unknown error %1").arg(result));
105-
}
106-
ui->label_warnMessage->setStyleSheet("color:red;");
107-
}
108-
set_widgets(true);
109-
}
11088

11189
void LoginWindow::slot_general_callback(int result)
11290
{
@@ -127,10 +105,12 @@ void LoginWindow::slot_general_callback(int result)
127105

128106
void LoginWindow::on_pushButton_register_clicked()
129107
{
130-
if(check_form()) {
131-
ui->label_warnMessage->setStyleSheet("color:black;");
132-
ui->label_warnMessage->setText("Registering new user...");
133-
session->user_register(ui->lineEdit_email->text().trimmed().toLower(), ui->lineEdit_password->text());
108+
RegisterDialog* regdlg=new RegisterDialog(session,this,ui->lineEdit_email->text(),ui->lineEdit_password->text());
109+
if(regdlg->exec()==1) {
110+
ui->lineEdit_email->setText(session->info.value("email"));
111+
ui->label_warnMessage->setText("Register success!");
112+
ui->label_warnMessage->setStyleSheet("color:green;");
113+
ui->lineEdit_password->setFocus();
134114
}
135115
}
136116

XMYChatClient/loginwindow.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "settingdialog.h"
88
#include "usermainwindow.h"
99
#include "verificationdialog.h"
10+
#include "registerdialog.h"
1011

1112
QT_BEGIN_NAMESPACE
1213
namespace Ui { class LoginWindow; }
@@ -21,16 +22,13 @@ class LoginWindow : public QMainWindow
2122
~LoginWindow();
2223

2324
private slots:
25+
// void register_finished(int result);
2426
void on_checkBox_stateChanged(int arg1);
25-
2627
void on_pushButton_login_clicked();
27-
2828
void on_actionServer_Settings_triggered();
29-
3029
void slot_login_callback(int result);
31-
void slot_register_callback(int result);
30+
// void slot_register_callback(int result);
3231
void slot_general_callback(int result);
33-
3432
void on_pushButton_register_clicked();
3533

3634
private:

XMYChatClient/registerdialog.cpp

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#include "registerdialog.h"
2+
#include "ui_registerdialog.h"
3+
4+
RegisterDialog::RegisterDialog(loginsession* session, QWidget *parent, QString email, QString password) :
5+
QDialog(parent),
6+
ui(new Ui::RegisterDialog),
7+
session(session)
8+
{
9+
ui->setupUi(this);
10+
ui->lineEdit_email->setText(email);
11+
ui->lineEdit_password->setText(password);
12+
connect(session,&loginsession::register_return,this,&RegisterDialog::register_callback);
13+
}
14+
15+
RegisterDialog::~RegisterDialog()
16+
{
17+
delete ui;
18+
}
19+
20+
bool RegisterDialog::check_form()
21+
{
22+
if(ui->lineEdit_email->text().isEmpty() || !XMY_Utilities::check_valid_email(ui->lineEdit_email->text())) {
23+
ui->label_warn->setText("Please input a valid email.");
24+
return false;
25+
}
26+
if(ui->lineEdit_password->text().isEmpty() || ui->lineEdit_confirm->text()!=ui->lineEdit_password->text()) {
27+
ui->label_warn->setText("Please check your password.");
28+
return false;
29+
}
30+
return true;
31+
}
32+
33+
void RegisterDialog::set_status(bool status)
34+
{
35+
ui->lineEdit_email->setEnabled(status);
36+
ui->lineEdit_password->setEnabled(status);
37+
ui->lineEdit_confirm->setEnabled(status);
38+
ui->lineEdit_username->setEnabled(status);
39+
ui->pushButton_send_code->setEnabled(status);
40+
ui->pushButton_register->setEnabled(!status);
41+
}
42+
43+
void RegisterDialog::register_callback(int result)
44+
{
45+
ui->label_warn->setStyleSheet("color:red;");
46+
switch (result) {
47+
case REGISTER_SUCCESS: {
48+
accept();
49+
break;
50+
}
51+
case REGISTER_WAITING_VERIFICATION: {
52+
ui->label_warn->setText("Code sent. Please input the code sent to your email");
53+
ui->label_warn->setStyleSheet("color:green;");
54+
break;
55+
}
56+
case REGISTER_VERIFY_ERROR: {
57+
ui->label_warn->setText("Your code is wrong, please check again!");
58+
break;
59+
}
60+
case REGISTER_USER_EXISTED: {
61+
ui->label_warn->setText("The user with the same email exists.");
62+
set_status(true);
63+
break;
64+
}
65+
case REGISTER_INFO_ERROR: {
66+
ui->label_warn->setText("Please check your info");
67+
set_status(true);
68+
break;
69+
}
70+
default: {
71+
ui->label_warn->setText(QString("Unknown error %1").arg(result)) ;
72+
}
73+
}
74+
}
75+
76+
void RegisterDialog::on_pushButton_send_code_clicked()
77+
{
78+
if(!check_form()) return;
79+
if(session->user_register(ui->lineEdit_email->text(),ui->lineEdit_password->text(),ui->lineEdit_username->text())) set_status(false);
80+
else {
81+
ui->label_warn->setText("Connection error");
82+
ui->label_warn->setStyleSheet("color:red;");
83+
}
84+
}
85+
86+
87+
void RegisterDialog::on_pushButton_register_clicked()
88+
{
89+
if(ui->lineEdit_verification_code->text().isEmpty()) {
90+
ui->label_warn->setText("Please input the verification code!");
91+
ui->label_warn->setStyleSheet("color:red;");
92+
return;
93+
}
94+
session->email_verify(ui->lineEdit_verification_code->text().toInt());
95+
ui->label_warn->setText("Verifing your email...");
96+
ui->label_warn->setStyleSheet("color:black;");
97+
}
98+

XMYChatClient/registerdialog.h

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#ifndef REGISTERDIALOG_H
2+
#define REGISTERDIALOG_H
3+
4+
#include <QDialog>
5+
#include "loginsession.h"
6+
7+
namespace Ui {
8+
class RegisterDialog;
9+
}
10+
11+
class RegisterDialog : public QDialog
12+
{
13+
Q_OBJECT
14+
15+
public:
16+
explicit RegisterDialog(loginsession* session, QWidget *parent = nullptr, QString email=QString(), QString password=QString());
17+
~RegisterDialog();
18+
19+
private:
20+
Ui::RegisterDialog *ui;
21+
loginsession* session;
22+
23+
bool check_form();
24+
void set_status(bool status);
25+
26+
private slots:
27+
void register_callback(int result);
28+
void on_pushButton_send_code_clicked();
29+
void on_pushButton_register_clicked();
30+
};
31+
32+
#endif // REGISTERDIALOG_H

0 commit comments

Comments
 (0)