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 | |
12 | namespace KHC { |
13 | |
14 | class Formatter; |
15 | class SearchEngine; |
16 | class View; |
17 | class SearchHandler; |
18 | |
19 | class 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 | |
61 | class 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 | |