ukui-search/libsearch/searchinterface/search-controller.h

76 lines
2.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef SEARCHCONTROLLER_H
#define SEARCHCONTROLLER_H
#include <QStringList>
#include <memory>
#include "data-queue.h"
#include "common-defines.h"
//todo: url parser?
namespace UkuiSearch {
class UkuiSearchTask;
class ResultItem;
class SearchControllerPrivate;
/*
*搜索控制用于传递搜索条件搜索唯一ID以及管理队列等。
*为树形结构,所有子节点含有智能指针指向父节点。
*只要有插件还在使用资源,其对应的子节点以及通向根节点上所有的实例就不会被释放,析构时,从下往上由智能指针自动析构
*/
class SearchController
{
friend class SearchControllerPrivate;
public:
explicit SearchController(std::shared_ptr<SearchController> parent = nullptr);
SearchController(SearchController &) = delete;
SearchController &operator =(const SearchController &) = delete;
~SearchController();
DataQueue<ResultItem>* refreshDataqueue();
size_t refreshSearchId();
DataQueue<ResultItem>* initDataQueue();
void stop();
void addSearchDir(QString &path);
void setRecurse(bool recurse = true);
void addKeyword(QString &keyword);
void setActiveKeywordSegmentation(bool active);
void addFileLabel(QString &label);
void setOnlySearchFile(bool onlySearchFile);
void setOnlySearchDir(bool onlySearchDir);
void setSearchOnlineApps(bool searchOnlineApps);
//以上方法插件请不要调用
//以下方法插件可以调用
size_t getCurrentSearchId();
DataQueue<ResultItem>* getDataQueue();
ResultDataTypes getResultDataType(SearchType searchType);
QStringList getCustomResultDataType(QString customSearchType);
bool beginSearchIdCheck(size_t searchId);
void finishSearchIdCheck();
QStringList getSearchDir();
bool isRecurse();
QStringList getKeyword();
bool isKeywordSegmentationActived();
QStringList getFileLabel();
bool isSearchFileOnly();
bool isSearchDirOnly();
bool isSearchOnlineApps();
void clearAllConditions();
void clearKeyWords();
void clearSearchDir();
void clearFileLabel();
void setPagination(unsigned int first, unsigned int maxResults);
unsigned int first() const;
unsigned int maxResults() const;
bool setResultDataType(SearchType searchType, ResultDataTypes dataType);
bool setCustomResultDataType(QString customSearchType, QStringList dataType);
private:
std::shared_ptr<SearchController> m_parent = nullptr;
SearchControllerPrivate *d = nullptr;
};
}
#endif // SEARCHCONTROLLER_H