// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dp4_login_module.h" #include "dp4loginwidget.h" #include #include namespace dss { namespace module { Dp4LoginModule::Dp4LoginModule(QObject *parent) : QObject(parent) { setObjectName(QStringLiteral("Dp4LoginModule")); installTranslator(); } Dp4LoginModule::~Dp4LoginModule() { } void Dp4LoginModule::init() { } QWidget *Dp4LoginModule::content() { // 此处返回窗体必须从此处创建,因为该插件是在子线程中加载,而窗体需要在主线程中显示,因此此处第一次获取的时候再返回它的窗体即可 static Dp4LoginWidget dp4Widget; return &dp4Widget; } void Dp4LoginModule::reset() { init(); } void Dp4LoginModule::installTranslator() { // 加载翻译文件 QString translationFile = QString("%1/dp4-login-plugin_%2.qm").arg(QM_FILES_DIR).arg(QLocale::system().name()); QFile file(translationFile); if (!file.exists()) return; static QTranslator translator(this); translator.load(translationFile); QApplication::installTranslator(&translator); } void Dp4LoginModule::setCallback(LoginCallBack *callback) { Dp4LoginWidget *loginWidget = static_cast(content()); loginWidget->setCallback(callback); } std::string Dp4LoginModule::onMessage(const std::string &message) { qInfo() << Q_FUNC_INFO; QJsonParseError jsonParseError; const QJsonDocument messageDoc = QJsonDocument::fromJson(QByteArray::fromStdString(message), &jsonParseError); if (jsonParseError.error != QJsonParseError::NoError || messageDoc.isEmpty()) { qWarning() << Q_FUNC_INFO << "Failed to obtain message from shell!: " << QString::fromStdString(message); return ""; } QJsonObject retObj; retObj["Code"] = 0; retObj["Message"] = "Success"; QJsonObject msgObj = messageDoc.object(); QString cmdType = msgObj.value("CmdType").toString(); 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(content()); loginWidget->setCurrentAccount(userName, fullName, avatar); } else if (cmdType == "GetConfigs") { QJsonObject retDataObj; retDataObj["ShowAvatar"] = false; retDataObj["ShowUserName"] = false; retDataObj["ShowSwitchButton"] = false; retDataObj["ShowLockButton"] = false; retDataObj["DefaultAuthLevel"] = DefaultAuthLevel::StrongDefault; 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(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()); } else if (cmdType == "GetAuthenInfo") { QJsonObject retDataObj; // 是否需要调用外部的登录方式 retDataObj.insert("AuthenType", "password"); retObj["Data"] = retDataObj; } else if (cmdType == "IsPluginEnabled") { QJsonObject retDataObj; // 当前插件自动启动 retDataObj.insert("IsPluginEnabled", true); retObj["Data"] = retDataObj; } QJsonDocument doc; doc.setObject(retObj); return doc.toJson().toStdString(); } } }