1
2#ifndef KHC_SEARCHENGINE_H
3#define KHC_SEARCHENGINE_H
4
5#include <QObject>
6
7#include <KProcess>
8#include <kio/job.h>
9
10#include "docentrytraverser.h"
11
12namespace KHC {
13
14class Formatter;
15class SearchEngine;
16class View;
17class SearchHandler;
18
19class SearchTraverser : public QObject, public DocEntryTraverser
20{
21 Q_OBJECT
22 public:
23 SearchTraverser( SearchEngine *engine, int level );
24 ~SearchTraverser();
25
26 void process( DocEntry * );
27
28 void startProcess( DocEntry * );
29
30 DocEntryTraverser *createChild( DocEntry * );
31
32 DocEntryTraverser *parentTraverser();
33
34 void deleteTraverser();
35
36 void finishTraversal();
37
38 protected:
39 void connectHandler( SearchHandler *handler );
40 void disconnectHandler( SearchHandler *handler );
41
42 protected Q_SLOTS:
43 void showSearchResult( SearchHandler *, DocEntry *, const QString &result );
44 void showSearchError( SearchHandler *, DocEntry *, const QString &error );
45
46 private:
47 const int mMaxLevel;
48
49 SearchEngine *mEngine;
50 int mLevel;
51
52 DocEntry *mEntry;
53 QString mJobData;
54
55 QString mResult;
56
57 QMap<SearchHandler *, int> mConnectCount;
58};
59
60
61class SearchEngine : public QObject
62{
63 Q_OBJECT
64 public:
65 enum Operation { And, Or };
66
67 SearchEngine( View * );
68 ~SearchEngine();
69
70 bool initSearchHandlers();
71
72 bool search( const QString & words, const QString & method = "and", int matches = 5,
73 const QString & scope = "" );
74
75 Formatter *formatter() const;
76 View *view() const;
77
78 QString substituteSearchQuery( const QString &query );
79
80 static QString substituteSearchQuery( const QString &query,
81 const QString &identifier, const QStringList &words, int maxResults,
82 Operation operation, const QString &lang, const QString& binary );
83
84 void finishSearch();
85
86 /**
87 Append error message to error log.
88 */
89 void logError( DocEntry *entry, const QString &msg );
90
91 /**
92 Return error log.
93 */
94 QString errorLog() const;
95
96 bool isRunning() const;
97
98 SearchHandler *handler( const QString &documentType ) const;
99
100 QStringList words() const;
101 int maxResults() const;
102 Operation operation() const;
103
104 bool canSearch( DocEntry * );
105 bool needsIndex( DocEntry * );
106
107 Q_SIGNALS:
108 void searchFinished();
109
110 protected Q_SLOTS:
111 void searchExited(int, QProcess::ExitStatus);
112
113 protected:
114 void processSearchQueue();
115
116 private:
117 KProcess *mProc;
118 bool mSearchRunning;
119 QString mSearchResult;
120
121 QString mStderr;
122
123 View *mView;
124
125 QString mWords;
126 int mMatches;
127 QString mMethod;
128 QString mLang;
129 QString mScope;
130
131 QStringList mWordList;
132 int mMaxResults;
133 Operation mOperation;
134
135 DocEntryTraverser *mRootTraverser;
136
137 QMap<QString, SearchHandler *> mHandlers;
138};
139
140}
141
142#endif //KHC_SEARCHENGINE_H
143// vim:ts=2:sw=2:et
144