From 13c23141ee40fd33fd20dfd7c59f77b2c554441c Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Tue, 14 Nov 2023 16:49:38 +0100 Subject: [PATCH] Resolve #1303 And STATUS SIZE is part of RFC 8438, not RFC 9051 --- dev/Model/FolderCollection.js | 5 +++++ dev/Styles/User/SettingsFolders.less | 3 ++- dev/View/Popup/Domain.js | 2 ++ snappymail/v/0.0.0/app/domains/default.json | 1 + .../0.0.0/app/libraries/MailSo/Imap/Commands/Folders.php | 9 ++++----- .../libraries/MailSo/Imap/Enumerations/FolderStatus.php | 4 ++-- snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php | 1 + .../v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php | 4 ++++ .../v/0.0.0/app/libraries/MailSo/Imap/Settings.php | 4 ++++ .../v/0.0.0/app/libraries/MailSo/Imap/Traits/Status.php | 2 +- .../v/0.0.0/app/templates/Views/Admin/PopupsDomain.html | 7 +++++++ .../app/templates/Views/User/SettingsFolderItem.html | 1 + 12 files changed, 34 insertions(+), 9 deletions(-) diff --git a/dev/Model/FolderCollection.js b/dev/Model/FolderCollection.js index 52cda31e5..4403caa25 100644 --- a/dev/Model/FolderCollection.js +++ b/dev/Model/FolderCollection.js @@ -25,6 +25,8 @@ import { /*koComputable,*/ addObservablesTo } from 'External/ko'; import Remote from 'Remote/User/Fetch'; +import { FileInfo } from 'Common/File'; + const // isPosNumeric = value => null != value && /^[0-9]*$/.test(value.toString()), @@ -304,6 +306,7 @@ export class FolderModel extends AbstractModel { this.etag = ''; this.id = 0; this.uidNext = 0; + this.size = 0; addObservablesTo(this, { name: '', @@ -456,6 +459,8 @@ export class FolderModel extends AbstractModel { return ''; }, + friendlySize: () => FileInfo.friendlySize(this.size), + detailedName: () => this.name() + ' ' + this.nameInfo(), hasSubscribedUnreadMessagesSubfolders: () => diff --git a/dev/Styles/User/SettingsFolders.less b/dev/Styles/User/SettingsFolders.less index f6c08daa5..026a651df 100644 --- a/dev/Styles/User/SettingsFolders.less +++ b/dev/Styles/User/SettingsFolders.less @@ -19,7 +19,8 @@ white-space: pre-wrap; } - .folder-system-name { + .folder-system-name, .folder-size { + margin-left: 0.2em; opacity: 0.6; } diff --git a/dev/View/Popup/Domain.js b/dev/View/Popup/Domain.js index c984ee019..0da270f42 100644 --- a/dev/View/Popup/Domain.js +++ b/dev/View/Popup/Domain.js @@ -36,6 +36,7 @@ const imapDisable_sort: false, imapDisable_thread: false, imapDisable_binary: false, + imapDisable_status_size: true, imapExpunge_all_on_delete: false, imapFast_simple_search: true, imapFetch_new_messages: true, @@ -86,6 +87,7 @@ const disable_sort: !!oDomain.imapDisable_sort(), disable_thread: !!oDomain.imapDisable_thread(), disable_binary: !!oDomain.imapDisable_binary(), + disable_status_size: !!oDomain.imapDisable_status_size(), folder_list_limit: pInt(oDomain.imapFolder_list_limit()), message_list_limit: pInt(oDomain.imapMessage_list_limit()) /* diff --git a/snappymail/v/0.0.0/app/domains/default.json b/snappymail/v/0.0.0/app/domains/default.json index b2d2358bd..840103e33 100644 --- a/snappymail/v/0.0.0/app/domains/default.json +++ b/snappymail/v/0.0.0/app/domains/default.json @@ -28,6 +28,7 @@ "disable_sort": false, "disable_thread": false, "disable_binary": false, + "disable_status_size": true, "use_expunge_all_on_delete": false, "fast_simple_search": true, "force_select": false, diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Folders.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Folders.php index a0017950b..9cd2198b8 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Folders.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Folders.php @@ -143,6 +143,10 @@ trait Folders if ($this->hasCapability('APPENDLIMIT')) { $aStatusItems[] = FolderStatus::APPENDLIMIT; } + // RFC 8438 + if ($this->hasCapability('STATUS=SIZE')) { + $aStatusItems[] = FolderStatus::SIZE; + } // RFC 8474 if ($this->hasCapability('OBJECTID')) { $aStatusItems[] = FolderStatus::MAILBOXID; @@ -151,11 +155,6 @@ trait Folders $aStatusItems[] = 'X-GUID'; */ } -/* // STATUS SIZE can take a significant amount of time, therefore not active - if ($this->hasCapability('IMAP4rev2')) { - $aStatusItems[] = FolderStatus::SIZE; - } -*/ return $aStatusItems; } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php index fbda96815..e6c3390a3 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php @@ -28,8 +28,8 @@ abstract class FolderStatus const HIGHESTMODSEQ = 'HIGHESTMODSEQ'; // RFC 7889 const APPENDLIMIT = 'APPENDLIMIT'; + // RFC 8438 + const SIZE = 'SIZE'; // RFC 8474 const MAILBOXID = 'MAILBOXID'; - // RFC 9051 IMAP4rev2 - const SIZE = 'SIZE'; } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php index e53fb887d..879ad556a 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php @@ -164,6 +164,7 @@ class Folder implements \JsonSerializable 'totalEmails' => $this->MESSAGES, 'unreadEmails' => $this->UNSEEN, 'id' => $this->MAILBOXID, + 'size' => $this->SIZE, 'role' => $this->Role() /* 'myRights' => [ diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php index 0e7a1c747..71ffdd160 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php @@ -325,6 +325,10 @@ class ImapClient extends \MailSo\Net\NetClient } if (8 > PHP_INT_SIZE) { $aList = \array_diff($aList, ['CONDSTORE']); + $aList = \array_diff($aList, ['STATUS=SIZE']); + } + if ($this->Settings->disable_status_size) { + $aList = \array_diff($aList, ['STATUS=SIZE']); } } $this->aCapabilityItems = $aList; diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php index c50d3767b..66e88ce0e 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php @@ -28,6 +28,8 @@ class Settings extends \MailSo\Net\ConnectSettings $disable_sort = false, $disable_thread = false, $disable_binary = false, + // STATUS SIZE can take a significant amount of time, therefore not active by default + $disable_status_size = true, $expunge_all_on_delete = false, $fast_simple_search = true, $fetch_new_messages = true, @@ -53,6 +55,7 @@ class Settings extends \MailSo\Net\ConnectSettings 'disable_sort', 'disable_thread', 'disable_binary', + 'disable_status_size', 'expunge_all_on_delete', 'fast_simple_search', 'fetch_new_messages', @@ -91,6 +94,7 @@ class Settings extends \MailSo\Net\ConnectSettings 'disable_sort' => $this->disable_sort, 'disable_thread' => $this->disable_thread, 'disable_binary' => $this->disable_binary, + 'disable_status_size' => $this->disable_status_size, 'use_expunge_all_on_delete' => $this->expunge_all_on_delete, // 'body_text_limit' => $this->body_text_limit, 'fast_simple_search' => $this->fast_simple_search, diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/Status.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/Status.php index 1a3f2f612..4a667b9ef 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/Status.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/Status.php @@ -82,7 +82,7 @@ trait Status public ?string $MAILBOXID = null; /** - * RFC 9051 + * RFC 8438 * The total size of the mailbox in octets. */ public ?int $SIZE = null; diff --git a/snappymail/v/0.0.0/app/templates/Views/Admin/PopupsDomain.html b/snappymail/v/0.0.0/app/templates/Views/Admin/PopupsDomain.html index bb015038c..cf4cf855d 100644 --- a/snappymail/v/0.0.0/app/templates/Views/Admin/PopupsDomain.html +++ b/snappymail/v/0.0.0/app/templates/Views/Admin/PopupsDomain.html @@ -121,6 +121,13 @@ label: 'BINARY' } }"> +