1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-11-18 02:55:12 +00:00

cleaned up mail code a bit

git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@627 7f574dfc-610e-0410-a909-a81674777703
This commit is contained in:
Brenden Matthews 2006-05-09 22:39:39 +00:00
parent 589602aacf
commit 8365978b5e

View File

@ -1067,6 +1067,78 @@ void replace_thread(struct thread_info_s *new_thread, int pos) // this isn't eve
} }
#define MAXDATASIZE 1000 #define MAXDATASIZE 1000
#define POP3 0
#define IMAP 1
struct mail_s* parse_mail_args(char type, const char *arg) {
struct mail_s *mail;
mail = malloc(sizeof(struct mail_s));
char *tmp;
if (sscanf(arg, "%128s %128s %128s", mail->host, mail->user, mail->pass) != 3) {
if (type == POP3) {
ERR("Scanning IMAP args failed");
} else if (type == IMAP) {
ERR("Scanning POP3 args failed");
}
}
// see if password needs prompting
if (mail->pass[0] == '*' && mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Enter mailbox password (%s@%s): ", mail->user, mail->host);
scanf("%128s", mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(arg, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &mail->interval);
} else {
mail->interval = 300; // 5 minutes
}
tmp = strstr(arg, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &mail->port);
} else {
if (type == POP3) {
mail->port = 143; // default pop3 port
} else if (type == IMAP) {
mail->port = 143; // default imap port
}
}
if (type == IMAP) {
tmp = strstr(arg, "-f ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%s", mail->folder);
} else {
strncpy(mail->folder, "INBOX", 128); // default imap inbox
}
}
tmp = strstr(arg, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(mail->command, tmp+1, len);
} else {
mail->command[0] = '\0';
}
mail->pos = -1;
return mail;
}
void *imap_thread(struct mail_s* mail) void *imap_thread(struct mail_s* mail)
{ // pthreads are really beginning to piss me off { // pthreads are really beginning to piss me off
@ -2471,61 +2543,7 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
OBJ(imap_unseen, 0) OBJ(imap_unseen, 0)
if (arg) { if (arg) {
// proccss // proccss
obj->data.mail = malloc(sizeof(struct mail_s)); obj->data.mail = parse_mail_args(IMAP, arg);
char *tmp;
if (sscanf(arg, "%128s %128s %128s", obj->data.mail->host, obj->data.mail->user, obj->data.mail->pass) != 3) {
ERR("Scanning IMAP args failed");
}
// see if password needs prompting
if (obj->data.mail->pass[0] == '*' && obj->data.mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Mailbox password (%s@%s): ", obj->data.mail->user, obj->data.mail->host);
scanf("%128s", obj->data.mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(arg, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &obj->data.mail->interval);
} else {
obj->data.mail->interval = 300; // 5 minutes
}
tmp = strstr(arg, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &obj->data.mail->port);
} else {
obj->data.mail->port = 143; // default imap port
}
tmp = strstr(arg, "-f ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%s", obj->data.mail->folder);
} else {
strncpy(obj->data.mail->folder, "INBOX", 128); // default imap inbox
}
tmp = strstr(arg, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(obj->data.mail->command, tmp+1, len);
} else {
obj->data.mail->command[0] = '\0';
}
obj->data.mail->pos = -1;
obj->global_mode = 0; obj->global_mode = 0;
} else { } else {
obj->global_mode = 1; obj->global_mode = 1;
@ -2534,61 +2552,7 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
OBJ(imap_messages, 0) OBJ(imap_messages, 0)
if (arg) { if (arg) {
// proccss // proccss
obj->data.mail = malloc(sizeof(struct mail_s)); obj->data.mail = parse_mail_args(IMAP, arg);
char *tmp;
if (sscanf(arg, "%128s %128s %128s", obj->data.mail->host, obj->data.mail->user, obj->data.mail->pass) != 3) {
ERR("Scanning IMAP args failed");
}
// see if password needs prompting
if (obj->data.mail->pass[0] == '*' && obj->data.mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Mailbox password (%s@%s): ", obj->data.mail->user, obj->data.mail->host);
scanf("%128s", obj->data.mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(arg, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &obj->data.mail->interval);
} else {
obj->data.mail->interval = 300; // 5 minutes
}
tmp = strstr(arg, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &obj->data.mail->port);
} else {
obj->data.mail->port = 143; // default imap port
}
tmp = strstr(arg, "-f ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%s", obj->data.mail->folder);
} else {
strncpy(obj->data.mail->folder, "INBOX", 128); // default imap inbox
}
tmp = strstr(arg, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(obj->data.mail->command, tmp+1, len);
} else {
obj->data.mail->command[0] = '\0';
}
obj->data.mail->pos = -1;
obj->global_mode = 0; obj->global_mode = 0;
} else { } else {
obj->global_mode = 1; obj->global_mode = 1;
@ -2597,54 +2561,7 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
OBJ(pop3_unseen, 0) OBJ(pop3_unseen, 0)
if (arg) { if (arg) {
// proccss // proccss
obj->data.mail = malloc(sizeof(struct mail_s)); obj->data.mail = parse_mail_args(POP3, arg);
char *tmp;
if (sscanf(arg, "%128s %128s %128s", obj->data.mail->host, obj->data.mail->user, obj->data.mail->pass) != 3) {
ERR("Scanning POP3 args failed");
}
// see if password needs prompting
if (obj->data.mail->pass[0] == '*' && obj->data.mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Mailbox password (%s@%s): ", obj->data.mail->user, obj->data.mail->host);
scanf("%128s", obj->data.mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(arg, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &obj->data.mail->interval);
} else {
obj->data.mail->interval = 300; // 5 minutes
}
tmp = strstr(arg, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &obj->data.mail->port);
} else {
obj->data.mail->port = 110; // default pop3 port
}
tmp = strstr(arg, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(obj->data.mail->command, tmp+1, len);
} else {
obj->data.mail->command[0] = '\0';
}
obj->data.mail->pos = -1;
obj->global_mode = 0; obj->global_mode = 0;
} else { } else {
obj->global_mode = 1; obj->global_mode = 1;
@ -2653,54 +2570,7 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
OBJ(pop3_used, 0) OBJ(pop3_used, 0)
if (arg) { if (arg) {
// proccss // proccss
obj->data.mail = malloc(sizeof(struct mail_s)); obj->data.mail = parse_mail_args(POP3, arg);
char *tmp;
if (sscanf(arg, "%128s %128s %128s", obj->data.mail->host, obj->data.mail->user, obj->data.mail->pass) != 3) {
ERR("Scanning POP3 args failed");
}
// see if password needs prompting
if (obj->data.mail->pass[0] == '*' && obj->data.mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Mailbox password (%s@%s): ", obj->data.mail->user, obj->data.mail->host);
scanf("%128s", obj->data.mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(arg, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &obj->data.mail->interval);
} else {
obj->data.mail->interval = 300; // 5 minutes
}
tmp = strstr(arg, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &obj->data.mail->port);
} else {
obj->data.mail->port = 110; // default pop3 port
}
tmp = strstr(arg, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(obj->data.mail->command, tmp+1, len);
} else {
obj->data.mail->command[0] = '\0';
}
obj->data.mail->pos = -1;
obj->global_mode = 0; obj->global_mode = 0;
} else { } else {
obj->global_mode = 1; obj->global_mode = 1;
@ -6065,115 +5935,14 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, b) == 0)
#endif #endif
CONF("imap") { CONF("imap") {
if (value) { if (value) {
info.mail = malloc(sizeof(struct mail_s)); info.mail = parse_mail_args(IMAP, value);
char *tmp;
if (sscanf(value, "%128s %128s %128s", info.mail->host, info.mail->user, info.mail->pass) != 3) {
ERR("Scanning IMAP args failed");
}
// see if password needs prompting
if (info.mail->pass[0] == '*' && info.mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Mailbox password (%s@%s): ", info.mail->user, info.mail->host);
scanf("%128s", info.mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(value, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &info.mail->interval);
} else {
info.mail->interval = 300; // 5 minutes
}
tmp = strstr(value, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &info.mail->port);
} else {
info.mail->port = 143; // default imap port
}
tmp = strstr(value, "-f ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%s", info.mail->folder);
} else {
strncpy(info.mail->folder, "INBOX", 128); // default imap inbox
}
tmp = strstr(value, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(info.mail->command, tmp+1, len);
} else {
info.mail->command[0] = '\0';
}
info.mail->pos = -1;
} else { } else {
CONF_ERR; CONF_ERR;
} }
} }
CONF("pop3") { CONF("pop3") {
if (value) { if (value) {
info.mail = malloc(sizeof(struct mail_s)); info.mail = parse_mail_args(IMAP, value);
char *tmp;
if (sscanf(value, "%128s %128s %128s", info.mail->host, info.mail->user, info.mail->pass) != 3) {
ERR("Scanning POP3 args failed");
}
// see if password needs prompting
if (info.mail->pass[0] == '*' && info.mail->pass[1] == '\0') {
int fp = fileno(stdin);
struct termios term;
tcgetattr(fp, &term);
term.c_lflag &= ~ECHO;
tcsetattr(fp, TCSANOW, &term);
printf("Mailbox password (%s@%s): ", info.mail->user, info.mail->host);
scanf("%128s", info.mail->pass);
printf("\n");
term.c_lflag |= ECHO;
tcsetattr(fp, TCSANOW, &term);
}
// now we check for optional args
tmp = strstr(value, "-i ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%f", &info.mail->interval);
} else {
info.mail->interval = 300; // 5 minutes
}
tmp = strstr(value, "-p ");
if (tmp) {
tmp += 3;
sscanf(tmp, "%u", &info.mail->port);
} else {
info.mail->port = 110; // default pop3 port
}
tmp = strstr(value, "-e ");
if (tmp) {
tmp += 3;
int len = 1024;
if (tmp[0] == '\'') {
len = strstr(tmp+1, "'") - tmp - 1;
if (len > 1024) {
len = 1024;
}
}
strncpy(info.mail->command, tmp+1, len);
} else {
info.mail->command[0] = '\0';
}
info.mail->pos = -1;
} else { } else {
CONF_ERR; CONF_ERR;
} }