1 /*
2 ** Copyright 2003, Double Precision Inc.
3 **
4 ** See COPYING for distribution information.
5 */
6 #ifndef libmail_nntpxpat_H
7 #define libmail_nntpxpat_H
8 
9 #include "libmail_config.h"
10 
11 #include "nntp.H"
12 #include "nntpgroup.H"
13 #include "search.H"
14 
15 #include <string>
16 
17 LIBMAIL_START
18 
19 //
20 // nntp::Task wants a mail::callback, but we have a mail::search::callback
21 //
22 
23 class nntp::XpatTaskCallback : public mail::callback {
24 public:
25 	searchCallback *realCallback;
26 
27 	XpatTaskCallback(searchCallback *);
28 	~XpatTaskCallback();
29 
30 	void success(std::string message);
31 	void fail(std::string message);
32 
33 	void reportProgress(size_t bytesCompleted,
34 			    size_t bytesEstimatedTotal,
35 
36 			    size_t messagesCompleted,
37 			    size_t messagesEstimatedTotal);
38 };
39 
40 class mail::nntp::XpatTask : public mail::nntp::GroupTask {
41 
42 	XpatTaskCallback *cb;
43 
44 	void (mail::nntp::XpatTask::*response_func)(const char *);
45 
46 	std::string hdr;
47 	std::string srch;
48 	bool searchNot;
49 
50 	searchParams::Scope searchScope;
51 	size_t rangeLo, rangeHi;
52 
53 public:
54 	XpatTask(XpatTaskCallback *, nntp &, std::string,
55 		 std::string, std::string, bool, searchParams::Scope,
56 		 size_t, size_t);
57 	~XpatTask();
58 
59 	void selectedGroup(msgnum_t estimatedCount,
60 			   msgnum_t loArticleCount,
61 			   msgnum_t hiArticleCount);
62 	void processGroup(const char *);
63 
64 
65 private:
66 	void processStatusResponse(const char *);
67 
68 	void processXpatResponse(const char *);
69 
70 	void done(const char *);
71 
72 	std::vector<mail::nntp::nntpMessageInfo>::iterator lastIdxMsgNum;
73 };
74 
75 LIBMAIL_END
76 
77 #endif
78