Skip to content

Commit a950179

Browse files
committed
[IMP] mail, im_livechat: manage downgrade of local storage
This commit adds versioning to local storage entries, so that when version is more recent than current version, business code can have a strategy to drop the values. This strategy is the one used by local storage field: older versions are most updated and upgraded fields so 19.1 is implicitly valid for 19.2 and 19.3. 20.0 is invalid as it can potentially be affected by unknown upgrade scripts of current version (19.3), thus it's dropped. Part of Task-5003012
1 parent 12aa6aa commit a950179

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

addons/mail/static/src/model/model_internal.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { toRaw } from "@odoo/owl";
22
import { ATTR_SYM, MANY_SYM, ONE_SYM } from "./misc";
3+
import { parseVersion } from "@mail/utils/common/misc";
4+
import { getCurrentLocalStorageVersion } from "@mail/utils/common/local_storage";
35

46
export class ModelInternal {
57
/** @type {Map<string, boolean>} */
@@ -76,7 +78,8 @@ export class ModelInternal {
7678
const record = toRaw(this)._raw;
7779
const lse = record._.fieldsLocalStorage.get(fieldName);
7880
const parsed = lse.parse();
79-
if (!parsed) {
81+
const currentOdooVersion = getCurrentLocalStorageVersion();
82+
if (!parsed || parseVersion(currentOdooVersion).isLowerThan(parsed.version)) {
8083
lse.remove();
8184
return this[fieldName];
8285
}

addons/mail/static/src/model/store_internal.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { RecordInternal } from "./record_internal";
66
import { deserializeDate, deserializeDateTime } from "@web/core/l10n/dates";
77
import { IS_DELETED_SYM, isCommand, isMany } from "./misc";
88
import { browser } from "@web/core/browser/browser";
9-
import { parseRawValue } from "@mail/utils/common/local_storage";
9+
import { getCurrentLocalStorageVersion, parseRawValue } from "@mail/utils/common/local_storage";
1010

1111
const Markup = markup().constructor;
1212

@@ -55,7 +55,7 @@ export class StoreInternal extends RecordInternal {
5555
record._proxy[fieldName] = record._.fieldsDefault.get(fieldName);
5656
} else {
5757
const parsed = parseRawValue(ev.newValue);
58-
if (!parsed) {
58+
if (!parsed || parsed.version !== getCurrentLocalStorageVersion()) {
5959
record._proxy[fieldName] = record._.fieldsDefault.get(fieldName);
6060
} else {
6161
record._proxy[fieldName] = parsed.value;

addons/mail/static/src/utils/common/local_storage.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ export class LocalStorageEntry {
3131
parse() {
3232
return parseRawValue(this.get());
3333
}
34-
set(value) {
34+
set(value, version = getCurrentLocalStorageVersion()) {
3535
const parsed = this.parse();
36-
if (parsed && parsed.value === value) {
36+
if (parsed && parsed.value === value && parsed.version === version) {
3737
return;
3838
}
39-
browser.localStorage.setItem(this.key, toRawValue(value));
39+
browser.localStorage.setItem(this.key, toRawValue(value, version));
4040
}
4141
remove() {
4242
if (this.get() === null) {
@@ -46,8 +46,8 @@ export class LocalStorageEntry {
4646
}
4747
}
4848

49-
export function toRawValue(value) {
50-
return JSON.stringify({ value });
49+
export function toRawValue(value, version = getCurrentLocalStorageVersion()) {
50+
return JSON.stringify({ value, version });
5151
}
5252

5353
/**

0 commit comments

Comments
 (0)