修改插件的加载方式

donghualin 2 years ago
parent 13b6249da6
commit 2db46c8c1c
  1. 87
      dp4-login-plugin/dp4_login_module.cpp
  2. 27
      dp4-login-plugin/dp4_login_module.h
  3. 34
      dp4-login-plugin/dp4loginwidget.cpp
  4. 13
      dp4-login-plugin/dp4loginwidget.h
  5. 2
      dp4-login-plugin/login.json
  6. 3
      example/loginwidget.cpp
  7. 4
      example/loginwidget.h

@ -9,11 +9,15 @@
namespace dss namespace dss
{ {
namespace module namespace module_v2
{ {
Dp4LoginModule::Dp4LoginModule(QObject *parent) Dp4LoginModule::Dp4LoginModule(QObject *parent)
: QObject(parent) : QObject(parent)
, m_loginWidget(nullptr)
, m_appData(nullptr)
, m_callback(nullptr)
, m_msgCallback(nullptr)
{ {
setObjectName(QStringLiteral("Dp4LoginModule")); setObjectName(QStringLiteral("Dp4LoginModule"));
installTranslator(); installTranslator();
@ -21,17 +25,51 @@ Dp4LoginModule::Dp4LoginModule(QObject *parent)
Dp4LoginModule::~Dp4LoginModule() Dp4LoginModule::~Dp4LoginModule()
{ {
if (m_loginWidget) {
m_loginWidget->deleteLater();
}
} }
void Dp4LoginModule::init() void Dp4LoginModule::init()
{ {
if (m_loginWidget) {
m_loginWidget->reset();
return;
}
m_loginWidget = new Dp4LoginWidget;
m_loginWidget->reset();
connect(m_loginWidget, &Dp4LoginWidget::requestSendAuthen, this, [ this ](const QString &account, const QString &token) {
// 发送认证的信息
if (m_callback && m_appData) {
AuthCallbackData data;
data.account = account;
data.token = token;
data.result = 1;
m_callback(&data, &m_appData);
}
});
}
void Dp4LoginModule::setAppData(AppDataPtr appData)
{
m_appData = appData;
}
void Dp4LoginModule::setAuthCallback(AuthCallbackFun callback)
{
m_callback = callback;
}
void Dp4LoginModule::setMessageCallback(MessageCallbackFunc msgCallback)
{
m_msgCallback = msgCallback;
} }
QWidget *Dp4LoginModule::content() QWidget *Dp4LoginModule::content()
{ {
// 此处返回窗体必须从此处创建,因为该插件是在子线程中加载,而窗体需要在主线程中显示,因此此处第一次获取的时候再返回它的窗体即可 // 此处返回窗体必须从此处创建,因为该插件是在子线程中加载,而窗体需要在主线程中显示,因此此处第一次获取的时候再返回它的窗体即可
static Dp4LoginWidget dp4Widget; return m_loginWidget;
return &dp4Widget;
} }
void Dp4LoginModule::reset() void Dp4LoginModule::reset()
@ -52,19 +90,13 @@ void Dp4LoginModule::installTranslator()
QApplication::installTranslator(&translator); QApplication::installTranslator(&translator);
} }
void Dp4LoginModule::setCallback(LoginCallBack *callback) QString Dp4LoginModule::message(const QString &message)
{
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content());
loginWidget->setCallback(callback);
}
std::string Dp4LoginModule::onMessage(const std::string &message)
{ {
qInfo() << Q_FUNC_INFO; qInfo() << Q_FUNC_INFO;
QJsonParseError jsonParseError; QJsonParseError jsonParseError;
const QJsonDocument messageDoc = QJsonDocument::fromJson(QByteArray::fromStdString(message), &jsonParseError); const QJsonDocument messageDoc = QJsonDocument::fromJson(message.toLatin1(), &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError || messageDoc.isEmpty()) { if (jsonParseError.error != QJsonParseError::NoError || messageDoc.isEmpty()) {
qWarning() << Q_FUNC_INFO << "Failed to obtain message from shell!: " << QString::fromStdString(message); qWarning() << Q_FUNC_INFO << "Failed to obtain message from shell!: " << message;
return ""; return "";
} }
@ -77,12 +109,13 @@ std::string Dp4LoginModule::onMessage(const std::string &message)
QJsonObject data = msgObj.value("Data").toObject(); QJsonObject data = msgObj.value("Data").toObject();
qInfo() << "Cmd type: " << cmdType; qInfo() << "Cmd type: " << cmdType;
if (cmdType == "CurrentUserChanged") { if (cmdType == "CurrentUserChanged") {
QJsonObject data = msgObj.value("Data").toObject(); if (m_loginWidget) {
QString userName = data.value("Name").toString(); QJsonObject data = msgObj.value("Data").toObject();
QString fullName = data.value("Fullname").toString(); QString userName = data.value("Name").toString();
QString avatar = data.value("Avatar").toString(); QString fullName = data.value("Fullname").toString();
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content()); QString avatar = data.value("Avatar").toString();
loginWidget->setCurrentAccount(userName, fullName, avatar); m_loginWidget->setCurrentAccount(userName, fullName, avatar);
}
} else if (cmdType == "GetConfigs") { } else if (cmdType == "GetConfigs") {
QJsonObject retDataObj; QJsonObject retDataObj;
retDataObj["ShowAvatar"] = false; retDataObj["ShowAvatar"] = false;
@ -90,22 +123,26 @@ std::string Dp4LoginModule::onMessage(const std::string &message)
retDataObj["ShowSwitchButton"] = false; retDataObj["ShowSwitchButton"] = false;
retDataObj["ShowLockButton"] = false; retDataObj["ShowLockButton"] = false;
retDataObj["DefaultAuthLevel"] = DefaultAuthLevel::StrongDefault; retDataObj["DefaultAuthLevel"] = DefaultAuthLevel::StrongDefault;
retDataObj["DisableOtherAuthentications"] = true;
retDataObj["showBackGroundColor"] = false; retDataObj["showBackGroundColor"] = false;
retDataObj["AuthType"] = AuthType::AT_Custom; retDataObj["AuthType"] = AuthType::AT_Custom;
retDataObj["width"] = content()->width();
retDataObj["height"] = content()->height();
retObj["Data"] = retDataObj; retObj["Data"] = retDataObj;
} else if (cmdType == "StartAuth") { } else if (cmdType == "StartAuth") {
} else if (cmdType == "AuthState") { } else if (cmdType == "AuthState") {
// 认证类型 // 认证类型
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content()); int authType = data.value("AuthType").toInt();
loginWidget->updateAuthenResult(data.value("AuthType").toInt(), data.value("AuthState").toInt()); int authState = data.value("AuthState").toInt();
if (authType == AuthType::AT_All && authState == AuthState::AS_Success) {
init();
} else if (m_loginWidget) {
m_loginWidget->updateAuthenResult(authType, authState);
}
} else if (cmdType == "LimitsInfo") { } else if (cmdType == "LimitsInfo") {
} else if (cmdType == "message") { } else if (cmdType == "message") {
// 验证后接收到了错误的消息 // 验证后接收到了错误的消息
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content()); if (m_loginWidget)
loginWidget->setMessage(data.value("type").toString(), data.value("message").toString()); m_loginWidget->setMessage(data.value("type").toString(), data.value("message").toString());
} else if (cmdType == "GetAuthenInfo") { } else if (cmdType == "GetAuthenInfo") {
QJsonObject retDataObj; QJsonObject retDataObj;
// 是否需要调用外部的登录方式 // 是否需要调用外部的登录方式
@ -120,7 +157,7 @@ std::string Dp4LoginModule::onMessage(const std::string &message)
QJsonDocument doc; QJsonDocument doc;
doc.setObject(retObj); doc.setObject(retObj);
return doc.toJson().toStdString(); return doc.toJson();
} }
} }

@ -5,20 +5,20 @@
#ifndef DP4LOGINMODULE_H #ifndef DP4LOGINMODULE_H
#define DP4LOGINMODULE_H #define DP4LOGINMODULE_H
#include "login_module_interface.h" #include "login_module_interface_v2.h"
class Dp4LoginWidget; class Dp4LoginWidget;
namespace dss namespace dss
{ {
namespace module namespace module_v2
{ {
class Dp4LoginModule: public QObject, public LoginModuleInterface class Dp4LoginModule: public QObject, public LoginModuleInterfaceV2
{ {
Q_OBJECT Q_OBJECT
Q_PLUGIN_METADATA(IID "com.deepin.dde.shell.Modules.Login" FILE "login.json") Q_PLUGIN_METADATA(IID "com.deepin.dde.shell.Modules_v2.Login" FILE "login.json")
Q_INTERFACES(dss::module::LoginModuleInterface) Q_INTERFACES(dss::module_v2::LoginModuleInterfaceV2)
public: public:
explicit Dp4LoginModule(QObject *parent = nullptr); explicit Dp4LoginModule(QObject *parent = nullptr);
@ -26,16 +26,27 @@ public:
void init() override; void init() override;
ModuleType type() const override ModuleType type() const override
{ return CustomLoginType; } { return LoginType; }
inline QString key() const override inline QString key() const override
{ return "dp4-login"; } { return "dp4-login"; }
void setAppData(AppDataPtr appData) override;
void setAuthCallback(AuthCallbackFun callback) override;
void setMessageCallback(MessageCallbackFunc msgCallback) override;
QWidget *content() override; QWidget *content() override;
void setCallback(LoginCallBack *callback) override; //void setCallback(LoginCallBack *callback) override;
std::string onMessage(const std::string &) override; QString message(const QString &) override;
void reset() override; void reset() override;
private: private:
void installTranslator(); void installTranslator();
private:
Dp4LoginWidget *m_loginWidget;
AppDataPtr m_appData;
AuthCallbackFun m_callback;
MessageCallbackFunc m_msgCallback;
}; };
} }

@ -25,8 +25,6 @@ Dp4LoginWidget::Dp4LoginWidget(QWidget *parent)
, m_username(nullptr) , m_username(nullptr)
, m_password(nullptr) , m_password(nullptr)
, m_pbForgetPassword(nullptr) , m_pbForgetPassword(nullptr)
, m_callback(nullptr)
, m_callbackData(new dss::module::AuthCallbackData)
{ {
initUi(); initUi();
} }
@ -35,11 +33,6 @@ Dp4LoginWidget::~Dp4LoginWidget()
{ {
} }
void Dp4LoginWidget::setCallback(dss::module::LoginCallBack *callback)
{
m_callback = callback;
}
void Dp4LoginWidget::updateAuthenResult(int type, int state) void Dp4LoginWidget::updateAuthenResult(int type, int state)
{ {
Q_UNUSED(type); Q_UNUSED(type);
@ -81,25 +74,34 @@ void Dp4LoginWidget::setCurrentAccount(const QString &accountName, const QString
qDebug() << "accountName" << accountName << fullname << avatar; qDebug() << "accountName" << accountName << fullname << avatar;
} }
void Dp4LoginWidget::reset()
{
m_username->clear();
m_password->clear();
}
void Dp4LoginWidget::Logon() void Dp4LoginWidget::Logon()
{ {
const QString userName = m_username->text().trimmed();
if (userName.isEmpty()) {
m_username->setFocus();
return;
}
const QString token = m_password->text();
if (token.isEmpty()) {
m_password->setFocus();
return;
}
// TODO: 这里由开发人员自行添加dp的验证流程,如果在dde-session-shell验证之前,请在这里写验证流程, // TODO: 这里由开发人员自行添加dp的验证流程,如果在dde-session-shell验证之前,请在这里写验证流程,
// 如果在dde-session-shell,请在后面写(由开发人员根据实际情况来决定) // 如果在dde-session-shell,请在后面写(由开发人员根据实际情况来决定)
// 这里将用户名和密码传给dde-session-shell,由dde-session-shell来处理DA的验证, // 这里将用户名和密码传给dde-session-shell,由dde-session-shell来处理DA的验证,
if (m_callback) requestSendAuthen(userName, token);
{
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() void Dp4LoginWidget::ResetPassword()
{ {
QMessageBox(QMessageBox::Information,tr("Forget Password"),tr("Forget Password")).exec(); QMessageBox(QMessageBox::Information,QIcon::themeName(),QIcon::themeSearchPaths().join("\n")).exec();
// QMessageBox(QMessageBox::Information,QIcon::themeName(),QIcon::themeSearchPaths().join("\n")).exec();
} }
void Dp4LoginWidget::initUi() void Dp4LoginWidget::initUi()

@ -1,10 +1,12 @@
#ifndef DP4LOGINWIDGET_H #ifndef DP4LOGINWIDGET_H
#define DP4LOGINWIDGET_H #define DP4LOGINWIDGET_H
#include "login_module_interface_v2.h"
#include <QWidget> #include <QWidget>
namespace dss { namespace dss {
namespace module { namespace module_v2 {
struct AuthCallbackData; struct AuthCallbackData;
struct LoginCallBack; struct LoginCallBack;
struct AuthCallbackData; struct AuthCallbackData;
@ -18,11 +20,16 @@ class Dp4LoginWidget : public QWidget
public: public:
explicit Dp4LoginWidget(QWidget *parent = nullptr); explicit Dp4LoginWidget(QWidget *parent = nullptr);
~Dp4LoginWidget() override; ~Dp4LoginWidget() override;
void setCallback(dss::module::LoginCallBack *callback);
void updateAuthenResult(int type, int state); void updateAuthenResult(int type, int state);
void setMessage(const QString &type, const QString &message); void setMessage(const QString &type, const QString &message);
void setCurrentAccount(const QString &accountName, const QString &fullname, const QString &avatar); void setCurrentAccount(const QString &accountName, const QString &fullname, const QString &avatar);
void reset();
signals:
void requestSendAuthen(const QString &account, const QString &token);
private: private:
void Logon(); void Logon();
void ResetPassword(); void ResetPassword();
@ -39,8 +46,6 @@ private:
class QLineEdit *m_username; class QLineEdit *m_username;
class QLineEdit *m_password; class QLineEdit *m_password;
class QPushButton *m_pbForgetPassword; class QPushButton *m_pbForgetPassword;
struct dss::module::LoginCallBack *m_callback;
struct dss::module::AuthCallbackData *m_callbackData;
}; };
#endif // TESTWIDGET_H #endif // TESTWIDGET_H

@ -1,4 +1,4 @@
{ {
"api": "1.2.0", "api": "2.0.0",
"pluginType": "Login" "pluginType": "Login"
} }

@ -5,8 +5,9 @@
LoginWidget::LoginWidget(QWidget *parent) LoginWidget::LoginWidget(QWidget *parent)
: QWidget (parent) : QWidget (parent)
, m_dp4module(new dss::module::Dp4LoginModule(this)) , m_dp4module(new dss::module_v2::Dp4LoginModule(this))
{ {
m_dp4module->init();
QHBoxLayout *layout = new QHBoxLayout(this); QHBoxLayout *layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0); layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0); layout->setSpacing(0);

@ -4,7 +4,7 @@
#include <QWidget> #include <QWidget>
namespace dss { namespace dss {
namespace module { namespace module_v2 {
class Dp4LoginModule; class Dp4LoginModule;
} }
} }
@ -18,7 +18,7 @@ public:
~LoginWidget(); ~LoginWidget();
private: private:
dss::module::Dp4LoginModule *m_dp4module; dss::module_v2::Dp4LoginModule *m_dp4module;
}; };
#endif #endif

Loading…
Cancel
Save