whatnow2 handle mhuse
[mmh] / uip / whatnow2.sh
1 #!/bin/sh
2
3 printhelp()
4 {
5         echo "Usage: $0 command"
6         echo "  commands are:"
7         echo "  edit [editor]"
8         echo "  list"
9         echo "  send [sendargs]"
10         echo "  delete"
11         echo "  display"
12         echo "  attach files"
13         echo "  alist"
14         echo "  detach anum"
15         echo "  refile +folder"
16         echo "  -help"
17         echo "  -Version"
18 }
19
20 version()
21 {
22         if [ $1 -eq 0 ]
23         then
24                 echo "$0 has no own version number, thus this instead:"
25                 folder -Version
26                 exit 0
27         fi
28         echo "$0 has no own version number, thus this instead:" 1>&2
29         folder -Version 1>&2
30         exit 1
31 }
32
33 usage()
34 {
35         if [ $1 -eq 0 ]
36         then
37                 printhelp
38                 exit 0
39         fi
40         printhelp 1>&2
41         exit 1
42 }
43
44 get_editor()
45 {
46         if [ -f "$mhmetafile" ]
47         then
48                 lasteditor=`anno -list -component 'last-editor' $mhmetafile`
49                 if [ -n "$lasteditor" ]
50                 then
51                         editor=`echo $lasteditor | cut -d ' ' -f 1`
52                         mheditor=`mhparam "$editor-next"`
53                         [ -n "$mheditor" ] && return
54                         mheditor=$lasteditor
55                         return
56                 fi
57         fi
58         if [ -n "$MMHEDITOR" ]
59         then
60                 mheditor=$MMHEDITOR
61                 return
62         fi
63         mheditor=`mhparam 'Editor'`
64 }
65
66 get_showproc()
67 {
68         mhshowproc=`mhparam 'listproc'`
69         return
70 }
71
72 get_realpath()
73 {
74         reldir=`dirname "$1"`
75         filename=`basename "$1"`
76         cd "$reldir"
77         echo "$PWD/$filename"
78         cd "$OLDPWD"
79 }
80
81 set_lasteditor()
82 {
83         anno -delete -number all -component 'last-editor' $mhmetafile
84         anno -nodate -component 'last-editor' -text "$1" $mhmetafile
85 }
86
87 create()
88 {
89         if [ -z "$mhdraft" ]
90         then
91                 usage 1
92         fi
93         mhmetafile=$mhdraft.meta
94         touch $mhmetafile
95         if [ -z "$mheditor" ]
96         then
97                 get_editor
98         fi
99         if [ "$mhuse" -eq 1 ]
100         then
101                 return
102         fi
103         if [ -n "$mhaltmsg" ]
104         then
105                 anno -nodate -component 'mhaltmsg' -text "$mhaltmsg" $mhmetafile
106         fi
107         if [ -n "$mhdist" ]
108         then
109                 anno -nodate -component 'mhdist' -text "$mhdist" $mhmetafile
110         fi
111         if [ -n "$mhfolder" ]
112         then
113                 anno -nodate -component 'mhfolder' -text "$mhfolder" $mhmetafile
114         fi
115         if [ -n "$mhmessages" ]
116         then
117                 anno -nodate -component 'mhmessages' -text "$mhmessages" $mhmetafile
118         fi
119         if [ -n "$mhannotate" ]
120         then
121                 anno -nodate -component 'mhannotate' -text "$mhannotate" $mhmetafile
122         fi
123         set_lasteditor "$mheditor"
124         exec $mheditor $mhdraft
125 }
126
127 edit()
128 {
129         if [ $# -eq 0 ]
130         then
131                 get_editor
132         else
133                 mheditor="$@"
134         fi
135
136         set_lasteditor "$mheditor"
137         exec $mheditor $mhdraft
138 }
139
140 list()
141 {
142         get_showproc
143         exec $mhshowproc -file $mhdraft
144 }
145
146 sendfunktion()
147 {
148         export mhaltmsg=`anno -list -component 'mhaltmsg' "$mhmetafile"`
149         export mhdist=`anno -list -component 'mhdist' "$mhmetafile"`
150         export mhfolder=`anno -list -component 'mhfolder' "$mhmetafile"`
151         export mhmessages=`anno -list -component 'mhmessages' "$mhmetafile"`
152         export mhannotate=`anno -list -component 'mhannotate' "$mhmetafile"`
153         send "$@" "$mhdraft" || exit $?
154         rm -f "$mhmetafile"
155         exit 0
156 }
157
158 delete()
159 {
160         folder -push "$draftfolder" >/dev/null 2>&1
161         rmm "$draftfolder" c
162         folder -pop >/dev/null 2>&1
163         rm "$mhmetafile"
164 }
165
166 attach()
167 {
168         header=`mhparam 'Attachment-Header'`
169         while [ -n "$1" ]
170         do
171                 if [ ! -f "$1" ]
172                 then
173                         echo "file not found: $1" 1>&2
174                         shift
175                         echo -n "folloing files are not attached: " 1>&2
176                         echo -n "$1" 1>&2
177                         echo "$@" 1>&2
178                         exit 1
179                 fi
180                 file=`get_realpath "$1"`
181                 anno -nodate -append -component "$header" -text "$file" "$mhdraft"
182                 shift
183         done
184 }
185
186 alist()
187 {
188         header=`mhparam 'Attachment-Header'`
189         anno -list -number -component "$header" "$mhdraft"
190 }
191
192 detach()
193 {
194         header=`mhparam 'Attachment-Header'`
195         while [ -n "$1" ]
196         do
197                 anno -delete -component "$header" -number "$1" "$mhdraft"
198                 if [ $? -ne 0 ]
199                 then
200                         echo "can't delet attachment $1" 1>&2
201                         exit 1
202                 fi
203                 shift
204         done
205 }
206
207 display()
208 {
209         mhaltmsg=`anno -list -component 'mhaltmsg' "$mhmetafile"`
210         get_showproc
211         if [ -z "$mhaltmsg" ]
212         then
213                 echo "no altmsg" 1>&2
214                 exit 1
215         fi
216         exec $mhshowproc -file "$mhaltmsg"
217 }
218
219 if [ $# -eq 0 ]
220 then
221         create
222         exit
223 fi
224
225 command="$1"
226 shift
227
228 draftfolder=`mhparam draftfolder`
229
230 mhdraft=`mhpath "$draftfolder" c 2>/dev/null`
231 if [ -z "$mhdraft" ]
232 then
233         case "$command" in
234         -h|-he|-hel|-help)
235                 usage $#
236                 ;;
237         -V|-Ve|-Ver|-Vers|-Versi|-Versio|-Version)
238                 version $#
239                 ;;
240         *)
241                 echo "no current message in $draftfolder" 1>&2
242                 usage 1
243                 ;;
244         esac
245 fi
246 mhmetafile="$mhdraft".meta
247 touch "$mhmetafile"
248
249
250 case "$command" in
251 e|ed|edi|edit)
252         edit "$@"
253         ;;
254 l|li|lis|list)
255         [ $# -eq 0 ] || usage 1
256         list
257         ;;
258 s|se|sen|send)
259         sendfunktion "$@"
260         ;;
261 del|dele|delet|delete)
262         [ $# -eq 0 ] || usage 1
263         delete
264         ;;
265 di|dis|disp|displ|displa|display)
266         [ $# -eq 0 ] || usage 1
267         display
268         ;;
269 at|att|atta|attac|attach)
270         attach "$@"
271         ;;
272 al|ali|alis|alist)
273         [ $# -eq 0 ] || usage 1
274         alist
275         ;;
276 det|deta|detac|detach)
277         detach "$@"
278         ;;
279 r|re|ref|refi|refil|refile)
280         refile -file "$mhdraft" "$@"
281         ;;
282 w|wh|who|whom)
283         whom "$@" "$mhdraft"
284         ;;
285 -h|-he|-hel|-help)
286         usage $#
287         ;;
288 -V|-Ve|-Ver|-Vers|-Versi|-Versio|-Version)
289         version $#
290         ;;
291 *)
292         usage 1
293         ;;
294 esac