From c1fbae6e0f5981d4d60f5b614d5d195ae5cde4a8 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Thu, 23 Apr 2020 23:39:20 +0200 Subject: A mailbox may exist, but not be writable when \Noselect is set --- internal/imap/connection.go | 7 ++++--- internal/util/util.go | 11 +++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 internal/util/util.go diff --git a/internal/imap/connection.go b/internal/imap/connection.go index e0360bd..88b1496 100644 --- a/internal/imap/connection.go +++ b/internal/imap/connection.go @@ -9,6 +9,7 @@ import ( imapClient "github.com/emersion/go-imap/client" "github.com/Necoro/feed2imap-go/internal/log" + "github.com/Necoro/feed2imap-go/internal/util" ) type connection struct { @@ -109,10 +110,10 @@ func (conn *connection) ensureFolder(folder Folder) error { panic("Delimiters do not match") } - switch found { - case 0: + switch { + case found == 0 || (found == 1 && util.StrContains(mbox.Attributes, imap.NoSelectAttr)): return conn.createFolder(folder.str) - case 1: + case found == 1: conn.mailboxes.add(mbox) return nil default: diff --git a/internal/util/util.go b/internal/util/util.go new file mode 100644 index 0000000..c5472ab --- /dev/null +++ b/internal/util/util.go @@ -0,0 +1,11 @@ +package util + +func StrContains(haystack []string, needle string) bool { + for _, s := range haystack { + if s == needle { + return true + } + } + + return false +} -- cgit v1.2.3-54-g00ecf