From 0fb4951138ef314b44d554e1c858ba8bb0e9b9ac Mon Sep 17 00:00:00 2001 From: ansuz Date: Mon, 11 Jan 2021 20:58:19 +0530 Subject: [PATCH 1/5] update version strings to 3.25.1 --- customize.dist/pages.js | 2 +- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/customize.dist/pages.js b/customize.dist/pages.js index 4eef2aa8f..831696d39 100644 --- a/customize.dist/pages.js +++ b/customize.dist/pages.js @@ -62,7 +62,7 @@ define([ var imprintUrl = AppConfig.imprint && (typeof(AppConfig.imprint) === "boolean" ? '/imprint.html' : AppConfig.imprint); - Pages.versionString = "CryptPad v3.25.0 (ZyzomysPedunculatus)"; + Pages.versionString = "CryptPad v3.25.1 (ZyzomysPedunculatus' revenge)"; // used for the about menu Pages.imprintLink = AppConfig.imprint ? footLink(imprintUrl, 'imprint') : undefined; diff --git a/package-lock.json b/package-lock.json index 2c64d8307..ecdbfb9a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cryptpad", - "version": "3.25.0", + "version": "3.25.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0d52d70fe..da46e4353 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cryptpad", "description": "realtime collaborative visual editor with zero knowlege server", - "version": "3.25.0", + "version": "3.25.1", "license": "AGPL-3.0+", "repository": { "type": "git", From fe3d2b69f53648554a169d9f566546a4b29a685b Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 12 Jan 2021 13:46:52 +0530 Subject: [PATCH 2/5] update changelog for 3.25.1 --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d267f497c..7a51b1ef9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,33 @@ +# ZyzomysPedunculatus' revenge (3.25.1) + +This minor release is primarily intended to fix some minor issues that were introduced or detected following our 3.25.0 release, but it also includes some major improvements that we want to test and stabilize before our upcoming 4.0.0 release. + +Features + +* Our recent introduction of a clientside cache for document content now allows us to load and display a readable copy of a document before the most recent history has been fully loaded from the server. You might notice that your drive and some document typees are now displayed in a "DISCONNECTED" of "OFFLINE" state until they gets the latest history. For now this just means the loading screen is removed soon so you can start reading, but it's also an essential improvement that will become even more useful when we introduce the use of service-workers for offline usage. +* We've added an `offline` mode to the server so that anyone developing features in CryptPad can test its offline and caching features by disabling the websocket components of the server. Use `npm run offline` to launch in this mode. +* We spent some time improving the support ticket components of the administration panel. Tickets are now shown in four categories: tickets from premium users, tickets from non-paying users, answered tickets, and closed tickets. +* We also improved the readability of some of the server's activity logs by rounding off some numbers to display fewer decimal points. On a related note, log events indicating the completion of a file upload now display the size of the uploaded file. +* Errors that occur when loading teams now trigger some basic telemetry to the server to indicate the error code. This should help us determine the origin of some annoying teams issues that several users have reported. +* Users of the rich text editor should now find that their scroll position is now maintained when they are at the bottom of the document and a remote users adds more text. + +Bug fixes + +* Shortly after deploying 3.25.0 we identified several cases in which its cache invalidation logic was not correctly detecting corrupted cache entries. This caused some documents to fail to load. We quickly disabled most caching until we got the chance to review. Since then, we've tested it much more thoroughly under situations which made it more likely to become corrupt. Our new cache invalidation logic seems to catch all the known cases, so we're re-enabling the use of the cache for encrypted files and most of our supported document types. +* We found that a race condition in the logout process prevented the document cache from being cleared correctly. We now wait until the asynchronous cache eviction process completes before redirecting users to the login page. +* We discovered that the `postMessage` API by which CryptPad's different iframes and workers communicate could not serialize certain error messages after recent changes. We've added some special logic to send such messages in a valid format as well as some extra error handling to better recover from and report failed transmissions. +* In cases where user avatars fail to load (due to network issues or 404s) the first letter of the user's display name will be displayed instead +* We found that shared folders were reconnecting to the server correctly after a network failure, however, some changes in the UI caused clients to incorrectly remain locked. +* Some recent refactoring of some styles caused some buttons on the login page to inherit bootstrap's styles instead of our custom ones. +* A third-party admin brought it to our attention that a library that was used for some development tests was being fetched via http instead of https, and was thus blocked by some of their local configuration parameters. We've updated its source to load via secure protocols only. + +To update from 3.25.0 to 3.25.1: + +1. Stop your server +2. Get the latest code with `git checkout 3.25.1` +3. Install the latest dependencies with `bower update` and `npm i` +4. Restart your server + # ZyzomysPedunculatus (3.25.0) ## Goals From 98acca0c0edbf8f53001a71a3a67f5679cc3c085 Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 12 Jan 2021 13:09:47 +0100 Subject: [PATCH 3/5] Fix drive reconnect error --- www/common/outer/async-store.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index 0d8546289..f11c55280 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -2773,12 +2773,14 @@ define([ }); }, 5000); - store.networkPromise.then(function () { - clearTimeout(to); - }, function (err) { - console.error(err); - clearTimeout(to); - }); + if (store.networkPromise && store.networkPromise.then) { + store.networkPromise.then(function () { + clearTimeout(to); + }, function (err) { + console.error(err); + clearTimeout(to); + }); + } if (!data.cache) { return; } From b8b23735129c6143d07efbcc208e38a0d725d62e Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 12 Jan 2021 14:05:43 +0100 Subject: [PATCH 4/5] Fix slides colors reset --- www/slide/inner.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/www/slide/inner.js b/www/slide/inner.js index de30eb9fc..e3070118e 100644 --- a/www/slide/inner.js +++ b/www/slide/inner.js @@ -357,7 +357,7 @@ define([ }; var updateLocalColors = function (text, back) { updateColors(text, back); - var metadata = JSON.parse(JSON.stringify(metadataMgr.getMetadata())); + var metadata = JSON.parse(JSON.stringify(metadataMgr.getMetadataLazy())); if (backColor) { metadata.backColor = backColor; } if (textColor) { metadata.color = textColor; } metadataMgr.updateMetadata(metadata); @@ -527,8 +527,6 @@ define([ if (newPad) { colors.updateLocalColors('#000', '#FFF'); - } else { - colors.updateLocalColors('#FFF', '#000'); } CodeMirror.setMode('markdown', function () { }); From 87a7669f29c762593eab4431082b9066d72cde85 Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 12 Jan 2021 14:10:51 +0100 Subject: [PATCH 5/5] Fix timeout issue on cacheready --- www/common/outer/async-store.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index f11c55280..1745d0dd7 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -2765,15 +2765,15 @@ define([ store.networkPromise = info.networkPromise; store.cacheReturned = returned; - // Check if we can connect - var to = setTimeout(function () { - store.networkTimeout = true; - broadcast([], "LOADING_DRIVE", { - type: "offline" - }); - }, 5000); - if (store.networkPromise && store.networkPromise.then) { + // Check if we can connect + var to = setTimeout(function () { + store.networkTimeout = true; + broadcast([], "LOADING_DRIVE", { + type: "offline" + }); + }, 5000); + store.networkPromise.then(function () { clearTimeout(to); }, function (err) {