24 |
#include <sys/types.h> |
#include <sys/types.h> |
25 |
#include <sys/stat.h> |
#include <sys/stat.h> |
26 |
#include <time.h> |
#include <time.h> |
27 |
|
#include <mailutils/observer.h> |
28 |
|
|
29 |
const char *argp_program_version = "scan (" PACKAGE_STRING ")"; |
const char *argp_program_version = "scan (" PACKAGE_STRING ")"; |
30 |
static char doc[] = "GNU MH scan"; |
static char doc[] = "GNU MH scan"; |
73 |
|
|
74 |
static mh_msgset_t msgset; |
static mh_msgset_t msgset; |
75 |
|
|
76 |
|
static char *buffer; |
77 |
|
|
78 |
void list_message __P((mailbox_t mbox, message_t msg, size_t num, void *data)); |
void list_message __P((mailbox_t mbox, message_t msg, size_t num, void *data)); |
79 |
int scan __P((mailbox_t mbox)); |
void print_header __P((mailbox_t mbox)); |
80 |
|
void clear_screen __P((void)); |
81 |
|
|
82 |
static int |
static int |
83 |
opt_handler (int key, char *arg, void *unused) |
opt_handler (int key, char *arg, void *unused) |
132 |
return 0; |
return 0; |
133 |
} |
} |
134 |
|
|
135 |
|
/* Observable Action this is being call at every message discover. */ |
136 |
|
static int |
137 |
|
action (observer_t o, size_t type) |
138 |
|
{ |
139 |
|
static int counter; |
140 |
|
mailbox_t mbox; |
141 |
|
message_t msg = NULL; |
142 |
|
size_t num; |
143 |
|
|
144 |
|
if (type == MU_EVT_MESSAGE_ADD) |
145 |
|
{ |
146 |
|
mbox = observer_get_owner (o); |
147 |
|
counter++; |
148 |
|
mailbox_get_message (mbox, counter, &msg); |
149 |
|
mh_message_number (msg, &num); |
150 |
|
list_message (mbox, msg, num, NULL); |
151 |
|
} |
152 |
|
return 0; |
153 |
|
} |
154 |
|
|
155 |
int |
int |
156 |
main (int argc, char **argv) |
main (int argc, char **argv) |
157 |
{ |
{ |
158 |
int index; |
int index; |
159 |
mailbox_t mbox; |
mailbox_t mbox; |
160 |
|
int status; |
161 |
|
|
162 |
/* Native Language Support */ |
/* Native Language Support */ |
163 |
mu_init_nls (); |
mu_init_nls (); |
172 |
} |
} |
173 |
|
|
174 |
mbox = mh_open_folder (current_folder, 0); |
mbox = mh_open_folder (current_folder, 0); |
175 |
mh_msgset_parse (mbox, &msgset, argc - index, argv + index, "all"); |
|
176 |
|
buffer = xmalloc (width); |
177 |
|
|
178 |
|
argc -= index; |
179 |
|
argv += index; |
180 |
|
if ((argc == 0 || strcmp (argv[0], "all") == 0) && !reverse) |
181 |
|
{ |
182 |
|
/* Fast approach */ |
183 |
|
observer_t observer; |
184 |
|
observable_t observable; |
185 |
|
size_t total; |
186 |
|
|
187 |
|
print_header (mbox); |
188 |
|
|
189 |
|
observer_create (&observer, mbox); |
190 |
|
observer_set_action (observer, action, mbox); |
191 |
|
mailbox_get_observable (mbox, &observable); |
192 |
|
observable_attach (observable, MU_EVT_MESSAGE_ADD, observer); |
193 |
|
|
194 |
|
status = mailbox_scan (mbox, 1, &total); |
195 |
|
} |
196 |
|
else |
197 |
|
{ |
198 |
|
mh_msgset_parse (mbox, &msgset, argc, argv, "all"); |
199 |
|
|
200 |
if (reverse) |
if (reverse) |
201 |
mh_msgset_reverse (&msgset); |
mh_msgset_reverse (&msgset); |
202 |
|
|
203 |
return scan (mbox); |
print_header (mbox); |
204 |
|
status = mh_iterate (mbox, &msgset, list_message, NULL); |
205 |
|
} |
206 |
|
|
207 |
|
clear_screen (); |
208 |
|
mh_global_save_state (); |
209 |
|
|
210 |
|
return status; |
211 |
|
} |
212 |
|
|
213 |
|
void |
214 |
|
print_header (mailbox_t mbox) |
215 |
|
{ |
216 |
|
if (header) |
217 |
|
{ |
218 |
|
url_t url = NULL; |
219 |
|
char datestr[64]; |
220 |
|
time_t t; |
221 |
|
|
222 |
|
mailbox_get_url (mbox, &url); |
223 |
|
time (&t); |
224 |
|
strftime (datestr, sizeof datestr, "%c", localtime (&t)); |
225 |
|
printf (_("Folder %s %s\n"), url_to_string (url), datestr); |
226 |
|
} |
227 |
} |
} |
228 |
|
|
229 |
#ifdef HAVE_TERMCAP_H |
#ifdef HAVE_TERMCAP_H |
267 |
} |
} |
268 |
} |
} |
269 |
|
|
|
struct list_data { |
|
|
char *buffer; |
|
|
size_t width; |
|
|
}; |
|
|
|
|
|
int |
|
|
scan (mailbox_t mbox) |
|
|
{ |
|
|
struct list_data list_data; |
|
|
|
|
|
list_data.buffer = xmalloc (width); |
|
|
list_data.width = width; |
|
|
|
|
|
if (header) |
|
|
{ |
|
|
url_t url = NULL; |
|
|
char datestr[64]; |
|
|
time_t t; |
|
|
|
|
|
mailbox_get_url (mbox, &url); |
|
|
time (&t); |
|
|
strftime (datestr, sizeof datestr, "%c", localtime (&t)); |
|
|
printf (_("Folder %s %s\n"), url_to_string (url), datestr); |
|
|
} |
|
|
|
|
|
mh_iterate (mbox, &msgset, list_message, &list_data); |
|
|
|
|
|
clear_screen (); |
|
|
mh_global_save_state (); |
|
|
return 0; |
|
|
} |
|
|
|
|
270 |
void |
void |
271 |
list_message (mailbox_t mbox, message_t msg, size_t num, void *data) |
list_message (mailbox_t mbox, message_t msg, size_t num, void *data) |
272 |
{ |
{ |
273 |
struct list_data *ld = data; |
buffer[0] = 0; |
274 |
|
mh_format (&format, msg, num, buffer, width); |
275 |
ld->buffer[0] = 0; |
printf ("%s\n", buffer); |
|
mh_format (&format, msg, num, ld->buffer, ld->width); |
|
|
printf ("%s\n", ld->buffer); |
|
276 |
} |
} |