1 /**
2  * @file
3  * Handling of email attachments
4  *
5  * @authors
6  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
7  *
8  * @copyright
9  * This program is free software: you can redistribute it and/or modify it under
10  * the terms of the GNU General Public License as published by the Free Software
11  * Foundation, either version 2 of the License, or (at your option) any later
12  * version.
13  *
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
17  * details.
18  *
19  * You should have received a copy of the GNU General Public License along with
20  * this program.  If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 /* common protos for compose / attach menus */
24 
25 #ifndef MUTT_ATTACH_MUTT_ATTACH_H
26 #define MUTT_ATTACH_MUTT_ATTACH_H
27 
28 #include <stdbool.h>
29 #include <stdio.h>
30 
31 struct AttachCtx;
32 struct Body;
33 struct ConfigSubset;
34 struct Email;
35 struct Menu;
36 struct MuttWindow;
37 
38 /**
39  * enum ViewAttachMode - Options for mutt_view_attachment()
40  */
41 enum ViewAttachMode
42 {
43   MUTT_VA_REGULAR = 1, ///< View using default method
44   MUTT_VA_MAILCAP,     ///< Force viewing using mailcap entry
45   MUTT_VA_AS_TEXT,     ///< Force viewing as text
46   MUTT_VA_PAGER,       ///< View attachment in pager using copiousoutput mailcap
47 };
48 
49 /**
50  * enum SaveAttach - Options for saving attachments
51  *
52  * @sa mutt_save_attachment(), mutt_decode_save_attachment(),
53  *     save_attachment_open(), mutt_check_overwrite()
54  */
55 enum SaveAttach
56 {
57   MUTT_SAVE_NO_FLAGS = 0, ///< No flags set
58   MUTT_SAVE_APPEND,       ///< Append to existing file
59   MUTT_SAVE_OVERWRITE,    ///< Overwrite existing file
60 };
61 
62 int mutt_attach_display_loop(struct ConfigSubset *sub, struct Menu *menu, int op,
63                              struct Email *e, struct AttachCtx *actx, bool recv);
64 
65 void mutt_save_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
66                                struct Body *top, struct Email *e, struct Menu *menu);
67 void mutt_pipe_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
68                                struct Body *top, bool filter);
69 void mutt_print_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
70                                 struct Body *top);
71 
72 int mutt_view_attachment(FILE *fp, struct Body *a, enum ViewAttachMode mode, struct Email *e, struct AttachCtx *actx, struct MuttWindow *win);
73 
74 void mutt_check_lookup_list(struct Body *b, char *type, size_t len);
75 int mutt_compose_attachment(struct Body *a);
76 int mutt_decode_save_attachment(FILE *fp, struct Body *m, const char *path, int displaying, enum SaveAttach opt);
77 int mutt_edit_attachment(struct Body *a);
78 int mutt_get_tmp_attachment(struct Body *a);
79 int mutt_pipe_attachment(FILE *fp, struct Body *b, const char *path, char *outfile);
80 int mutt_print_attachment(FILE *fp, struct Body *a);
81 int mutt_save_attachment(FILE *fp, struct Body *m, const char *path, enum SaveAttach opt, struct Email *e);
82 
83 /* small helper functions to handle temporary attachment files */
84 void mutt_add_temp_attachment(const char *filename);
85 void mutt_unlink_temp_attachments(void);
86 
87 #endif /* MUTT_ATTACH_MUTT_ATTACH_H */
88