about summary refs log tree commit diff stats
path: root/worker/maildir
diff options
context:
space:
mode:
authorARaspiK <araspik@protonmail.com>2020-08-18 20:27:23 +0000
committerReto Brunner <reto@labrat.space>2020-08-19 11:38:57 +0200
commitfe1cabb077cf6c6cb3de122b3f5532acbeba8c85 (patch)
tree6f57a28a507c500df82f991cefd67910eca973f0 /worker/maildir
parentf4dc7e1f746582d42462ec56347dd354756203b0 (diff)
downloadaerc-fe1cabb077cf6c6cb3de122b3f5532acbeba8c85.tar.gz
Add support for :rmdir
The `:rmdir` command removes the current directory (`-f` is required if
the directory is not empty).

This is not supported on the notmuch backend.

An issue with the maildir backend is that some sync programs (e.g.
offlineimap) may recover the directory after it is deleted.  They need
to specifically be configured to accept deletions, or special commands
need to be executed (e.g. `offlineimap --delete-folder`) to properly
delete folders.

A danger of using this on the IMAP backend is that it is possible for a
new message to be added to the directory and for aerc to not show it
immediately (due to a slow connection) - using `:rmdir` at this moment
(with `-f` if the directory already contains messages) would delete the
directory and the new message that just arrived (and all other
contents).  This is documented in aerc(1) so that users are aware of
possible risks.
Diffstat (limited to 'worker/maildir')
-rw-r--r--worker/maildir/worker.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/worker/maildir/worker.go b/worker/maildir/worker.go
index d1ff3c2..4a7ae51 100644
--- a/worker/maildir/worker.go
+++ b/worker/maildir/worker.go
@@ -186,6 +186,8 @@ func (w *Worker) handleMessage(msg types.WorkerMessage) error {
 		return w.handleFetchDirectoryContents(msg)
 	case *types.CreateDirectory:
 		return w.handleCreateDirectory(msg)
+	case *types.RemoveDirectory:
+		return w.handleRemoveDirectory(msg)
 	case *types.FetchMessageHeaders:
 		return w.handleFetchMessageHeaders(msg)
 	case *types.FetchMessageBodyPart:
@@ -362,6 +364,16 @@ func (w *Worker) handleCreateDirectory(msg *types.CreateDirectory) error {
 	return nil
 }
 
+func (w *Worker) handleRemoveDirectory(msg *types.RemoveDirectory) error {
+	dir := w.c.Dir(msg.Directory)
+	if err := os.RemoveAll(string(dir)); err != nil {
+		w.worker.Logger.Printf("could not remove directory %s: %v",
+			msg.Directory, err)
+		return err
+	}
+	return nil
+}
+
 func (w *Worker) handleFetchMessageHeaders(
 	msg *types.FetchMessageHeaders) error {
 	for _, uid := range msg.Uids {
04 +0100 updated pydoc pages' href='/akspecs/ranger/commit/doc/ranger.fsobject.loader.html?h=v1.7.0&id=f07bb12fc5c59430e995a64956b36331ce3629b9'>f07bb12f ^
34a60763 ^
f07bb12f ^














34a60763 ^
f07bb12f ^


























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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134