Sfoglia il codice sorgente

Add header saving features

Alois Mahdal 7 anni fa
parent
commit
55421ba00c

+ 35
- 0
dotfiles/imapdomo/common.lua Vedi File

@@ -139,6 +139,41 @@ function has_part_like(query, structure)
139 139
     return false
140 140
 end
141 141
 
142
+function save_header(mesg, name)
143
+    --
144
+    -- Append header from *mesg* to file named *name*
145
+    --
146
+    -- File will be placed under directory specified by IMAPDOMO_HEADERS
147
+    -- environment variable.
148
+    --
149
+    local dest = os.getenv("IMAPDOMO_HEADERS") .. '/' .. name
150
+    local cmd = ('cat >>"%q"'):format(dest)
151
+    mbox, uid = table.unpack(mesg)
152
+    header = mbox[uid]:fetch_header()
153
+    if pipe_to(cmd, header) == 0 then
154
+        return true
155
+    else
156
+        return false
157
+    end
158
+end
159
+
160
+function filter_header_saved(seq, name)
161
+    --
162
+    -- Save headers from sequence
163
+    --
164
+    -- Append header of each message in sequence *seq* to file names
165
+    -- *name* and return new sequence with those messages where save was
166
+    -- successful.
167
+    --
168
+    result = Set {}
169
+    for _, mesg in ipairs(seq) do
170
+        if save_header(mesg, name) then
171
+            table.insert(result, mesg)
172
+        end
173
+    end
174
+    return result
175
+end
176
+
142 177
 function filter_part_like(query, seq)
143 178
     --
144 179
     -- Run MIME part query on *seq* sequence of messages

+ 4
- 0
dotfiles/imapdomo/utils/imapdomo Vedi File

@@ -31,6 +31,7 @@ mkcmd() {
31 31
     # Compose imapfilter command
32 32
     #
33 33
     echo -n "IMAPDOMO_ACTION=$Action"
34
+    echo -n "  IMAPDOMO_HEADERS=$HeaderDir"
34 35
     echo -n "  IMAPFILTER_HOME=$CfgDir"
35 36
     echo -n "  imapfilter"
36 37
     if $Debug
@@ -48,9 +49,11 @@ main() {
48 49
     local cmd       # imapfilter command
49 50
     local CfgDir    # config directory
50 51
     local LogDir    # directory to store logs
52
+    local HeaderDir # directory to store headers by save_header()
51 53
     local CdTo      # change dir to this before running imapfilter
52 54
     CfgDir="$HOME/.imapdomo"
53 55
     LogDir="$HOME/.local/share/imapdomo/logs"
56
+    HeaderDir="$HOME/.local/share/imapdomo/headers"
54 57
     Debug=false
55 58
     #shellcheck disable=SC2034
56 59
     while true; do case $1 in
@@ -68,6 +71,7 @@ main() {
68 71
     then
69 72
         cd "$CdTo" || die
70 73
     fi
74
+    mkdir -p "$HeaderDir" || die
71 75
     eval "$cmd"
72 76
 }
73 77
 

+ 4
- 0
dotfiles/imapdomo/utils/imapdomo-cron Vedi File

@@ -684,6 +684,7 @@ mkcmd() {
684 684
     # Compose imapfilter command
685 685
     #
686 686
     echo -n "IMAPDOMO_ACTION=$Action"
687
+    echo -n "  IMAPDOMO_HEADERS=$HeaderDir"
687 688
     echo -n "  IMAPFILTER_HOME=$CfgDir"
688 689
     echo -n "  imapfilter"
689 690
     if $Debug
@@ -701,9 +702,11 @@ main() {
701 702
     local cmd       # imapfilter command
702 703
     local CfgDir    # config directory
703 704
     local LogDir    # directory to store logs
705
+    local HeaderDir # directory to store headers by save_header()
704 706
     local CdTo      # change dir to this before running imapfilter
705 707
     CfgDir="$HOME/.imapdomo"
706 708
     LogDir="$HOME/.local/share/imapdomo/logs"
709
+    HeaderDir="$HOME/.local/share/imapdomo/headers"
707 710
     Debug=false
708 711
     #shellcheck disable=SC2034
709 712
     while true; do case $1 in
@@ -721,6 +724,7 @@ main() {
721 724
     then
722 725
         cd "$CdTo" || die
723 726
     fi
727
+    mkdir -p "$HeaderDir" || die
724 728
     eval "$cmd"
725 729
 }
726 730