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