1 |
// Windows XP FAQ Poll |
2 |
// |
3 |
// Douglas Thrift |
4 |
// |
5 |
// Poller.cpp |
6 |
|
7 |
#include "Poller.h" |
8 |
|
9 |
Poller::Poller() |
10 |
{ |
11 |
string mailbox = session->list("\"\" \"" + account.getMailbox() + "\""); |
12 |
|
13 |
if (mailbox.find(account.getMailbox()) == string::npos) |
14 |
{ |
15 |
cerr << program << ": Mailbox does not exist: " << account.getMailbox() |
16 |
<< "\n"; |
17 |
|
18 |
exit(1); |
19 |
} |
20 |
} |
21 |
|
22 |
void Poller::poll(bool nodelete, const string& file) |
23 |
{ |
24 |
this->nodelete = nodelete; |
25 |
this->file = file; |
26 |
|
27 |
load(); |
28 |
|
29 |
// |
30 |
|
31 |
// save(); |
32 |
} |
33 |
|
34 |
void Poller::load() |
35 |
{ |
36 |
ifstream fin(file.c_str()); |
37 |
if (!fin.is_open()) |
38 |
{ |
39 |
ofstream fout(file.c_str()); |
40 |
|
41 |
fout << "_find_\n" |
42 |
<< "reply=0\n" |
43 |
<< "news=0\n" |
44 |
<< "sig=0\n" |
45 |
<< "search=0\n" |
46 |
<< "link=0\n" |
47 |
<< "browse=0\n" |
48 |
<< "other=0\n" |
49 |
<< "_help_\n" |
50 |
<< "solved=0\n" |
51 |
<< "note=0\n" |
52 |
<< "link=0\n" |
53 |
<< "news=0\n" |
54 |
<< "lazy=0\n" |
55 |
<< "_improve_\n" |
56 |
<< "nothing=0\n" |
57 |
<< "links=0\n" |
58 |
<< "suggest=0\n"; |
59 |
|
60 |
fout.close(); |
61 |
|
62 |
fin.open(file.c_str()); |
63 |
} |
64 |
|
65 |
do |
66 |
{ |
67 |
enum { FIND, HELP, IMPROVE } type; |
68 |
string vote; |
69 |
unsigned count; |
70 |
string text; |
71 |
|
72 |
getline(fin, vote, '='); |
73 |
if (debug) cerr << "vote = " << vote << "\n"; |
74 |
|
75 |
if (vote == "_find_") |
76 |
{ |
77 |
type = FIND; |
78 |
continue; |
79 |
} |
80 |
else if (vote == "_help_") |
81 |
{ |
82 |
type = HELP; |
83 |
continue; |
84 |
} |
85 |
else if (vote == "_improve_") |
86 |
{ |
87 |
type = IMPROVE; |
88 |
continue; |
89 |
} |
90 |
else if (vote == "approved" || vote == "approve") |
91 |
{ |
92 |
getline(fin, text); |
93 |
} |
94 |
else |
95 |
{ |
96 |
fin >> count; |
97 |
fin.get(); |
98 |
} |
99 |
|
100 |
switch (type) |
101 |
{ |
102 |
case FIND: |
103 |
if (vote == "reply") |
104 |
{ |
105 |
find.reply = count; |
106 |
} |
107 |
else if (vote == "news") |
108 |
{ |
109 |
find.news = count; |
110 |
} |
111 |
else if (vote == "sig") |
112 |
{ |
113 |
find.sig = count; |
114 |
} |
115 |
else if (vote == "search") |
116 |
{ |
117 |
find.search = count; |
118 |
} |
119 |
else if (vote == "link") |
120 |
{ |
121 |
find.link = count; |
122 |
} |
123 |
else if (vote == "browse") |
124 |
{ |
125 |
find.browse = count; |
126 |
} |
127 |
else if (vote == "other") |
128 |
{ |
129 |
find.other = count; |
130 |
} |
131 |
else if (vote == "approved") |
132 |
{ |
133 |
find.approved.push_back(text); |
134 |
} |
135 |
else if (vote == "approve") |
136 |
{ |
137 |
find.approve.push_back(text); |
138 |
} |
139 |
break; |
140 |
case HELP: |
141 |
if (vote == "solved") |
142 |
{ |
143 |
help.solved = count; |
144 |
} |
145 |
else if (vote == "note") |
146 |
{ |
147 |
help.note = count; |
148 |
} |
149 |
else if (vote == "link") |
150 |
{ |
151 |
help.link = count; |
152 |
} |
153 |
else if (vote == "news") |
154 |
{ |
155 |
help.news = count; |
156 |
} |
157 |
else if (vote == "lazy") |
158 |
{ |
159 |
help.lazy = count; |
160 |
} |
161 |
break; |
162 |
case IMPROVE: |
163 |
if (vote == "nothing") |
164 |
{ |
165 |
improve.nothing = count; |
166 |
} |
167 |
else if (vote == "links") |
168 |
{ |
169 |
improve.links = count; |
170 |
} |
171 |
else if (vote == "suggest") |
172 |
{ |
173 |
improve.suggest = count; |
174 |
} |
175 |
else if (vote == "approved") |
176 |
{ |
177 |
improve.approved.push_back(text); |
178 |
} |
179 |
else if (vote == "approve") |
180 |
{ |
181 |
improve.approve.push_back(text); |
182 |
} |
183 |
break; |
184 |
} |
185 |
} |
186 |
while (fin.good()); |
187 |
|
188 |
fin.close(); |
189 |
} |
190 |
|
191 |
void Poller::save() |
192 |
{ |
193 |
ofstream fout(file.c_str()); |
194 |
|
195 |
// |
196 |
|
197 |
fout.close(); |
198 |
} |