From 6d6004c9abd526fbe4a8f218744ac15f18bcd087 Mon Sep 17 00:00:00 2001 From: SJ Date: Wed, 21 Dec 2016 22:18:17 +0100 Subject: [PATCH] Trim the -f imap foldername from the stored value Change-Id: I65846535d8780cce840e1b33aab7affc0f465acc Signed-off-by: SJ --- src/defs.h | 1 + src/imap.c | 12 ++++++++++-- src/import.h | 2 +- src/import_imap.c | 2 +- src/pilerimport.c | 1 + 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/defs.h b/src/defs.h index 483db1d9..b40b138c 100644 --- a/src/defs.h +++ b/src/defs.h @@ -298,6 +298,7 @@ struct import { int keep_eml; int timeout; int cap_uidplus; + int trim_folder_name; int uid; long total_size; time_t started, updated, finished; diff --git a/src/imap.c b/src/imap.c index be903c00..1ca8bd0e 100644 --- a/src/imap.c +++ b/src/imap.c @@ -93,7 +93,7 @@ END: } -int process_imap_folder(int sd, int *seq, char *folder, struct session_data *sdata, struct __data *data, int use_ssl, int dryrun, struct __config *cfg){ +int process_imap_folder(int sd, int *seq, char *folder, char *main_folder, struct session_data *sdata, struct __data *data, int use_ssl, int dryrun, struct __config *cfg){ int rc=ERR, i, n, messages=0, len, readlen, fd, nreads, readpos, finished, msglen, msg_written_len, tagoklen, tagbadlen, result; char *p, tag[SMALLBUFSIZE], tagok[SMALLBUFSIZE], tagbad[SMALLBUFSIZE], buf[MAXBUFSIZE], puf[MAXBUFSIZE], filename[SMALLBUFSIZE]; @@ -127,6 +127,12 @@ int process_imap_folder(int sd, int *seq, char *folder, struct session_data *sda if(data->recursive_folder_names == 1){ + + // trim the main folder name from the stored value in folder table + if(data->import->trim_folder_name == 1 && main_folder){ + folder += strlen(main_folder); + } + data->folder = get_folder_id(sdata, data, folder, 0); if(data->folder == ERR_FOLDER) data->folder = add_new_folder(sdata, data, folder, 0); } @@ -410,8 +416,10 @@ int list_folders(int sd, int *seq, int use_ssl, char *folder_name, struct __data snprintf(tag, sizeof(tag)-1, "A%d", *seq); snprintf(tagok, sizeof(tagok)-1, "A%d OK", (*seq)++); if(folder_name == NULL) snprintf(puf, sizeof(puf)-1, "%s LIST \"\" \"*\"\r\n", tag); - else + else { + data->import->trim_folder_name = 1; snprintf(puf, sizeof(puf)-1, "%s LIST \"%s\" \"*\"\r\n", tag, folder_name); + } write1(sd, puf, strlen(puf), use_ssl, data->ssl); diff --git a/src/import.h b/src/import.h index e52bfa24..d5126d24 100644 --- a/src/import.h +++ b/src/import.h @@ -22,7 +22,7 @@ int process_pop3_emails(int sd, struct session_data *sdata, struct __data *data, int connect_to_imap_server(int sd, int *seq, char *username, char *password, struct __data *data, int use_ssl); int list_folders(int sd, int *seq, int use_ssl, char *folder_name, struct __data *data); -int process_imap_folder(int sd, int *seq, char *folder, struct session_data *sdata, struct __data *data, int use_ssl, int dryrun, struct __config *cfg); +int process_imap_folder(int sd, int *seq, char *folder, char *main_folder, struct session_data *sdata, struct __data *data, int use_ssl, int dryrun, struct __config *cfg); void send_imap_close(int sd, int *seq, struct __data *data, int use_ssl); #endif /* _IMPORT_H */ diff --git a/src/import_imap.c b/src/import_imap.c index ef3b0988..2822b25e 100644 --- a/src/import_imap.c +++ b/src/import_imap.c @@ -85,7 +85,7 @@ int import_from_imap_server(char *server, char *username, char *password, int po else { if(data->quiet == 0) printf("processing folder: %s... ", (char *)q->str); - if(process_imap_folder(sd, &seq, q->str, sdata, data, use_ssl, dryrun, cfg) == ERR) ret = ERR; + if(process_imap_folder(sd, &seq, q->str, folder_imap, sdata, data, use_ssl, dryrun, cfg) == ERR) ret = ERR; } } diff --git a/src/pilerimport.c b/src/pilerimport.c index 7dc9dd91..e905a69f 100644 --- a/src/pilerimport.c +++ b/src/pilerimport.c @@ -89,6 +89,7 @@ int main(int argc, char **argv){ import.download_only = 0; import.timeout = 30; import.uid = 0; + import.trim_folder_name = 0; import.email = NULL; data.import = &import;