forked from openkylin/ukui-search
174 lines
5.0 KiB
C++
174 lines
5.0 KiB
C++
/*
|
||
* Copyright (C) 2022, 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 <https://www.gnu.org/licenses/>.
|
||
*
|
||
* Authors: iaom <zhangpengfei@kylinos.cn>
|
||
*
|
||
*/
|
||
#ifndef MONITOR_H
|
||
#define MONITOR_H
|
||
|
||
#include <QObject>
|
||
#include "index-scheduler.h"
|
||
#include "database.h"
|
||
namespace UkuiSearch {
|
||
/**
|
||
* @brief The Monitor class
|
||
* 用于监控索引状态
|
||
* 为qml
|
||
*/
|
||
class Monitor : public QObject
|
||
{
|
||
Q_OBJECT
|
||
Q_PROPERTY(QStringList currentIndexPaths READ getCurrentIndexPaths)
|
||
Q_PROPERTY(QString indexState READ getIndexState NOTIFY indexStateChanged)
|
||
Q_PROPERTY(uint basicIndexSize READ getBasicIndexSize NOTIFY basicIndexSizeChange)
|
||
Q_PROPERTY(uint contentIndexSize READ getContentIndexSize NOTIFY contentIndexSizeChange)
|
||
Q_PROPERTY(uint ocrIndexSize READ getOCRIndexSize NOTIFY ocrIndexSizeChange)
|
||
Q_PROPERTY(uint basicIndexProgress READ getBasicIndexProgress NOTIFY basicIndexProgressUpdate)
|
||
Q_PROPERTY(uint contentIndexProgress READ getContentIndexProgress NOTIFY contentIndexProgressUpdate)
|
||
Q_PROPERTY(uint ocrIndexProgress READ getOCRIndexProgress NOTIFY ocrIndexProgressUpdate)
|
||
Q_PROPERTY(uint basicIndexDocNum READ getBasicIndexDocNum NOTIFY basicIndexDocNumUpdate)
|
||
Q_PROPERTY(uint contentIndexDocNum READ getContentIndexDocNum NOTIFY contentIndexDocNumUpdate)
|
||
|
||
public:
|
||
explicit Monitor(IndexScheduler* scheduler, QObject *parent = nullptr);
|
||
/**
|
||
* @brief getCurrentIndexPaths
|
||
* @return 当前索引的所有目录
|
||
*/
|
||
QStringList getCurrentIndexPaths();
|
||
/**
|
||
* @brief getIndexState
|
||
* @return 当前索引调度器的状态
|
||
*/
|
||
QString getIndexState();
|
||
/**
|
||
* @brief getBasicIndexSize
|
||
* @return 当前需要处理的基础索引数量
|
||
*/
|
||
uint getBasicIndexSize();
|
||
/**
|
||
* @brief getContentIndexSize
|
||
* @return 当前需要处理的内容索引数量
|
||
*/
|
||
uint getContentIndexSize();
|
||
/**
|
||
* @brief getOCRIndexSize
|
||
* @return 当前需要处理的OCR索引数量
|
||
*/
|
||
uint getOCRIndexSize();
|
||
/**
|
||
* @brief getBasicIndexProgress
|
||
* @return 基础索引进度
|
||
*/
|
||
uint getBasicIndexProgress();
|
||
/**
|
||
* @brief getContentIndexProgress
|
||
* @return 内容索引进度
|
||
*/
|
||
uint getContentIndexProgress();
|
||
/**
|
||
* @brief getOCRIndexProgress
|
||
* @return ocr索引进度
|
||
*/
|
||
uint getOCRIndexProgress();
|
||
/**
|
||
* @brief getBasicIndexDocNum
|
||
* @return 基础索引完成的总文档数
|
||
*/
|
||
uint getBasicIndexDocNum();
|
||
/**
|
||
* @brief getContentIndexDocNum
|
||
* @return 内容索引完成的总文档数
|
||
*/
|
||
uint getContentIndexDocNum();
|
||
|
||
Q_SIGNALS:
|
||
/**
|
||
* @brief indexStateChanged
|
||
* 索引调度器状态
|
||
*/
|
||
void indexStateChanged(QString);
|
||
/**
|
||
* @brief basicIndexSizeChange
|
||
* 基础索引进度
|
||
*/
|
||
void basicIndexSizeChange(uint);
|
||
/**
|
||
* @brief contentIndexSizeChange
|
||
* 内容索引总量(包括OCR索引)
|
||
*/
|
||
void contentIndexSizeChange(uint);
|
||
/**
|
||
* @brief ocrIndexSizeChange
|
||
* OCR索引总量
|
||
*/
|
||
void ocrIndexSizeChange(uint);
|
||
|
||
/**
|
||
* @brief basicIndexProgressUpdate
|
||
* 基础索引进度
|
||
*/
|
||
void basicIndexProgressUpdate(uint);
|
||
/**
|
||
* @brief contentIndexProgressUpdate
|
||
* 内容索引进度(包含OCR索引)
|
||
*/
|
||
void contentIndexProgressUpdate(uint);
|
||
/**
|
||
* @brief ocrIndexProgressUpdate
|
||
* OCR索引进度
|
||
*/
|
||
void ocrIndexProgressUpdate(uint);
|
||
/**
|
||
* @brief basicIndexDocNumUpdate
|
||
* 基础索引完成的总文档数
|
||
*/
|
||
void basicIndexDocNumUpdate(uint);
|
||
/**
|
||
* @brief contentIndexDocNumUpdate
|
||
* 内容索引完成的总文档数
|
||
*/
|
||
void contentIndexDocNumUpdate(uint);
|
||
/**
|
||
* @brief basicIndexDone
|
||
* 基础索引数据库建立完成或完成增量更新
|
||
*/
|
||
void basicIndexDone();
|
||
/**
|
||
* @brief contentIndexDone
|
||
* 内容索引数据库建立完成或完成增量更新
|
||
*/
|
||
void contentIndexDone();
|
||
|
||
private Q_SLOTS:
|
||
void onIndexStateChanged(IndexScheduler::IndexerState);
|
||
void processUpdate(IndexType type, uint all, uint finished);
|
||
|
||
private:
|
||
IndexScheduler *m_scheduler = nullptr;
|
||
Database m_basicDatabase;
|
||
Database m_contentDatabase;
|
||
uint m_basicIndexSize = 0;
|
||
uint m_contentIndexSize = 0;
|
||
uint m_ocrIndexSize = 0;
|
||
uint m_basicIndexProgress = 0;
|
||
uint m_contentIndexProgress = 0;
|
||
uint m_ocrIndexProgress = 0;
|
||
};
|
||
}
|
||
#endif // MONITOR_H
|