增加登录插件与dde-session-shell的交互

master
donghualin 2 years ago
parent fa00de132e
commit 5e51629157
  1. 24
      dp4-login-plugin/dp4_login_module.cpp
  2. 6
      dp4-login-plugin/dp4_login_module.h
  3. 61
      dp4-login-plugin/dp4loginwidget.cpp
  4. 14
      dp4-login-plugin/dp4loginwidget.h

@ -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<Dp4LoginWidget *>(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<Dp4LoginWidget *>(content());
loginWidget->updateAuthenResult(data.value("AuthType").toInt(), data.value("AuthState").toInt());
} else if (cmdType == "LimitsInfo") {
} else if (cmdType == "message") {
// 验证后接收到了错误的消息
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content());
loginWidget->setMessage(data.value("type").toString(), data.value("message").toString());
}
QJsonDocument doc;

@ -36,12 +36,6 @@ public:
private:
void installTranslator();
private:
LoginCallBack *m_callback;
AuthCallbackFun m_callbackFun;
AuthCallbackData *m_callbackData;
MessageCallbackFun m_messageCallbackFunc;
};
}

@ -1,4 +1,6 @@
#include "dp4loginwidget.h"
#include "login_module_interface.h"
#include <QComboBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
@ -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<dss::module::AuthState>(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"));

@ -3,6 +3,15 @@
#include <QWidget>
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

Loading…
Cancel
Save