修改插件的加载方式

donghualin 2 years ago
parent 13b6249da6
commit c0caac6306
  1. 89
      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 module
namespace module_v2
{
Dp4LoginModule::Dp4LoginModule(QObject *parent)
: QObject(parent)
, m_loginWidget(nullptr)
, m_appData(nullptr)
, m_callback(nullptr)
, m_msgCallback(nullptr)
{
setObjectName(QStringLiteral("Dp4LoginModule"));
installTranslator();
@ -21,17 +25,51 @@ Dp4LoginModule::Dp4LoginModule(QObject *parent)
Dp4LoginModule::~Dp4LoginModule()
{
if (m_loginWidget) {
m_loginWidget->deleteLater();
}
}
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()
{
// 此处返回窗体必须从此处创建,因为该插件是在子线程中加载,而窗体需要在主线程中显示,因此此处第一次获取的时候再返回它的窗体即可
static Dp4LoginWidget dp4Widget;
return &dp4Widget;
return m_loginWidget;
}
void Dp4LoginModule::reset()
@ -52,19 +90,13 @@ void Dp4LoginModule::installTranslator()
QApplication::installTranslator(&translator);
}
void Dp4LoginModule::setCallback(LoginCallBack *callback)
{
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content());
loginWidget->setCallback(callback);
}
std::string Dp4LoginModule::onMessage(const std::string &message)
QString Dp4LoginModule::message(const QString &message)
{
qInfo() << Q_FUNC_INFO;
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()) {
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 "";
}
@ -77,12 +109,13 @@ std::string Dp4LoginModule::onMessage(const std::string &message)
QJsonObject data = msgObj.value("Data").toObject();
qInfo() << "Cmd type: " << cmdType;
if (cmdType == "CurrentUserChanged") {
QJsonObject data = msgObj.value("Data").toObject();
QString userName = data.value("Name").toString();
QString fullName = data.value("Fullname").toString();
QString avatar = data.value("Avatar").toString();
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content());
loginWidget->setCurrentAccount(userName, fullName, avatar);
if (m_loginWidget) {
QJsonObject data = msgObj.value("Data").toObject();
QString userName = data.value("Name").toString();
QString fullName = data.value("Fullname").toString();
QString avatar = data.value("Avatar").toString();
m_loginWidget->setCurrentAccount(userName, fullName, avatar);
}
} else if (cmdType == "GetConfigs") {
QJsonObject retDataObj;
retDataObj["ShowAvatar"] = false;
@ -90,22 +123,26 @@ std::string Dp4LoginModule::onMessage(const std::string &message)
retDataObj["ShowSwitchButton"] = false;
retDataObj["ShowLockButton"] = false;
retDataObj["DefaultAuthLevel"] = DefaultAuthLevel::StrongDefault;
retDataObj["DisableOtherAuthentications"] = true;
retDataObj["showBackGroundColor"] = false;
retDataObj["AuthType"] = AuthType::AT_Custom;
retDataObj["width"] = content()->width();
retDataObj["height"] = content()->height();
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());
int authType = data.value("AuthType").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 == "message") {
} else if (cmdType == "Message") {
// 验证后接收到了错误的消息
Dp4LoginWidget *loginWidget = static_cast<Dp4LoginWidget *>(content());
loginWidget->setMessage(data.value("type").toString(), data.value("message").toString());
if (m_loginWidget)
m_loginWidget->setMessage(data.value("type").toString(), data.value("content").toString());
} else if (cmdType == "GetAuthenInfo") {
QJsonObject retDataObj;
// 是否需要调用外部的登录方式
@ -120,7 +157,7 @@ std::string Dp4LoginModule::onMessage(const std::string &message)
QJsonDocument doc;
doc.setObject(retObj);
return doc.toJson().toStdString();
return doc.toJson();
}
}

@ -5,20 +5,20 @@
#ifndef DP4LOGINMODULE_H
#define DP4LOGINMODULE_H
#include "login_module_interface.h"
#include "login_module_interface_v2.h"
class Dp4LoginWidget;
namespace dss
{
namespace module
namespace module_v2
{
class Dp4LoginModule: public QObject, public LoginModuleInterface
class Dp4LoginModule: public QObject, public LoginModuleInterfaceV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "com.deepin.dde.shell.Modules.Login" FILE "login.json")
Q_INTERFACES(dss::module::LoginModuleInterface)
Q_PLUGIN_METADATA(IID "com.deepin.dde.shell.Modules_v2.Login" FILE "login.json")
Q_INTERFACES(dss::module_v2::LoginModuleInterfaceV2)
public:
explicit Dp4LoginModule(QObject *parent = nullptr);
@ -26,16 +26,27 @@ public:
void init() override;
ModuleType type() const override
{ return CustomLoginType; }
{ return LoginType; }
inline QString key() const override
{ return "dp4-login"; }
void setAppData(AppDataPtr appData) override;
void setAuthCallback(AuthCallbackFun callback) override;
void setMessageCallback(MessageCallbackFunc msgCallback) override;
QWidget *content() override;
void setCallback(LoginCallBack *callback) override;
std::string onMessage(const std::string &) override;
//void setCallback(LoginCallBack *callback) override;
QString message(const QString &) override;
void reset() override;
private:
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_password(nullptr)
, m_pbForgetPassword(nullptr)
, m_callback(nullptr)
, m_callbackData(new dss::module::AuthCallbackData)
{
initUi();
}
@ -35,11 +33,6 @@ Dp4LoginWidget::~Dp4LoginWidget()
{
}
void Dp4LoginWidget::setCallback(dss::module::LoginCallBack *callback)
{
m_callback = callback;
}
void Dp4LoginWidget::updateAuthenResult(int type, int state)
{
Q_UNUSED(type);
@ -81,25 +74,34 @@ void Dp4LoginWidget::setCurrentAccount(const QString &accountName, const QString
qDebug() << "accountName" << accountName << fullname << avatar;
}
void Dp4LoginWidget::reset()
{
m_username->clear();
m_password->clear();
}
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验证之前,请在这里写验证流程,
// 如果在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();
requestSendAuthen(userName, token);
}
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()

@ -1,10 +1,12 @@
#ifndef DP4LOGINWIDGET_H
#define DP4LOGINWIDGET_H
#include "login_module_interface_v2.h"
#include <QWidget>
namespace dss {
namespace module {
namespace module_v2 {
struct AuthCallbackData;
struct LoginCallBack;
struct AuthCallbackData;
@ -18,11 +20,16 @@ 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);
void setCurrentAccount(const QString &accountName, const QString &fullname, const QString &avatar);
void reset();
signals:
void requestSendAuthen(const QString &account, const QString &token);
private:
void Logon();
void ResetPassword();
@ -39,8 +46,6 @@ 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

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

@ -5,8 +5,9 @@
LoginWidget::LoginWidget(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);
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);

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

Loading…
Cancel
Save