ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/WinXPFAQPoll/Poller.cpp
(Generate patch)

Comparing trunk/WinXPFAQPoll/Poller.cpp (file contents):
Revision 122 by douglas, 2003-04-01T20:21:47-08:00 vs.
Revision 123 by douglas, 2003-04-02T18:10:51-08:00

# Line 19 | Line 19 | Poller::Poller()
19          }
20   }
21  
22 + Poller::~Poller()
23 + {
24 +        if (!nodelete)
25 +        {
26 +                session->expunge();
27 +        }
28 + }
29 +
30   void Poller::poll(bool nodelete, const string& file)
31   {
32          this->nodelete = nodelete;
# Line 37 | Line 45 | void Poller::load()
45          ifstream fin(file.c_str());
46          if (!fin.is_open())
47          {
48 +                fin.clear();
49 +
50                  ofstream fout(file.c_str());
51  
52                  fout << "_find_\n"
# Line 63 | Line 73 | void Poller::load()
73                  fin.open(file.c_str());
74          }
75  
76 <        do
76 >        while (fin.good())
77          {
78                  enum { FIND, HELP, IMPROVE } type;
79                  string vote;
80                  unsigned count;
81                  string text;
82  
83 <                getline(fin, vote, '=');
83 >                fin.peek() != '_' ? getline(fin, vote, '=') : getline(fin, vote);
84                  if (debug) cerr << "vote = " << vote << "\n";
85  
86                  if (vote == "_find_")
# Line 98 | Line 108 | void Poller::load()
108                          fin.get();
109                  }
110  
111 +                fin.peek();
112 +
113                  switch (type)
114                  {
115                  case FIND:
# Line 184 | Line 196 | void Poller::load()
196                          break;
197                  }
198          }
187        while (fin.good());
199  
200          fin.close();
201   }
# Line 244 | Line 255 | void Poller::ballots()
255          stringstream search;
256          search << session->search(string("ALL HEADER X-Mailer \"WinXPFAQPoll 1.0 ")
257                  + "(Perl)\" SUBJECT \"Windows XP FAQ | Poll Ballot\" UNDELETED FROM \""
258 <                + "Windows XP FAQ | Poll\" HEADER \"X-WinXPFAQPoll-Post-Host\" * HEADE"
248 <                + "R \"X-WinXPFAQPoll-Post-Agent\" *");
258 >                + "Windows XP FAQ | Poll\"");
259  
260 <        string junk;
261 <
252 <        getline(search, junk, ' ');
253 <        getline(search, junk, ' ');
260 >        search.ignore(9);
261 >        search.peek();
262  
263          while (search.good())
264          {
265                  unsigned message;
266                  search >> message;
259                search.get();
267  
268                  if (debug) cerr << "message = " << message << "\n";
269                  messages.push(message);
270 +
271 +                search.get();
272 +                search.peek();
273          }
274  
275          if (!messages.empty())
# Line 269 | Line 279 | void Poller::ballots()
279  
280                  ballot(message);
281          }
272
273        if (!nodelete)
274        {
275                session->expunge();
276        }
282   }
283  
284   void Poller::ballot(unsigned message)
285   {
286          cout << "Checking message: " << message << "..." << flush;
287  
288 <        char number[32 + 1];
289 <        sprintf(number, "%u", message);
288 >        ostringstream number;
289 >        number << message;
290  
291          stringstream buffer;
292  
293 <        buffer << session->fetch(string(number) + " BODY.PEEK[2]");
293 >        buffer << session->fetch(number.str() + " BODY.PEEK[2]");
294  
295          if (session->successful())
296          {
297 <                bool approved = session->fetch(string(number) + " FLAGS").find("\\Flag"
298 <                        + string("ged")) != string::npos;
297 >                buffer.ignore(string::npos, '\n');
298 >
299 >                bool approved = session->fetch(number.str() + " FLAGS").find("\\Flagge"
300 >                        + string("d")) != string::npos;
301  
302 <                do
302 >                while (buffer.peek() != '\n' && buffer.good())
303                  {
304                          enum { FIND, HELP, IMPROVE } type;
305                          string vote;
# Line 316 | Line 323 | void Poller::ballot(unsigned message)
323                                  continue;
324                          }
325  
326 +                        buffer.peek();
327 +
328                          switch (type)
329                          {
330                          case FIND:
# Line 347 | Line 356 | void Poller::ballot(unsigned message)
356                                  {
357                                          find.other++;
358  
359 <                                        //
359 >                                        string text;
360 >                                        getline(buffer, text);
361 >
362 >                                        if (approved)
363 >                                        {
364 >                                                find.approved.push_back(text);
365 >                                        }
366 >                                        else
367 >                                        {
368 >                                                find.approve.push_back(text);
369 >
370 >                                                submit("find", text);
371 >                                        }
372                                  }
373                                  break;
374                          case HELP:
# Line 385 | Line 406 | void Poller::ballot(unsigned message)
406                                  {
407                                          improve.suggest++;
408  
409 <                                        //
409 >                                        string text;
410 >                                        getline(buffer, text);
411 >
412 >                                        if (approved)
413 >                                        {
414 >                                                improve.approved.push_back(text);
415 >                                        }
416 >                                        else
417 >                                        {
418 >                                                improve.approve.push_back(text);
419 >
420 >                                                submit("improve", text);
421 >                                        }
422                                  }
423                                  break;
424                          }
425                  }
426 <                while (buffer.good());
426 >
427 >                session->store(number.str() + " +FLAGS (\\Deleted)");
428  
429                  cout << "done.\n";
430          }
# Line 408 | Line 442 | void Poller::ballot(unsigned message)
442          }
443   }
444  
445 < void Poller::approvals()
445 > void Poller::submit(const string& type, const string& text)
446   {
447          //
448 + }
449  
450 <        if (!nodelete)
451 <        {
452 <                session->expunge();
418 <        }
450 > void Poller::approvals()
451 > {
452 >        //
453   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines