X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=recvattach.c;h=a143d143392867dad52f8d8ef59fb58223195400;hp=4988067aa6b0f443f5c5212bea29a2a8f3385579;hb=f404a0ca916be07049af51a3022baaaaab94def6;hpb=7259a4b7e7de67679ee74c966439dbb43602a1f1 diff --git a/recvattach.c b/recvattach.c index 4988067..a143d14 100644 --- a/recvattach.c +++ b/recvattach.c @@ -17,6 +17,10 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ +#if HAVE_CONFIG_H +# include "config.h" +#endif + #include "mutt.h" #include "mutt_curses.h" #include "mutt_menu.h" @@ -38,6 +42,7 @@ #include static const char *Mailbox_is_read_only = N_("Mailbox is read-only."); +static char LastSaveFolder[_POSIX_PATH_MAX] = ""; #define CHECK_READONLY if (Context->readonly) \ {\ @@ -55,6 +60,29 @@ static struct mapping_t AttachHelp[] = { { NULL } }; +int mutt_extract_path(char *filename, char *path) +{ + char *tmp=safe_malloc(sizeof(char) * _POSIX_PATH_MAX); + char *help_ptr; + + help_ptr = tmp; + + while(*filename != '\0') + { + if (*filename == '/') + { + *help_ptr++=*filename++; + *help_ptr++='\0'; + strcat(path, tmp); + help_ptr = tmp; + } + *help_ptr++=*filename++; + } + safe_free((void **) &tmp); + + return 0; +} + void mutt_update_tree (ATTACHPTR **idx, short idxlen) { char buf[STRING]; @@ -368,9 +396,11 @@ static int mutt_query_save_attachment (FILE *fp, BODY *body, HEADER *hdr, char * { char *prompt; char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX]; + char path[_POSIX_PATH_MAX]=""; int is_message; int append = 0; int rc; + int ret = -1; if (body->filename) { @@ -387,12 +417,28 @@ static int mutt_query_save_attachment (FILE *fp, BODY *body, HEADER *hdr, char * else buf[0] = 0; - prompt = _("Save to file: "); + prompt = _("Save to file ('#' for last used folder): "); while (prompt) { - if (mutt_get_field (prompt, buf, sizeof (buf), M_FILE | M_CLEAR) != 0 - || !buf[0]) + ret = mutt_get_field (prompt, buf, sizeof (buf), M_FILE | M_CLEAR | M_LASTFOLDER); + if (((ret != 0) && (ret != 2)) || (!buf[0] && ret != 2)) return -1; + + if (ret == 2) + { + char tmpbuf[_POSIX_PATH_MAX]; + snprintf(tmpbuf,sizeof(tmpbuf),"%s%s",LastSaveFolder,buf); + strfcpy (buf, tmpbuf, sizeof (buf)); + ret = mutt_get_field (_("Save to file: ") + , buf, sizeof (buf), M_FILE); + if ((ret != 0) || (!buf[0])) + return -1; + } + else + { + mutt_extract_path(buf,path); + strfcpy (LastSaveFolder, path, sizeof (LastSaveFolder)); + } prompt = NULL; mutt_expand_path (buf, sizeof (buf));