diff --git a/CMakeLists.txt b/CMakeLists.txt
index ade39f4..bc3311d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -75,20 +75,21 @@ set(SOURCE_FILES
src/main.cpp
src/commons.h src/commons.cpp
src/menu-dbus-service.cpp src/menu-dbus-service.h
+ src/ukui-menu-application.cpp src/ukui-menu-application.h
src/model/model.cpp src/model/model.h
+ src/model/model-manager.cpp src/model/model-manager.h
src/settings/settings.cpp src/settings/settings.h
src/uiconfig/color-helper.cpp src/uiconfig/color-helper.h
src/uiconfig/theme-palette.cpp src/uiconfig/theme-palette.h
- src/ukui-menu-application.cpp src/ukui-menu-application.h
- src/model/model-manager.cpp src/model/model-manager.h
- src/appdata/app-icon-provider.cpp src/appdata/app-icon-provider.h
src/windows/menu-main-window.cpp src/windows/menu-main-window.h
- src/appdata/app-folder-helper.cpp src/appdata/app-folder-helper.h
- src/extension/menu-extension.cpp src/extension/menu-extension.h
- src/extension/menu-extension-iface.h
src/appdata/data-provider-plugin-iface.h
src/appdata/app-data-manager.cpp src/appdata/app-data-manager.h
+ src/appdata/app-folder-helper.cpp src/appdata/app-folder-helper.h
+ src/appdata/app-icon-provider.cpp src/appdata/app-icon-provider.h
+ src/appdata/data-provider-manager.cpp src/appdata/data-provider-manager.h
src/appdata/plugin/all-app-data-provider.cpp src/appdata/plugin/all-app-data-provider.h
+ src/extension/menu-extension-iface.h
+ src/extension/menu-extension.cpp src/extension/menu-extension.h
src/extension/extensions/folder-extension.cpp src/extension/extensions/folder-extension.h
src/extension/extensions/recent-file-extension.cpp src/extension/extensions/recent-file-extension.h
)
diff --git a/src/appdata/data-provider-manager.cpp b/src/appdata/data-provider-manager.cpp
new file mode 100644
index 0000000..f1f213b
--- /dev/null
+++ b/src/appdata/data-provider-manager.cpp
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "data-provider-manager.h"
+#include "plugin/all-app-data-provider.h"
+
+namespace UkuiMenu {
+
+/**
+ * 1.统一不同model显示相同的数据。
+ * 2.对model隐藏插件。
+ */
+DataProviderManager *DataProviderManager::instance()
+{
+ static DataProviderManager dataProviderManager;
+ return &dataProviderManager;
+}
+
+DataProviderManager::DataProviderManager()
+{
+ m_worker.start();
+ initProviders();
+}
+
+void DataProviderManager::initProviders()
+{
+ auto *allProvider = new AllAppDataProvider;
+ registerProvider(allProvider);
+
+ activateProvider(allProvider->name());
+ allProvider->moveToThread(&m_worker);
+}
+
+void DataProviderManager::registerProvider(DataProviderPluginIFace *provider)
+{
+ // if nullptr
+ if (!provider) {
+ return;
+ }
+
+ if (m_providers.contains(provider->name())) {
+ return;
+ }
+
+ m_providers.insert(provider->name(), provider);
+ connect(provider, &AllAppDataProvider::dataChanged, this, [this, provider](const QVector &data) {
+ //qDebug() << "==DataProviderManager dataChanged:" << provider->name() << QThread::currentThreadId();
+ if (m_activatedPlugin != provider->name()) {
+ return;
+ }
+
+ Q_EMIT dataChanged(data);
+ });
+}
+
+QVector DataProviderManager::data() const
+{
+ return m_providers.value(m_activatedPlugin)->data();
+}
+
+QString DataProviderManager::activatedProvider() const
+{
+ return m_activatedPlugin;
+}
+
+QStringList DataProviderManager::providers() const
+{
+ return m_providers.keys();
+}
+
+void DataProviderManager::activateProvider(const QString &name)
+{
+ if (!m_providers.contains(name)) {
+ return;
+ }
+
+ m_activatedPlugin = name;
+ Q_EMIT pluginChanged();
+}
+
+DataProviderManager::~DataProviderManager()
+{
+ m_worker.quit();
+ m_worker.wait();
+
+ for (auto &provider : m_providers) {
+ provider->deleteLater();
+ }
+}
+
+} // UkuiMenu
diff --git a/src/appdata/data-provider-manager.h b/src/appdata/data-provider-manager.h
new file mode 100644
index 0000000..86cb1bf
--- /dev/null
+++ b/src/appdata/data-provider-manager.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#ifndef UKUI_MENU_DATA_PROVIDER_MANAGER_H
+#define UKUI_MENU_DATA_PROVIDER_MANAGER_H
+
+#include
+#include
+#include
+
+#include "data-provider-plugin-iface.h"
+
+namespace UkuiMenu {
+
+class DataProviderManager : public QObject
+{
+ Q_OBJECT
+public:
+ static DataProviderManager *instance();
+ ~DataProviderManager() override;
+
+ QStringList providers() const;
+ QString activatedProvider() const;
+ void activateProvider(const QString &name);
+ QVector data() const;
+
+Q_SIGNALS:
+ void pluginChanged();
+ void dataChanged(QVector data);
+
+private:
+ DataProviderManager();
+ Q_DISABLE_COPY(DataProviderManager);
+
+ void initProviders();
+ void registerProvider(DataProviderPluginIFace *provider);
+
+private:
+ QThread m_worker;
+ QString m_activatedPlugin{""};
+ QHash m_providers;
+};
+
+} // UkuiMenu
+
+#endif //UKUI_MENU_DATA_PROVIDER_MANAGER_H