GODT-1740: Opt-out All Mail visibility in settings file.

This commit is contained in:
Jakub
2022-07-28 10:52:40 +02:00
parent 252ca9a5f9
commit 8b39ea4acb
9 changed files with 100 additions and 13 deletions

View File

@ -57,8 +57,9 @@ type Bridge struct {
// Bridge's global errors list.
errors []error
isFirstStart bool
lastVersion string
isAllMailVisible bool
isFirstStart bool
lastVersion string
}
func New(
@ -92,15 +93,16 @@ func New(
)
b := &Bridge{
Users: u,
locations: locations,
settings: setting,
clientManager: clientManager,
updater: updater,
versioner: versioner,
cacheProvider: cacheProvider,
autostart: autostart,
isFirstStart: false,
Users: u,
locations: locations,
settings: setting,
clientManager: clientManager,
updater: updater,
versioner: versioner,
cacheProvider: cacheProvider,
autostart: autostart,
isFirstStart: false,
isAllMailVisible: setting.GetBool(settings.IsAllMailVisible),
}
if setting.GetBool(settings.FirstStartKey) {
@ -302,3 +304,14 @@ func (b *Bridge) GetLastVersion() string {
func (b *Bridge) IsFirstStart() bool {
return b.isFirstStart
}
// IsAllMailVisible can be called extensively by IMAP. Therefore, it is better
// to cache the value instead of reading from settings file.
func (b *Bridge) IsAllMailVisible() bool {
return b.isAllMailVisible
}
func (b *Bridge) SetIsAllMailVisible(isVisible bool) {
b.settings.SetBool(settings.IsAllMailVisible, isVisible)
b.isAllMailVisible = isVisible
}

View File

@ -55,6 +55,7 @@ const (
AttachmentWorkers = "attachment_workers"
ColorScheme = "color_scheme"
RebrandingMigrationKey = "rebranding_migrated"
IsAllMailVisible = "is_all_mail_visible"
)
type Settings struct {
@ -110,4 +111,6 @@ func (s *Settings) setDefaultValues() {
// By default, stick to STARTTLS. If the user uses catalina+applemail they'll have to change to SSL.
s.setDefault(SMTPSSLKey, "false")
s.setDefault(IsAllMailVisible, "true")
}

View File

@ -31,6 +31,7 @@ type cacheProvider interface {
type bridger interface {
GetUser(query string) (bridgeUser, error)
HasError(err error) bool
IsAllMailVisible() bool
}
type bridgeUser interface {

View File

@ -128,6 +128,10 @@ func (iu *imapUser) ListMailboxes(showOnlySubcribed bool) ([]goIMAPBackend.Mailb
mailboxes := []goIMAPBackend.Mailbox{}
for _, storeMailbox := range iu.storeAddress.ListMailboxes() {
if storeMailbox.LabelID() == pmapi.AllMailLabel && !iu.backend.bridge.IsAllMailVisible() {
continue
}
if showOnlySubcribed && !iu.isSubscribed(storeMailbox.LabelID()) {
continue
}