Commit 0bc9bea2e565928be5799db673d608b1e1d08126

Authored by David RENÉ
1 parent 051e674f

[+] File_ref type which is use by send_mail

ds_files/ds_types.anubis
... ... @@ -106,7 +106,16 @@ public define List(DS_Type_File) calexium_lib_types_description =
106 106 // String from,
107 107 // String reply_to
108 108 // ).
109   -
  109 + ds_type("File_ref", [
  110 + alternative("file_ref", [
  111 + component(string, "path", comment("access ptah to the file on the original machine")),
  112 + component(string, "name", comment("name of the file")),
  113 + component(ds_type("MIME"), "mime", comment("mime type of the file")),
  114 + component(string, "key", comment("key is a SHA1 gave by sender to certify it when it will be downloaded")),
  115 + component(int, "size", comment("size of the file in Bytes"))
  116 + ])
  117 + ]),
  118 +
110 119 ds_type("Email_to_send", [
111 120 alternative("data_to_send", [
112 121 component(ds_type("Email_Address"), "from", comment("email sent from that sender")),
... ... @@ -115,7 +124,7 @@ public define List(DS_Type_File) calexium_lib_types_description =
115 124 component(list, ds_type("Email_Address"), "bcc", comment("email sent as blank carbon copy to that list of recipients")),
116 125 component(string, "subject", comment("subject of email. Supposed to be UTF8")),
117 126 component(string, "content", comment("content of the email")),
118   - component(list, string, "files", comment("list of files")),
  127 + component(list, ds_type("File_ref"), "attached_files", comment("list of files to attach to this email")),
119 128 component(bool, "send_copy",comment("send copy to sender by bcc (useful when the email is sent by an automat)")),
120 129 component(string, "reply_to", comment("reply to !!"))
121 130 ])
... ...
mail/types/generated/email_to_send.anubis
1   -/*
  1 +/*
2 2 * Created by 伝作 (Densaku).
3 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4   - * Date: 2018-12-07
5   - * Time: 01:14:06
  4 + * Date: 2019-05-17
  5 + * Time: 19:05:20
6 6 *
7 7 */
8 8  
... ... @@ -10,7 +10,8 @@ transmit system/muscle.anubis
10 10 transmit system/convert.anubis
11 11 transmit tools/basis.anubis
12 12  
13   -transmit calexium_lib/mail/types/generated/email_address.anubis
  13 +transmit types/generated/file_ref.anubis
  14 +transmit types/generated/email_address.anubis
14 15  
15 16  
16 17  
... ... @@ -22,7 +23,7 @@ public type Email_to_send:
22 23 List(Email_Address) bcc, //email sent as blank carbon copy to that list of recipients
23 24 String subject, //subject of email. Supposed to be UTF8
24 25 String content, //content of the email
25   - List(String) files, //list of files
  26 + List(File_ref) attached_files, //list of files to attach to this email
26 27 Bool send_copy, //send copy to sender by bcc (useful when the email is sent by an automat)
27 28 String reply_to //reply to !!
28 29 )
... ... @@ -42,7 +43,7 @@ public define Message
42 43 if _email_to_send is
43 44 {
44 45 //Alternative data_to_send
45   - data_to_send(_from, __to, __cc, __bcc, _subject, _content, __files, _send_copy, _reply_to) then
  46 + data_to_send(_from, __to, __cc, __bcc, _subject, _content, __attached_files, _send_copy, _reply_to) then
46 47 forget(add_string(_email_to_send_message, "__TYPE_ALT__", "data_to_send"));
47 48 // [type = Email_Address] data_to_send.from
48 49 forget(add_message(_email_to_send_message, "from", to_Message(_from)));
... ... @@ -56,8 +57,8 @@ public define Message
56 57 forget(add_string(_email_to_send_message, "subject", _subject));
57 58 // [type = String] data_to_send.content
58 59 forget(add_string(_email_to_send_message, "content", _content));
59   - // [type = List(String)] data_to_send.files
60   - map_forget((String _files) |-> add_string(_email_to_send_message, "files", _files), __files);
  60 + // [type = List(File_ref)] data_to_send.attached_files
  61 + map_forget((File_ref _attached_files) |-> add_message(_email_to_send_message, "attached_files", to_Message(_attached_files)), __attached_files);
61 62 // [type = Bool] data_to_send.send_copy
62 63 forget(add_bool(_email_to_send_message, "send_copy", _send_copy));
63 64 // [type = String] data_to_send.reply_to
... ... @@ -93,15 +94,16 @@ public define Maybe(Email_to_send)
93 94 if find_string(_email_to_send_message, "subject") is {failure then failure, success(_subject_) then
94 95 // [type = String] data_to_send.content
95 96 if find_string(_email_to_send_message, "content") is {failure then failure, success(_content_) then
96   - // [type = List(String)] data_to_send.files
97   - with _files_ = find_string_list(_email_to_send_message, "files"),
  97 + // [type = List(File_ref)] data_to_send.attached_files
  98 + with mb__attached_files_ = map_escape(( Message msg ) |-> (Maybe(File_ref)) from_Message(msg), find_messages(_email_to_send_message, "attached_files")),
  99 + if mb__attached_files_ is {failure then failure, success(_attached_files_) then
98 100 // [type = Bool] data_to_send.send_copy
99 101 if find_bool(_email_to_send_message, "send_copy") is {failure then failure, success(_send_copy_) then
100 102 // [type = String] data_to_send.reply_to
101 103 if find_string(_email_to_send_message, "reply_to") is {failure then failure, success(_reply_to_) then
102 104  
103   - success(data_to_send(_from_, _to_, _cc_, _bcc_, _subject_, _content_, _files_, _send_copy_, _reply_to_))
104   - }}}}}}}}}
  105 + success(data_to_send(_from_, _to_, _cc_, _bcc_, _subject_, _content_, _attached_files_, _send_copy_, _reply_to_))
  106 + }}}}}}}}}}
105 107 else
106 108 failure //No valid Alternative found !
107 109 else
... ...
types/generated/file_ref.anubis 0 → 100644
  1 +/*
  2 + * Created by 伝作 (Densaku).
  3 + * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
  4 + * Date: 2019-05-17
  5 + * Time: 19:05:20
  6 + *
  7 + */
  8 +
  9 +transmit system/muscle.anubis
  10 +transmit system/convert.anubis
  11 +transmit tools/basis.anubis
  12 +
  13 +transmit types/generated/mime.anubis
  14 +
  15 +
  16 +
  17 +public type File_ref:
  18 + file_ref(
  19 + String path, //access ptah to the file on the original machine
  20 + String name, //name of the file
  21 + MIME mime, //mime type of the file
  22 + String key, //key is a SHA1 gave by sender to certify it when it will be downloaded
  23 + Int size //size of the file in Bytes
  24 + )
  25 +.
  26 +
  27 + File_ref message format
  28 + =======================
  29 +
  30 +
  31 +public define Message
  32 + to_Message
  33 + (
  34 + File_ref _file_ref
  35 + )=
  36 + with _file_ref_message = message((Word32)0), //
  37 + forget(add_string(_file_ref_message, "__TYPE__", "File_ref"));
  38 + if _file_ref is
  39 + {
  40 + //Alternative file_ref
  41 + file_ref(_path, _name, _mime, _key, _size) then
  42 + forget(add_string(_file_ref_message, "__TYPE_ALT__", "file_ref"));
  43 + // [type = String] file_ref.path
  44 + forget(add_string(_file_ref_message, "path", _path));
  45 + // [type = String] file_ref.name
  46 + forget(add_string(_file_ref_message, "name", _name));
  47 + // [type = MIME] file_ref.mime
  48 + forget(add_message(_file_ref_message, "mime", to_Message(_mime)));
  49 + // [type = String] file_ref.key
  50 + forget(add_string(_file_ref_message, "key", _key));
  51 + // [type = Int] file_ref.size
  52 + forget(add_string(_file_ref_message, "size", to_String(_size))),
  53 +
  54 + };
  55 + _file_ref_message
  56 +.
  57 +
  58 +public define Maybe(File_ref)
  59 + from_Message
  60 + (
  61 + Message _file_ref_message
  62 + )=
  63 + if find_string(_file_ref_message, "__TYPE__") is {failure then failure, success(__type__) then
  64 + if find_string(_file_ref_message, "__TYPE_ALT__") is {failure then failure, success(__type_alt__) then
  65 + if __type__ = "File_ref" then
  66 + //Alternative file_ref
  67 + if __type_alt__ = "file_ref" then //Alternative file_ref
  68 + // [type = String] file_ref.path
  69 + if find_string(_file_ref_message, "path") is {failure then failure, success(_path_) then
  70 + // [type = String] file_ref.name
  71 + if find_string(_file_ref_message, "name") is {failure then failure, success(_name_) then
  72 + // [type = MIME] file_ref.mime
  73 + if find_message(_file_ref_message, "mime") is {failure then failure, success(_mime__msg) then
  74 + if (Maybe(MIME))from_Message(_mime__msg) is {failure then failure, success(_mime_) then
  75 + // [type = String] file_ref.key
  76 + if find_string(_file_ref_message, "key") is {failure then failure, success(_key_) then
  77 + // [type = Int] file_ref.size
  78 + if find_string(_file_ref_message, "size") is {failure then failure, success(__size_) then
  79 + if decimal_scan(__size_) is { failure then failure, success(_size_) then
  80 +
  81 + success(file_ref(_path_, _name_, _mime_, _key_, _size_))
  82 + }}}}}}}
  83 + else
  84 + failure //No valid Alternative found !
  85 + else
  86 + failure //Type not found in message !
  87 + }}
  88 +.
  89 +
... ...