From 27faa6a468f7816f1590faf579b52874dd25d10d Mon Sep 17 00:00:00 2001 From: liujinchang Date: Fri, 14 Jul 2023 10:46:55 +0800 Subject: [PATCH] fix: [tag-server] init filecache failed add signal make sure init filecache after int tag-server Log: as des Bug: https://pms.uniontech.com/bug-view-209607.html --- .../org.deepin.filemanager.server.TagManager.xml | 2 ++ .../common/dfmplugin-tag/data/tagproxyhandle.cpp | 12 ++++++++++-- .../common/dfmplugin-tag/data/tagproxyhandle.h | 2 ++ src/plugins/common/dfmplugin-tag/tag.cpp | 13 +++++++++---- .../common/dfmplugin-tag/utils/filetagcache.cpp | 4 ++++ .../server/serverplugin-tagdaemon/tagdaemon.cpp | 2 ++ .../server/serverplugin-tagdaemon/tagmanagerdbus.h | 1 + 7 files changed, 30 insertions(+), 6 deletions(-) diff --git a/assets/dbus/org.deepin.filemanager.server.TagManager.xml b/assets/dbus/org.deepin.filemanager.server.TagManager.xml index 4cf0c19777..0d4851e3d8 100644 --- a/assets/dbus/org.deepin.filemanager.server.TagManager.xml +++ b/assets/dbus/org.deepin.filemanager.server.TagManager.xml @@ -1,6 +1,8 @@ + + diff --git a/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.cpp b/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.cpp index 429df62d80..16209bb0a4 100644 --- a/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.cpp +++ b/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.cpp @@ -29,6 +29,7 @@ void TagProxyHandlePrivate::initConnection() { dbusWatcher.reset(new QDBusServiceWatcher(kTagService, QDBusConnection::sessionBus())); q->connect(dbusWatcher.data(), &QDBusServiceWatcher::serviceRegistered, q, [this] { + qInfo() << "serviceRegistered: " << kTagService; connectToDBus(); }); q->connect(dbusWatcher.data(), &QDBusServiceWatcher::serviceUnregistered, q, [] { @@ -41,8 +42,8 @@ void TagProxyHandlePrivate::initConnection() void TagProxyHandlePrivate::connectToDBus() { disconnCurrentConnections(); - auto ptr = tagDBusInterface.data(); + connections << q->connect(ptr, &TagManagerDBusInterface::TagsServiceReady, q, &TagProxyHandle::tagServiceRegistered); connections << q->connect(ptr, &TagManagerDBusInterface::NewTagsAdded, q, &TagProxyHandle::newTagsAdded); connections << q->connect(ptr, &TagManagerDBusInterface::TagsDeleted, q, &TagProxyHandle::tagsDeleted); connections << q->connect(ptr, &TagManagerDBusInterface::TagsColorChanged, q, &TagProxyHandle::tagsColorChanged); @@ -85,6 +86,11 @@ TagProxyHandle *TagProxyHandle::instance() return &ins; } +bool TagProxyHandle::isValid() +{ + return d->isDBusRuning(); +} + QVariantMap TagProxyHandle::getAllTags() { auto &&reply = d->tagDBusInterface->Query(int(QueryOpts::kTags)); @@ -138,8 +144,10 @@ QVariantHash TagProxyHandle::getAllFileWithTags() { auto &&reply = d->tagDBusInterface->Query(int(QueryOpts::kFilesWithTags)); reply.waitForFinished(); - if (!reply.isValid()) + if (!reply.isValid()) { + qWarning() << "getAllFileWithTags failed :" << reply.error(); return {}; + } const auto &data = d->parseDBusVariant(reply.value()); return data.toHash(); } diff --git a/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.h b/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.h index 13f706aa78..02fdac4b24 100644 --- a/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.h +++ b/src/plugins/common/dfmplugin-tag/data/tagproxyhandle.h @@ -40,6 +40,7 @@ class TagProxyHandle : public QObject bool connectToService(); + bool isValid(); Q_SIGNALS: void filesTagged(const QVariantMap &fileAndTags); void filesUntagged(const QVariantMap &fileAndTags); @@ -47,6 +48,7 @@ class TagProxyHandle : public QObject void tagsColorChanged(const QVariantMap &oldAndNew); void tagsDeleted(const QStringList &tags); void tagsNameChanged(const QVariantMap &oldAndNew); + void tagServiceRegistered(); private: explicit TagProxyHandle(QObject *parent = nullptr); diff --git a/src/plugins/common/dfmplugin-tag/tag.cpp b/src/plugins/common/dfmplugin-tag/tag.cpp index 8b30847b6d..5f5237215d 100644 --- a/src/plugins/common/dfmplugin-tag/tag.cpp +++ b/src/plugins/common/dfmplugin-tag/tag.cpp @@ -55,10 +55,13 @@ void Tag::initialize() else connect(dpfListener, &DPF_NAMESPACE::Listener::pluginsStarted, this, &Tag::onAllPluginsStarted, Qt::DirectConnection); - TagManager::instance(); - if (!TagProxyHandleIns->connectToService()) - qWarning() << "Cannot connect to TagManager!"; - emit FileTagCacheController::instance().initLoadTagInfos(); + connect(TagProxyHandleIns, &TagProxyHandle::tagServiceRegistered, [] { + emit FileTagCacheController::instance().initLoadTagInfos(); + }); + + if (!TagProxyHandleIns->connectToService()) { + qWarning() << "Cannot connect to TagManagerDBus!"; + } bindEvents(); followEvents(); @@ -67,6 +70,8 @@ void Tag::initialize() bool Tag::start() { + emit FileTagCacheController::instance().initLoadTagInfos(); + CustomViewExtensionView func { Tag::createTagWidget }; dpfSlotChannel->push("dfmplugin_detailspace", "slot_ViewExtension_Register", func, -1); dpfSlotChannel->push("dfmplugin_propertydialog", "slot_ViewExtension_Register", func, "Tag", 0); diff --git a/src/plugins/common/dfmplugin-tag/utils/filetagcache.cpp b/src/plugins/common/dfmplugin-tag/utils/filetagcache.cpp index 073cd434aa..9827ef4191 100644 --- a/src/plugins/common/dfmplugin-tag/utils/filetagcache.cpp +++ b/src/plugins/common/dfmplugin-tag/utils/filetagcache.cpp @@ -9,6 +9,7 @@ #include #include +#include DPTAG_USE_NAMESPACE @@ -81,7 +82,10 @@ FileTagCache &FileTagCache::instance() void FileTagCache::loadFileTagsFromDatabase() { + qInfo() << "Start initilize FileTagCache"; // 加载数据库所有文件标记,和标记属性到缓存 + if (!TagProxyHandle::instance()->isValid()) + qWarning() << "tagService is inValid"; d->fileTagsCache = TagProxyHandle::instance()->getAllFileWithTags(); const auto &tagsColor = TagProxyHandle::instance()->getAllTags(); auto it = tagsColor.begin(); diff --git a/src/plugins/server/serverplugin-tagdaemon/tagdaemon.cpp b/src/plugins/server/serverplugin-tagdaemon/tagdaemon.cpp index ffbcd5d968..8025002954 100644 --- a/src/plugins/server/serverplugin-tagdaemon/tagdaemon.cpp +++ b/src/plugins/server/serverplugin-tagdaemon/tagdaemon.cpp @@ -22,6 +22,8 @@ void TagDBusWorker::launchService() tagManager.data())) { qWarning("Cannot register the \"/org/deepin/filemanager/server/TagManager\" object.\n"); tagManager.reset(nullptr); + } else { + tagManager->TagsServiceReady(); } qInfo() << "Init DBus TagManager end"; } diff --git a/src/plugins/server/serverplugin-tagdaemon/tagmanagerdbus.h b/src/plugins/server/serverplugin-tagdaemon/tagmanagerdbus.h index c03dcebdc8..954fc56214 100644 --- a/src/plugins/server/serverplugin-tagdaemon/tagmanagerdbus.h +++ b/src/plugins/server/serverplugin-tagdaemon/tagmanagerdbus.h @@ -25,6 +25,7 @@ public Q_SLOTS: bool Update(int opt, const QVariantMap value); Q_SIGNALS: + void TagsServiceReady(); void NewTagsAdded(const QVariantMap &tags); void TagsDeleted(const QStringList &tags); void TagsColorChanged(const QVariantMap &oldAndNew);