Skip to content

Commit cd0cf68

Browse files
committed
refactor: split PluginManager into DccPluginLoader and DccPluginManager
Extract plugin loading state machine from PluginData into DccPluginLoader class with signal-driven auto-advancing states. Simplify PluginManager (renamed to DccPluginManager) to only handle scheduling, thread pool and lifecycle management. Fix display module unnecessary delayed initialization and adjust root/engine deletion order in cleanup. 将PluginData中的插件加载逻辑提取为DccPluginLoader类,使用信号驱动状态机自动推进。 简化PluginManager(重命名为DccPluginManager)为调度协调角色,仅管理线程池和生命周期。 修复DisplayModule不必要的延迟初始化,调整清理时root/engine的删除顺序。 Log: 重构插件加载架构,分离加载逻辑与调度管理 Influence: 1. 控制中心各模块正常加载和显示;2. 插件隐藏/取消隐藏功能正常;3. 异步数据加载正常;4. 模块切换和页面导航正常
1 parent e5225a3 commit cd0cf68

9 files changed

Lines changed: 936 additions & 816 deletions

File tree

src/dde-control-center/dccmanager.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "dccimageprovider.h"
88
#include "dccobject_p.h"
99
#include "navigationmodel.h"
10-
#include "pluginmanager.h"
10+
#include "dccpluginmanager.h"
1111
#include "searchmodel.h"
1212

1313
#include <DGuiApplicationHelper>
@@ -58,7 +58,7 @@ DccManager::DccManager(QObject *parent)
5858
, m_hideObjects(new DccObject(this))
5959
, m_noAddObjects(new DccObject(this))
6060
, m_noParentObjects(new DccObject(this))
61-
, m_plugins(new PluginManager(this))
61+
, m_plugins(new DccPluginManager(this))
6262
, m_window(nullptr)
6363
, m_dconfig(DConfig::create("org.deepin.dde.control-center", "org.deepin.dde.control-center", QString(), this))
6464
, m_engine(nullptr)
@@ -97,8 +97,8 @@ DccManager::DccManager(QObject *parent)
9797
#endif
9898

9999
initConfig();
100-
connect(m_plugins, &PluginManager::addObject, this, &DccManager::addObject);
101-
connect(m_plugins, &PluginManager::loadAllFinished, this, &DccManager::handleShowReady, Qt::QueuedConnection);
100+
connect(m_plugins, &DccPluginManager::addObject, this, &DccManager::addObject);
101+
connect(m_plugins, &DccPluginManager::loadAllFinished, this, &DccManager::handleShowReady, Qt::QueuedConnection);
102102
m_showTimer = new QTimer(this);
103103
m_showTimer->setInterval(60);
104104
m_showTimer->setSingleShot(true);
@@ -380,7 +380,7 @@ QString DccManager::searchProxy(const QString &json) const
380380
setDelayedReply(true);
381381
QObject::connect(
382382
m_plugins,
383-
&PluginManager::loadAllFinished,
383+
&DccPluginManager::loadAllFinished,
384384
this,
385385
[this, json, message]() {
386386
const auto &ret = this->search(json);
@@ -1166,11 +1166,9 @@ void DccManager::clearData()
11661166
#ifdef DCC_ENABLE_MEMORY_MANAGEMENT
11671167
// TODO: delete m_engine会有概率崩溃
11681168
m_window = nullptr;
1169-
qCDebug(dccLog()) << "delete root begin";
11701169
DccObject *root = m_root;
11711170
m_root = nullptr;
11721171
Q_EMIT rootChanged(m_root);
1173-
qCDebug(dccLog()) << "delete root end";
11741172

11751173
qCDebug(dccLog()) << "delete clearData hide:" << m_hideObjects->getChildren().size() << "noAdd:" << m_noAddObjects->getChildren().size() << "noParent" << m_noParentObjects->getChildren().size();
11761174
delete m_noParentObjects;
@@ -1181,7 +1179,9 @@ void DccManager::clearData()
11811179
delete m_engine;
11821180
qCDebug(dccLog()) << "clear QmlEngine";
11831181
m_engine = nullptr;
1182+
qCDebug(dccLog()) << "delete root begin";
11841183
delete root;
1184+
qCDebug(dccLog()) << "delete root end";
11851185
#endif
11861186
}
11871187

@@ -1191,7 +1191,7 @@ void DccManager::waitLoadFinished() const
11911191
QEventLoop loop;
11921192
QTimer timer;
11931193
connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
1194-
connect(m_plugins, &PluginManager::loadAllFinished, &loop, &QEventLoop::quit);
1194+
connect(m_plugins, &DccPluginManager::loadAllFinished, &loop, &QEventLoop::quit);
11951195
timer.start(5000);
11961196
loop.exec();
11971197
}

src/dde-control-center/dccmanager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ QT_END_NAMESPACE
2323
namespace dccV25 {
2424
class NavigationModel;
2525
class SearchModel;
26-
class PluginManager;
26+
class DccPluginManager;
2727
class DccImageProvider;
2828

2929
class DccManager : public DccApp, protected QDBusContext
@@ -135,7 +135,7 @@ private Q_SLOTS:
135135
QVector<DccObject *> m_currentObjects; // 当前显示的页面路径,从根页面到当前页面
136136
QVector<DccObject *> m_triggeredObjects; // 用户交互触发的对象路径,从根菜单到当前子控件
137137

138-
PluginManager *m_plugins;
138+
DccPluginManager *m_plugins;
139139
QPointer<QWindow> m_window;
140140
Dtk::Core::DConfig *m_dconfig;
141141
QSet<QString> m_hideModule;

0 commit comments

Comments
 (0)