diff --git a/dp4-login-plugin/dp4_login_module.cpp b/dp4-login-plugin/dp4_login_module.cpp index 6bd7a5e..2529f1c 100644 --- a/dp4-login-plugin/dp4_login_module.cpp +++ b/dp4-login-plugin/dp4_login_module.cpp @@ -14,24 +14,13 @@ namespace module Dp4LoginModule::Dp4LoginModule(QObject *parent) : QObject(parent) - , m_callbackFun(nullptr) - , m_callbackData(new AuthCallbackData) - , m_messageCallbackFunc(nullptr) { setObjectName(QStringLiteral("Dp4LoginModule")); installTranslator(); - // 以下部分爲測試代碼,具體如何寫請根據實際的業務來處理即可 - /*m_callbackData->account = "uos"; - m_callbackData->token = "1"; - m_callbackData->result = 0; - */ } Dp4LoginModule::~Dp4LoginModule() { - if (m_callbackData) { - delete m_callbackData; - } } void Dp4LoginModule::init() @@ -65,8 +54,8 @@ void Dp4LoginModule::installTranslator() void Dp4LoginModule::setCallback(LoginCallBack *callback) { - m_callback = callback; - m_callbackFun = callback->authCallbackFun; + Dp4LoginWidget *loginWidget = static_cast(content()); + loginWidget->setCallback(callback); } std::string Dp4LoginModule::onMessage(const std::string &message) @@ -103,10 +92,15 @@ std::string Dp4LoginModule::onMessage(const std::string &message) retObj["Data"] = retDataObj; } else if (cmdType == "StartAuth") { - } else if (cmdType == "AuthState") { - + // 认证类型 + Dp4LoginWidget *loginWidget = static_cast(content()); + loginWidget->updateAuthenResult(data.value("AuthType").toInt(), data.value("AuthState").toInt()); } else if (cmdType == "LimitsInfo") { + } else if (cmdType == "message") { + // 验证后接收到了错误的消息 + Dp4LoginWidget *loginWidget = static_cast(content()); + loginWidget->setMessage(data.value("type").toString(), data.value("message").toString()); } QJsonDocument doc; diff --git a/dp4-login-plugin/dp4_login_module.h b/dp4-login-plugin/dp4_login_module.h index b843bcd..9d5a9a6 100644 --- a/dp4-login-plugin/dp4_login_module.h +++ b/dp4-login-plugin/dp4_login_module.h @@ -36,12 +36,6 @@ public: private: void installTranslator(); - -private: - LoginCallBack *m_callback; - AuthCallbackFun m_callbackFun; - AuthCallbackData *m_callbackData; - MessageCallbackFun m_messageCallbackFunc; }; } diff --git a/dp4-login-plugin/dp4loginwidget.cpp b/dp4-login-plugin/dp4loginwidget.cpp index 3b5dc24..0dd7ec4 100644 --- a/dp4-login-plugin/dp4loginwidget.cpp +++ b/dp4-login-plugin/dp4loginwidget.cpp @@ -1,4 +1,6 @@ #include "dp4loginwidget.h" +#include "login_module_interface.h" + #include #include #include @@ -14,9 +16,17 @@ Dp4LoginWidget::Dp4LoginWidget(QWidget *parent) : QWidget(parent) + , m_topWidget(nullptr) + , m_labelImage(nullptr) + , m_labelOtherUser(nullptr) + , m_labelText(nullptr) + , m_layout(nullptr) , m_environment(nullptr) , m_username(nullptr) , m_password(nullptr) + , m_pbForgetPassword(nullptr) + , m_callback(nullptr) + , m_callbackData(new dss::module::AuthCallbackData) { initUi(); } @@ -25,9 +35,56 @@ Dp4LoginWidget::~Dp4LoginWidget() { } +void Dp4LoginWidget::setCallback(dss::module::LoginCallBack *callback) +{ + m_callback = callback; +} + +void Dp4LoginWidget::updateAuthenResult(int type, int state) +{ + Q_UNUSED(type); + dss::module::AuthState AuthState = static_cast(state); + switch (AuthState) { + case dss::module::AuthState::AS_Success: { + // TODO: 登陆成功,此处从界面上修改登陆成功的状态(这里的提示框三为了验证结果,后续实际开发建议不要用这种方式) + QMessageBox(QMessageBox::Information, tr("Logon"), tr("success")).exec(); + break; + } + case dss::module::AuthState::AS_Failure: { + // TODO: 登陆失败,从界面上体现登录失败的状态,(这里的提示框三为了验证结果,后续实际开发建议不要用这种方式) + QMessageBox(QMessageBox::Warning, tr("Logon"), tr("failure")).exec(); + break; + } + default: { + // TODO: 其他状态,根据需要决定是否列举出来,例如正在登陆等状态,看看界面是否需要处理, + // 根据实际情况看看是否需要加上case分支,这里暂时统一按照default(由开发人员自行添加case分支) + break; + } + } +} + +void Dp4LoginWidget::setMessage(const QString &type, const QString &message) +{ + // 接收界面发送的消息 + if (type == QString("account_error")) { + // TODO 如果是账户错误,就在界面上体现出来,此处暂时使用消息框代替,具体怎么做由开发人员自己定义 + QMessageBox(QMessageBox::Critical, tr("Logon"), message).exec(); + } +} + void Dp4LoginWidget::Logon() { - QMessageBox(QMessageBox::Information, tr("Logon"), tr("Environment:") + m_environment->currentText() + "\n" + tr("Username:") + m_username->text() + "\nPassword:" + m_password->text()).exec(); + // TODO: 这里由开发人员自行添加dp的验证流程,如果在dde-session-shell验证之前,请在这里写验证流程, + // 如果在dde-session-shell,请在后面写(由开发人员根据实际情况来决定) + + // 这里将用户名和密码传给dde-session-shell,由dde-session-shell来处理DA的验证, + if (m_callback) + { + m_callbackData->account = m_username->text().trimmed().toStdString(); + m_callbackData->token = m_password->text().trimmed().toStdString(); + m_callback->authCallbackFun(m_callbackData, m_callback->app_data); + } + //QMessageBox(QMessageBox::Information, tr("Logon"), tr("Environment:") + m_environment->currentText() + "\n" + tr("Username:") + m_username->text() + "\nPassword:" + m_password->text()).exec(); } void Dp4LoginWidget::ResetPassword() @@ -56,7 +113,7 @@ void Dp4LoginWidget::initUi() m_password->setPlaceholderText(tr("Password")); m_password->setEchoMode(QLineEdit::PasswordEchoOnEdit); m_password->setStyleSheet("background-color:royalblue;"); - connect(m_password->addAction(QIcon::fromTheme("media-playback-start"), QLineEdit::TrailingPosition), &QAction::triggered, this, [=](){this->Logon();}); + connect(m_password->addAction(QIcon::fromTheme("media-playback-start"), QLineEdit::TrailingPosition), &QAction::triggered, this, [this] { this->Logon(); }); m_layout->addWidget(m_password); m_environment = new QComboBox(m_topWidget); m_environment->addItem(tr("Production")); diff --git a/dp4-login-plugin/dp4loginwidget.h b/dp4-login-plugin/dp4loginwidget.h index bfc60cf..b9fa656 100644 --- a/dp4-login-plugin/dp4loginwidget.h +++ b/dp4-login-plugin/dp4loginwidget.h @@ -3,6 +3,15 @@ #include +namespace dss { +namespace module { +struct AuthCallbackData; +struct LoginCallBack; +struct AuthCallbackData; +} +}; + + class Dp4LoginWidget : public QWidget { Q_OBJECT @@ -10,6 +19,9 @@ class Dp4LoginWidget : public QWidget public: explicit Dp4LoginWidget(QWidget *parent = nullptr); ~Dp4LoginWidget() override; + void setCallback(dss::module::LoginCallBack *callback); + void updateAuthenResult(int type, int state); + void setMessage(const QString &type, const QString &message); private: void Logon(); @@ -27,6 +39,8 @@ private: class QLineEdit *m_username; class QLineEdit *m_password; class QPushButton *m_pbForgetPassword; + struct dss::module::LoginCallBack *m_callback; + struct dss::module::AuthCallbackData *m_callbackData; }; #endif // TESTWIDGET_H