Skip to content

Commit

Permalink
fix: [tag-server] init filecache failed
Browse files Browse the repository at this point in the history
add signal make sure init filecache after int tag-server

Log: as des
Bug: https://pms.uniontech.com/bug-view-209607.html
  • Loading branch information
pppanghu77 authored and deepin-bot[bot] committed Jul 17, 2023
1 parent bda8089 commit 27faa6a
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 6 deletions.
2 changes: 2 additions & 0 deletions assets/dbus/org.deepin.filemanager.server.TagManager.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.deepin.filemanager.server.TagManager">
<signal name="TagsServiceReady">
</signal>
<signal name="NewTagsAdded">
<arg name="tags" type="a{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
Expand Down
12 changes: 10 additions & 2 deletions src/plugins/common/dfmplugin-tag/data/tagproxyhandle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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, [] {
Expand All @@ -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);
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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();
}
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/common/dfmplugin-tag/data/tagproxyhandle.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,15 @@ class TagProxyHandle : public QObject

bool connectToService();

bool isValid();
Q_SIGNALS:
void filesTagged(const QVariantMap &fileAndTags);
void filesUntagged(const QVariantMap &fileAndTags);
void newTagsAdded(const QVariantMap &tags);
void tagsColorChanged(const QVariantMap &oldAndNew);
void tagsDeleted(const QStringList &tags);
void tagsNameChanged(const QVariantMap &oldAndNew);
void tagServiceRegistered();

private:
explicit TagProxyHandle(QObject *parent = nullptr);
Expand Down
13 changes: 9 additions & 4 deletions src/plugins/common/dfmplugin-tag/tag.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions src/plugins/common/dfmplugin-tag/utils/filetagcache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include <QVariant>
#include <QColor>
#include <QDebug>

DPTAG_USE_NAMESPACE

Expand Down Expand Up @@ -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();
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/server/serverplugin-tagdaemon/tagdaemon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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";
}
Expand Down
1 change: 1 addition & 0 deletions src/plugins/server/serverplugin-tagdaemon/tagmanagerdbus.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 27faa6a

Please sign in to comment.