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:
parent
589602aacf
commit
8365978b5e
387
src/conky.c
387
src/conky.c
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user