1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
/*@ S-nail - a mail user agent derived from Berkeley Mail.
*@ Handling of attachments. TODO Interface sick
*
* Copyright (c) 2012 - 2020 Steffen (Daode) Nurpmeso <steffen@sdaoden.eu>.
* SPDX-License-Identifier: ISC
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef mx_ATTACHMENTS_H
#define mx_ATTACHMENTS_H
#include <mx/nail.h>
#define mx_HEADER
#include <su/code-in.h>
struct mx_attachment;
/* Forwards */
struct mx_name;
/* MIME attachments */
enum mx_attachments_conv{
mx_ATTACHMENTS_CONV_DEFAULT, /* _get_lc() -> _iter_*() */
mx_ATTACHMENTS_CONV_FIX_INCS, /* "charset=".a_input_charset (nocnv) */
mx_ATTACHMENTS_CONV_TMPFILE /* attachment.a_tmpf is converted */
};
enum mx_attachments_error{
mx_ATTACHMENTS_ERR_NONE,
mx_ATTACHMENTS_ERR_FILE_OPEN,
mx_ATTACHMENTS_ERR_ICONV_FAILED,
mx_ATTACHMENTS_ERR_ICONV_NAVAIL,
mx_ATTACHMENTS_ERR_OTHER
};
struct mx_attachment{
struct mx_attachment *a_flink; /* Forward link in list. */
struct mx_attachment *a_blink; /* Backward list link */
char const *a_path_user; /* Path as given (maybe including iconv spec) */
char const *a_path; /* Path as opened */
char const *a_path_bname; /* Basename of path as opened */
char const *a_name; /* File name to be stored (EQ a_path_bname) */
char const *a_content_type; /* content type */
char const *a_content_disposition; /* content disposition */
struct mx_name *a_content_id; /* content id */
char const *a_content_description; /* content description */
char const *a_input_charset; /* Interpretation depends on .a_conv */
char const *a_charset; /* ... */
FILE *a_tmpf; /* If AC_TMPFILE */
enum mx_attachments_conv a_conv; /* User chosen conversion */
int a_msgno; /* message number */
};
/* Try to add an attachment for file, fexpand(_LOCAL|_NOPROTO)ed.
* Return the new aplist aphead.
* The newly created attachment may be stored in *newap, or NIL on error */
EXPORT struct mx_attachment *mx_attachments_append(
struct mx_attachment *aplist, char const *file,
BITENUM_IS(u32,mx_attach_error) *aerr_or_nil,
struct mx_attachment **newap_or_nil);
/* Shell-token parse names, and append resulting file names to aplist, return
* (new) aplist head */
EXPORT struct mx_attachment *mx_attachments_append_list(
struct mx_attachment *aplist, char const *names);
/* Remove ap from aplist, and return the new aplist head */
EXPORT struct mx_attachment *mx_attachments_remove(
struct mx_attachment *aplist, struct mx_attachment *ap);
/* Find by file-name. If any path component exists in name then an exact match
* of the creation-path is used directly; if instead the basename of that path
* matches all attachments are traversed to find an exact match first, the
* first of all basename matches is returned as a last resort;
* If no path component exists the filename= parameter is searched (and also
* returned) in preference over the basename, otherwise likewise.
* If name is in fact a message number the first match is taken.
* If stat_or_null is given: FAL0 on NIL return, TRU1 for exact/single match,
* TRUM1 for ambiguous matches */
EXPORT struct mx_attachment *mx_attachments_find(struct mx_attachment *aplist,
char const *name, boole *stat_or_nil);
/* Interactively edit the attachment list, return updated list */
EXPORT struct mx_attachment *mx_attachments_list_edit(
struct mx_attachment *aplist, BITENUM_IS(u32,n_go_input_flags) gif);
/* Print all attachments, return number of lines written, -1 on error */
EXPORT sz mx_attachments_list_print(struct mx_attachment const *aplist,
FILE *fp);
#include <su/code-ou.h>
#endif /* mx_ATTACHMENTS_H */
/* s-it-mode */
|