添加远程调用流程,用于智能数据管理获取文件创建事件
indexupdater和pendingupdatequeue增加信号用于线程间通信 新增RemoteFileEventHelper类,用于管理replica实例
This commit is contained in:
parent
67ebd40a70
commit
877cd3f780
|
@ -111,7 +111,7 @@ set(LIBUKUI_SEARCH_SRC
|
||||||
icon-loader.cpp icon-loader.h
|
icon-loader.cpp icon-loader.h
|
||||||
data-collecter.cpp
|
data-collecter.cpp
|
||||||
data-collecter.h
|
data-collecter.h
|
||||||
|
remote-file-event-helper.cpp
|
||||||
)
|
)
|
||||||
qt5_generate_repc(LIBUKUI_SEARCH_SRC index/monitor.rep REPLICA)
|
qt5_generate_repc(LIBUKUI_SEARCH_SRC index/monitor.rep REPLICA)
|
||||||
set(QRC_FILES resource1.qrc)
|
set(QRC_FILES resource1.qrc)
|
||||||
|
@ -119,6 +119,8 @@ file(GLOB TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../translations/libukui-search/*.
|
||||||
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/libsearch/.qm)
|
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/libsearch/.qm)
|
||||||
qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
|
qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
|
||||||
|
|
||||||
|
qt5_generate_repc(LIBUKUI_SEARCH_SRC fileeventhandler.rep REPLICA)
|
||||||
|
|
||||||
add_library(${PROJECT_NAME} SHARED
|
add_library(${PROJECT_NAME} SHARED
|
||||||
${LIBUKUI_SEARCH_SRC}
|
${LIBUKUI_SEARCH_SRC}
|
||||||
${QRC_FILES}
|
${QRC_FILES}
|
||||||
|
@ -231,4 +233,4 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ukui-search-config.cmake
|
||||||
DESTINATION ${CMAKE_CONFIG_INSTALL_DIR})
|
DESTINATION ${CMAKE_CONFIG_INSTALL_DIR})
|
||||||
if(BUILD_TEST)
|
if(BUILD_TEST)
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include <QtCore>
|
||||||
|
|
||||||
|
class FileEventHandler
|
||||||
|
{
|
||||||
|
SLOT(void handleFileEvent(int eventType, QString arg1, QString arg2))
|
||||||
|
}
|
|
@ -29,6 +29,7 @@
|
||||||
#include "compatible-define.h"
|
#include "compatible-define.h"
|
||||||
#include "index-status-recorder.h"
|
#include "index-status-recorder.h"
|
||||||
#include "ai-indexer.h"
|
#include "ai-indexer.h"
|
||||||
|
#include "pending-file-queue.h"
|
||||||
using namespace UkuiSearch;
|
using namespace UkuiSearch;
|
||||||
IndexUpdater::IndexUpdater(const QVector<PendingFile>& files,
|
IndexUpdater::IndexUpdater(const QVector<PendingFile>& files,
|
||||||
QAtomicInt& indexstop,
|
QAtomicInt& indexstop,
|
||||||
|
@ -41,6 +42,7 @@ IndexUpdater::IndexUpdater(const QVector<PendingFile>& files,
|
||||||
m_contentIndexOcrStop(&contentIndexOcrStop),
|
m_contentIndexOcrStop(&contentIndexOcrStop),
|
||||||
m_aiIndexStop(&aiIndexStop)
|
m_aiIndexStop(&aiIndexStop)
|
||||||
{
|
{
|
||||||
|
connect(this, &IndexUpdater::indexUpdated, PendingFileQueue::getInstance(), &PendingFileQueue::signalFileEvent);
|
||||||
}
|
}
|
||||||
void IndexUpdater::updateIndex()
|
void IndexUpdater::updateIndex()
|
||||||
{
|
{
|
||||||
|
@ -55,6 +57,11 @@ void IndexUpdater::updateIndex()
|
||||||
}
|
}
|
||||||
qDebug() << "===update basic index===";
|
qDebug() << "===update basic index===";
|
||||||
for(const PendingFile& file : m_cache) {
|
for(const PendingFile& file : m_cache) {
|
||||||
|
// notify ukui-idm
|
||||||
|
if (file.isCreated()) {
|
||||||
|
Q_EMIT indexUpdated(1, file.path(), nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
if(file.shouldRemoveIndex()) {
|
if(file.shouldRemoveIndex()) {
|
||||||
qDebug() << "| remove:" <<file.path();
|
qDebug() << "| remove:" <<file.path();
|
||||||
basicDb.removeDocument(file.path());
|
basicDb.removeDocument(file.path());
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void done();
|
void done();
|
||||||
|
void indexUpdated(int eventType, const QString &arg1, const QString &arg2);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateIndex();
|
void updateIndex();
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#include "file-utils.h"
|
#include "file-utils.h"
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include "index-status-recorder.h"
|
#include "index-status-recorder.h"
|
||||||
|
#include "remote-file-event-helper.h"
|
||||||
|
|
||||||
using namespace UkuiSearch;
|
using namespace UkuiSearch;
|
||||||
static PendingFileQueue *global_instance_pending_file_queue = nullptr;
|
static PendingFileQueue *global_instance_pending_file_queue = nullptr;
|
||||||
PendingFileQueue::PendingFileQueue(QObject *parent) : QThread(parent)
|
PendingFileQueue::PendingFileQueue(QObject *parent) : QThread(parent)
|
||||||
|
@ -38,6 +40,9 @@ PendingFileQueue::PendingFileQueue(QObject *parent) : QThread(parent)
|
||||||
m_cacheTimer->moveToThread(this);
|
m_cacheTimer->moveToThread(this);
|
||||||
m_minProcessTimer->moveToThread(this);
|
m_minProcessTimer->moveToThread(this);
|
||||||
|
|
||||||
|
m_fileEventHelper = new RemoteFileEventHelper;
|
||||||
|
m_fileEventHelper->moveToThread(this);
|
||||||
|
|
||||||
// connect(this, &PendingFileQueue::cacheTimerStart, m_cacheTimer, f, Qt::DirectConnection);
|
// connect(this, &PendingFileQueue::cacheTimerStart, m_cacheTimer, f, Qt::DirectConnection);
|
||||||
// connect(this, &PendingFileQueue::minProcessTimerStart, m_minProcessTimer, f,Qt::DirectConnection);
|
// connect(this, &PendingFileQueue::minProcessTimerStart, m_minProcessTimer, f,Qt::DirectConnection);
|
||||||
connect(this, SIGNAL(cacheTimerStart()), m_cacheTimer, SLOT(start()));
|
connect(this, SIGNAL(cacheTimerStart()), m_cacheTimer, SLOT(start()));
|
||||||
|
@ -47,6 +52,8 @@ PendingFileQueue::PendingFileQueue(QObject *parent) : QThread(parent)
|
||||||
|
|
||||||
connect(m_cacheTimer, &QTimer::timeout, this, &PendingFileQueue::processCache, Qt::DirectConnection);
|
connect(m_cacheTimer, &QTimer::timeout, this, &PendingFileQueue::processCache, Qt::DirectConnection);
|
||||||
connect(m_minProcessTimer, &QTimer::timeout, this, &PendingFileQueue::processCache, Qt::DirectConnection);
|
connect(m_minProcessTimer, &QTimer::timeout, this, &PendingFileQueue::processCache, Qt::DirectConnection);
|
||||||
|
|
||||||
|
connect(this, &PendingFileQueue::signalFileEvent, m_fileEventHelper, &RemoteFileEventHelper::handleFileEventRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
PendingFileQueue *PendingFileQueue::getInstance(QObject *parent)
|
PendingFileQueue *PendingFileQueue::getInstance(QObject *parent)
|
||||||
|
@ -67,6 +74,11 @@ PendingFileQueue::~PendingFileQueue()
|
||||||
delete m_minProcessTimer;
|
delete m_minProcessTimer;
|
||||||
m_minProcessTimer = nullptr;
|
m_minProcessTimer = nullptr;
|
||||||
}
|
}
|
||||||
|
if(m_fileEventHelper) {
|
||||||
|
delete m_fileEventHelper;
|
||||||
|
m_fileEventHelper = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
global_instance_pending_file_queue = nullptr;
|
global_instance_pending_file_queue = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include "pending-file.h"
|
#include "pending-file.h"
|
||||||
|
|
||||||
|
class RemoteFileEventHelper;
|
||||||
|
|
||||||
namespace UkuiSearch {
|
namespace UkuiSearch {
|
||||||
class PendingFileQueue : public QThread
|
class PendingFileQueue : public QThread
|
||||||
{
|
{
|
||||||
|
@ -51,6 +53,8 @@ Q_SIGNALS:
|
||||||
void timerStop();
|
void timerStop();
|
||||||
|
|
||||||
void filesUpdate(const QVector<PendingFile>&);
|
void filesUpdate(const QVector<PendingFile>&);
|
||||||
|
|
||||||
|
void signalFileEvent(int eventType, const QString &arg1, const QString &arg2);
|
||||||
private:
|
private:
|
||||||
void processCache();
|
void processCache();
|
||||||
explicit PendingFileQueue(QObject *parent = nullptr);
|
explicit PendingFileQueue(QObject *parent = nullptr);
|
||||||
|
@ -61,6 +65,7 @@ private:
|
||||||
QThread *m_timerThread = nullptr;
|
QThread *m_timerThread = nullptr;
|
||||||
int m_enqueuetimes = 0;
|
int m_enqueuetimes = 0;
|
||||||
|
|
||||||
|
RemoteFileEventHelper *m_fileEventHelper = nullptr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif // PENDINGFILEQUEUE_H
|
#endif // PENDINGFILEQUEUE_H
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
#include "remote-file-event-helper.h"
|
||||||
|
#include "rep_fileeventhandler_replica.h"
|
||||||
|
|
||||||
|
#include <QtRemoteObjects>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
RemoteFileEventHelper::RemoteFileEventHelper(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
setupConnections();
|
||||||
|
}
|
||||||
|
|
||||||
|
RemoteFileEventHelper::~RemoteFileEventHelper()
|
||||||
|
{
|
||||||
|
delete m_fileEventHandlerIface;
|
||||||
|
delete m_remoteNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoteFileEventHelper::setupConnections()
|
||||||
|
{
|
||||||
|
m_remoteNode = new QRemoteObjectNode;
|
||||||
|
m_remoteNode->connectToNode(nodeUrl());
|
||||||
|
m_fileEventHandlerIface = m_remoteNode->acquire<FileEventHandlerReplica>();
|
||||||
|
qDebug() << "connect handle" << m_fileEventHandlerIface;
|
||||||
|
connect(m_fileEventHandlerIface, &QRemoteObjectReplica::initialized, this, [=]{
|
||||||
|
qDebug() << "initilized" << m_fileEventHandlerIface;
|
||||||
|
});
|
||||||
|
connect(m_fileEventHandlerIface, &QRemoteObjectReplica::stateChanged, this, [=](QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState){
|
||||||
|
qDebug() << "state changed" << state << oldState << m_fileEventHandlerIface;
|
||||||
|
if (state == QRemoteObjectReplica::Suspect) {
|
||||||
|
qDebug() << "try reconnect";
|
||||||
|
m_fileEventHandlerIface->deleteLater();
|
||||||
|
m_remoteNode->deleteLater();
|
||||||
|
setupConnections();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(this, &RemoteFileEventHelper::handleFileEventRequest, m_fileEventHandlerIface, [=](int type, const QString &arg1, const QString &arg2){
|
||||||
|
qDebug() << type << arg1 << arg2 << m_fileEventHandlerIface;
|
||||||
|
if (m_fileEventHandlerIface->state() == QRemoteObjectReplica::Valid)
|
||||||
|
m_fileEventHandlerIface->handleFileEvent(type, arg1, arg2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl RemoteFileEventHelper::nodeUrl()
|
||||||
|
{
|
||||||
|
QString displayEnv = (qgetenv("XDG_SESSION_TYPE") == "wayland") ? QLatin1String("WAYLAND_DISPLAY") : QLatin1String("DISPLAY");
|
||||||
|
QString display(qgetenv(displayEnv.toUtf8().data()));
|
||||||
|
return QUrl(QStringLiteral("local:ukui-idm-") + QString(qgetenv("USER")) + display);
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef REMOTEFILEEVENTHELPER_H
|
||||||
|
#define REMOTEFILEEVENTHELPER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QUrl>
|
||||||
|
|
||||||
|
class QRemoteObjectNode;
|
||||||
|
class FileEventHandlerReplica;
|
||||||
|
|
||||||
|
class RemoteFileEventHelper : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit RemoteFileEventHelper(QObject *parent = nullptr);
|
||||||
|
~RemoteFileEventHelper();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void handleFileEventRequest(int type, const QString &arg1, const QString &arg2);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupConnections();
|
||||||
|
static QUrl nodeUrl();
|
||||||
|
|
||||||
|
QRemoteObjectNode *m_remoteNode = nullptr;
|
||||||
|
FileEventHandlerReplica *m_fileEventHandlerIface = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // REMOTEFILEEVENTHELPER_H
|
Loading…
Reference in New Issue