diff --git a/.docker/release/files/usr/local/include/application.ini b/.docker/release/files/usr/local/include/application.ini
index bce5d0f3e..2a8958eea 100644
--- a/.docker/release/files/usr/local/include/application.ini
+++ b/.docker/release/files/usr/local/include/application.ini
@@ -305,5 +305,5 @@ dev_email = ""
dev_password = ""
[version]
-current = "2.24.4"
+current = "2.24.5"
saved = "Sun, 18 Dec 2022 22:10:48 +0000"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4d0457f06..2cd8494e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,48 @@
+## 2.24.5 – 2023-01-12
+
+## Added
+- Support for search criterias ON, SENTON, SENTSINCE and SENTBEFORE
+- New 'forward as attachment' glyph
+- NC integration app metadata: add links to admin and dev docs by @p-bo
+ [#820](https://github.com/the-djmaze/snappymail/pull/820)
+- Clicking on messagelist grouped date/from searches on that date/from
+ [#815](https://github.com/the-djmaze/snappymail/pull/815)
+- Nextcloud Improved file picker layout
+ [#825](https://github.com/the-djmaze/snappymail/pull/825)
+
+## Changed
+- Move release.php to cli/release.php
+- Moved sort options "FROM" direct below "DATE" for better understanding
+- Added DAV path error to log for
+ [#822](https://github.com/the-djmaze/snappymail/pull/822)
+- Resolve layout issues by changing from `fixed` to `relative`
+ [#686](https://github.com/the-djmaze/snappymail/pull/686)
+- Cache handling of messagelist changed due to etag issues
+- Improve german and italian translation by @cm-schl
+ [#846](https://github.com/the-djmaze/snappymail/pull/846)
+
+## Fixed
+- Searching on Nextcloud search #787
+ [#787](https://github.com/the-djmaze/snappymail/pull/787)
+- Workaround another Nextcloud disallowed .htaccess
+ [#790](https://github.com/the-djmaze/snappymail/pull/790)
+- Compact display of folders in nextcloud by @makoehr
+ [#824](https://github.com/the-djmaze/snappymail/pull/824)
+- Admin -> Contacts PDO test failed when using different AddressBookInterface
+- KolabAddressBook errors
+- Forgot debug js/css setting change in Nextcloud
+- Typed property MailSo\Mail\MessageListParams::$sSearch must not be accessed before initialization
+- Unable to change font/text colour when composing message using Safari
+ [#826](https://github.com/the-djmaze/snappymail/pull/826)
+- auth_logging failed
+ [#489](https://github.com/the-djmaze/snappymail/pull/489)
+- Class "RainLoop\Actions\Notifications" not found
+ [#839](https://github.com/the-djmaze/snappymail/pull/839)
+
+### Removed
+- 'set-version' argument for release.php
+
+
## 2.24.4 – 2022-12-30
## Added
diff --git a/README.md b/README.md
index 09d9b3059..3420609ac 100644
--- a/README.md
+++ b/README.md
@@ -141,26 +141,26 @@ RainLoop 1.17 vs SnappyMail
|js/* |RainLoop |Snappy |
|--------------- |--------: |--------: |
-|admin.js |2.170.153 | 82.149 |
-|app.js |4.207.787 | 412.196 |
+|admin.js |2.170.153 | 82.218 |
+|app.js |4.207.787 | 412.596 |
|boot.js | 868.735 | 2.427 |
-|libs.js | 658.812 | 191.117 |
-|sieve.js | 0 | 86.018 |
+|libs.js | 658.812 | 191.301 |
+|sieve.js | 0 | 85.960 |
|polyfills.js | 334.608 | 0 |
|serviceworker.js | 0 | 285 |
-|TOTAL |8.240.095 | 774.192 |
+|TOTAL |8.240.095 | 774.787 |
|js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|--------------- |--------: |--------: |------: |------: |--------: |--------: |
-|admin.min.js | 256.831 | 40.838 | 73.606 | 13.444 | 60.877 | 12.045 |
-|app.min.js | 515.367 | 189.971 |139.456 | 63.463 |110.485 | 54.430 |
+|admin.min.js | 256.831 | 40.756 | 73.606 | 13.419 | 60.877 | 12.018 |
+|app.min.js | 515.367 | 190.149 |139.456 | 63.499 |110.485 | 54.471 |
|boot.min.js | 84.659 | 1.518 | 26.998 | 919 | 23.643 | 747 |
-|libs.min.js | 584.772 | 90.689 |180.901 | 33.597 |155.182 | 30.118 |
-|sieve.min.js | 0 | 41.909 | 0 | 10.476 | 0 | 9.461 |
+|libs.min.js | 584.772 | 90.768 |180.901 | 33.615 |155.182 | 30.170 |
+|sieve.min.js | 0 | 41.905 | 0 | 10.477 | 0 | 9.456 |
|polyfills.min.js | 32.837 | 0 | 11.406 | 0 | 10.175 | 0 |
-|TOTAL user |1.217.635 | 282.178 |358.761 | 97.979 |299.485 | 85.295 |
-|TOTAL user+sieve |1.217.635 | 324.087 |358.761 |108.455 |299.485 | 94.756 |
-|TOTAL admin | 959.099 | 133.045 |292.911 | 47.960 |249.877 | 42.910 |
+|TOTAL user |1.217.635 | 282.435 |358.761 | 98.033 |299.485 | 85.388 |
+|TOTAL user+sieve |1.217.635 | 324.340 |358.761 |108.510 |299.485 | 94.844 |
+|TOTAL admin | 959.099 | 133.042 |292.911 | 47.953 |249.877 | 42.935 |
For a user its around 70% smaller and faster than traditional RainLoop.
@@ -189,12 +189,12 @@ For a user its around 70% smaller and faster than traditional RainLoop.
|css/* |RainLoop |Snappy |RL gzip |SM gzip |SM brotli |
|------------ |-------: |------: |------: |------: |--------: |
-|app.css | 340.331 | 82.646 | 46.946 | 17.143 | 14.703 |
-|app.min.css | 274.947 | 66.615 | 39.647 | 15.115 | 13.255 |
+|app.css | 340.331 | 82.794 | 46.946 | 17.185 | 14.735 |
+|app.min.css | 274.947 | 66.702 | 39.647 | 15.146 | 13.290 |
|boot.css | | 1.326 | | 664 | 545 |
|boot.min.css | | 1.071 | | 590 | 474 |
-|admin.css | | 30.277 | | 6.901 | 5.999 |
-|admin.min.css | | 24.524 | | 6.238 | 5.503 |
+|admin.css | | 30.281 | | 6.906 | 5.999 |
+|admin.min.css | | 24.493 | | 6.233 | 5.501 |
### PGP
RainLoop uses the old OpenPGP.js v2
diff --git a/build/plugins.php b/build/plugins.php
index ab1b5b64d..bf850b802 100755
--- a/build/plugins.php
+++ b/build/plugins.php
@@ -70,6 +70,7 @@ foreach (glob(ROOT_DIR . '/plugins/*', GLOB_NOSORT | GLOB_ONLYDIR) as $dir) {
$tar->compress(Phar::GZ);
unlink($tar_destination);
rename("{$tar_destination}.gz", $tgz_destination);
+/*
if (Phar::canWrite()) {
$phar_destination = PLUGINS_DEST_DIR . "/{$name}.phar";
@unlink($phar_destination);
@@ -79,6 +80,7 @@ foreach (glob(ROOT_DIR . '/plugins/*', GLOB_NOSORT | GLOB_ONLYDIR) as $dir) {
unlink($phar_destination);
rename("{$phar_destination}.gz", $phar_destination);
}
+*/
if (isset($options['sign'])) {
passthru('gpg --local-user 1016E47079145542F8BA133548208BA13290F3EB --armor --detach-sign '.escapeshellarg($tgz_destination), $return_var);
$manifest_item['pgp_sig'] = trim(preg_replace('/-----(BEGIN|END) PGP SIGNATURE-----/', '', file_get_contents($tgz_destination.'.asc')));
diff --git a/cli/release.php b/cli/release.php
index 6ac753d24..a759bf8ae 100755
--- a/cli/release.php
+++ b/cli/release.php
@@ -3,7 +3,7 @@
define('ROOT_DIR', dirname(__DIR__));
chdir(ROOT_DIR);
-$options = getopt('', ['aur','docker','plugins','skip-gulp','debian','nextcloud','owncloud','sign']);
+$options = getopt('', ['aur','docker','plugins','skip-gulp','debian','nextcloud','owncloud','cpanel','sign']);
if (isset($options['plugins'])) {
require(ROOT_DIR . '/build/plugins.php');
diff --git a/integrations/cloudron/DESCRIPTION.md b/integrations/cloudron/DESCRIPTION.md
index 396d1936b..fceaddb2c 100644
--- a/integrations/cloudron/DESCRIPTION.md
+++ b/integrations/cloudron/DESCRIPTION.md
@@ -1,4 +1,4 @@
-This app packages SnappyMail 2.24.4.
+This app packages SnappyMail 2.24.5.
SnappyMail is a simple, modern, lightweight & fast web-based email client.
diff --git a/integrations/cloudron/Dockerfile b/integrations/cloudron/Dockerfile
index 960643234..6195ceb9e 100644
--- a/integrations/cloudron/Dockerfile
+++ b/integrations/cloudron/Dockerfile
@@ -4,7 +4,7 @@ RUN mkdir -p /app/code
WORKDIR /app/code
# If you change the extraction below, be sure to test on scaleway
-VERSION=2.24.4
+VERSION=2.24.5
RUN wget https://github.com/the-djmaze/snappymail/releases/download/v${VERSION}/snappymail-${VERSION}.zip -O /tmp/snappymail.zip && \
unzip /tmp/snappymail.zip -d /app/code && \
rm /tmp/snappymail.zip && \
diff --git a/integrations/nextcloud/snappymail/appinfo/info.xml b/integrations/nextcloud/snappymail/appinfo/info.xml
index 48def463a..e6f5c6fd6 100644
--- a/integrations/nextcloud/snappymail/appinfo/info.xml
+++ b/integrations/nextcloud/snappymail/appinfo/info.xml
@@ -3,7 +3,7 @@
snappymail
SnappyMail
SnappyMail Webmail
- 2.24.4
+ 2.24.5
agpl
SnappyMail, RainLoop Team, Nextgen-Networks, Tab Fitts, Nathan Kinkade, Pierre-Alain Bandinelli
{
- setIdenticon(msg.from[0], fn);
+ msg.from?.[0] && setIdenticon(msg.from[0], fn);
if (rl.pluginSettingsGet('avatars', 'delay')) {
queue.push([msg, fn]);
runQueue();
@@ -75,31 +75,33 @@
runQueue = (() => {
let item = queue.shift();
while (item) {
- let url = getAvatar(item[0]),
- uid = getAvatarUid(item[0]);
- if (url) {
- item[1](url);
- item = queue.shift();
- } else if (!avatars.has(uid)) {
- let from = item[0].from[0];
- rl.pluginRemoteRequest((iError, data) => {
- if (!iError && data?.Result.type) {
- url = `data:${data.Result.type};base64,${data.Result.data}`;
- avatars.set(uid, url);
- item[1](url);
- } else {
- avatars.set(uid, '');
- }
- runQueue();
- }, 'Avatar', {
- bimi: 'pass' == from.dkimStatus ? 1 : 0,
- email: from.email
- });
- break;
- } else {
- runQueue();
- break;
+ if (item[0].from) {
+ let url = getAvatar(item[0]),
+ uid = getAvatarUid(item[0]);
+ if (url) {
+ item[1](url);
+ item = queue.shift();
+ continue;
+ } else if (!avatars.has(uid)) {
+ let from = item[0].from[0];
+ rl.pluginRemoteRequest((iError, data) => {
+ if (!iError && data?.Result.type) {
+ url = `data:${data.Result.type};base64,${data.Result.data}`;
+ avatars.set(uid, url);
+ item[1](url);
+ } else {
+ avatars.set(uid, '');
+ }
+ runQueue();
+ }, 'Avatar', {
+ bimi: 'pass' == from.dkimStatus ? 1 : 0,
+ email: from.email
+ });
+ break;
+ }
}
+ runQueue();
+ break;
}
}).debounce(1000);
@@ -204,7 +206,7 @@
view.message.subscribe(msg => {
view.viewUserPicVisible(false);
if (msg) {
- let url = getAvatar(msg),
+ let url = msg.from?.[0] ? getAvatar(msg) : 0,
fn = url => {
view.viewUserPic(url);
view.viewUserPicVisible(true);
diff --git a/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsAbout.html b/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsAbout.html
index 8264d22c8..656120ba7 100644
--- a/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsAbout.html
+++ b/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsAbout.html
@@ -4,7 +4,7 @@