aboutsummaryrefslogtreecommitdiff
path: root/internal/imap/client.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--internal/imap/client.go29
1 files changed, 26 insertions, 3 deletions
diff --git a/internal/imap/client.go b/internal/imap/client.go
index 3f004e2..da06f54 100644
--- a/internal/imap/client.go
+++ b/internal/imap/client.go
@@ -17,6 +17,7 @@ type Client struct {
mailboxes mailboxes
delimiter string
toplevel Folder
+ commander *commander
}
type Folder struct {
@@ -50,6 +51,8 @@ func (mbs mailboxes) add(elem *imap.MailboxInfo) {
func (client *Client) Disconnect() {
if client != nil {
+ client.stopCommander()
+
connected := (client.c.State() & imap.ConnectedState) != 0
_ = client.c.Logout()
@@ -119,7 +122,7 @@ func (client *Client) fetchDelimiter() error {
return nil
}
-func (client *Client) EnsureFolder(folder Folder) error {
+func (client *Client) ensureFolder(folder Folder) error {
if client.mailboxes.contains(folder) {
return nil
}
@@ -146,6 +149,26 @@ func (client *Client) EnsureFolder(folder Folder) error {
}
}
-func (client *Client) PutMessage(folder Folder, message string, date time.Time) error {
- return client.c.Append(folder.String(), nil, date, strings.NewReader(message))
+func (client *Client) EnsureFolder(folder Folder, errorHandler ErrorHandler) {
+ client.commander.execute(ensureCommando{folder}, errorHandler)
+}
+
+func (client *Client) putMessages(folder Folder, messages []string) error {
+ if len(messages) == 0 {
+ return nil
+ }
+
+ now := time.Now()
+ for _, msg := range messages {
+ reader := strings.NewReader(msg)
+ if err := client.c.Append(folder.str, nil, now, reader); err != nil {
+ return fmt.Errorf("uploading message to %s: %w", folder, err)
+ }
+ }
+
+ return nil
+}
+
+func (client *Client) PutMessages(folder Folder, messages []string, errorHandler ErrorHandler) {
+ client.commander.execute(addCommando{folder, messages}, errorHandler)
}
ons'>-4/+3 2014-06-29passmenu: type text with xdotoolJason A. Donenfeld2-3/+17 2014-06-29edit: Don't go into a crazy loop. Instead prompt.Jason A. Donenfeld1-2/+1 2014-06-29git: do not trap tmpdir removalJason A. Donenfeld1-1/+0 2014-06-29darwin: fix mktemp argument orderJason A. Donenfeld1-1/+1 2014-06-29darwin: properly ejects ramdisksJason A. Donenfeld2-15/+20 2014-06-29Allow options in EDITOR variableJason A. Donenfeld2-2/+3 2014-06-29keepassx2pass: Substitute empty string for NoneAndrew Spiers1-1/+4 2014-06-16emacs: Use PASSWORD_STORE_CLIP_TIME env variableSvend Sorensen1-4/+7 2014-06-16emacs: Use when instead of if/prognSvend Sorensen1-5/+4 2014-06-16emacs: Update pass website URLSvend Sorensen1-1/+1 2014-05-27Update for new URL.Jason A. Donenfeld3-3/+3 2014-05-14Bump version1.6.2Jason A. Donenfeld1-1/+1 2014-05-14Don't define tmpdir on git init.Jason A. Donenfeld1-4/+3 2014-05-14Disable secmem warning when discovering keysmilki2-2/+2 2014-05-10edit: Quote editor so tests work in spaced directories.Jason A. Donenfeld1-1/+1 2014-05-10reencryption: Properly escape input to sedJason A. Donenfeld1-1/+1 2014-05-10git: use secure tmp directoryJason A. Donenfeld1-4/+11 2014-05-10configure git to decrypt gpg files automaticallySamuel Le Thiec1-0/+5 2014-05-08completion: add new generate flagsJason A. Donenfeld3-2/+7 2014-05-08inplace: mutually exclusive with forceJason A. Donenfeld2-3/+3 2014-05-08usage: tab to spacesJason A. Donenfeld1-1/+1 2014-05-08generate: use nice ansi colors instead.Jason A. Donenfeld1-3/+2 2014-05-08zsh: posix compatible sed fix for zsh-completionJason A. Donenfeld1-1/+1 2014-05-07Implement interactive init functionSvend Sorensen1-0/+8 2014-05-07Implement interactive rename functionSvend Sorensen1-0/+7 2014-05-07Reorder interactive function to match order of helper functionsSvend Sorensen1-13/+13 2014-05-07Make edit helper function name consistent with other helpersSvend Sorensen1-1/+1 2014-05-07Factor out password completing-read functionSvend Sorensen1-4/+8 2014-05-07Add dash to Package-RequiresSvend Sorensen1-1/+1 2014-05-06Force sane sort order.Jason A. Donenfeld1-2/+2 2014-05-06generate: add --in-place optionJason A. Donenfeld4-9/+33