From 2b31bca4692e518740ce41265d4459d33b5e3094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 21 Dec 2021 23:24:05 +0100 Subject: [PATCH] Do not stringify binary data For the identify only the size matter to refresh the display. And to detect change, we can compare the Uint8Array between them or with the size. issue10994 review360581002 --- src/model.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/model.js b/src/model.js index 9eb2ef570b..ed7636c903 100644 --- a/src/model.js +++ b/src/model.js @@ -1423,7 +1423,11 @@ Object.keys(this._values).reduce(function(values, name) { var field = this.model.fields[name]; if (field) { - values[name] = field.get(this); + if (field instanceof Sao.field.Binary) { + values[name] = field.get_size(this); + } else { + values[name] = field.get(this); + } } return values; }.bind(this), {})); @@ -1556,12 +1560,14 @@ } return value; }, + _has_changed: function(previous, value) { + // Use stringify to compare object instance like Number for Decimal + return JSON.stringify(previous) != JSON.stringify(value); + }, set_client: function(record, value, force_change) { var previous_value = this.get(record); this.set(record, value); - // Use stringify to compare object instance like Number for Decimal - if (JSON.stringify(previous_value) != - JSON.stringify(this.get(record))) { + if (this._has_changed(previous_value, this.get(record))) { record._changed[this.name] = true; this.changed(record); record.validate(null, true, false, true); @@ -2733,6 +2739,9 @@ Sao.field.Binary = Sao.class_(Sao.field.Field, { _default: null, + _has_changed: function(previous, value) { + return previous != value; + }, get_size: function(record) { var data = record._values[this.name] || 0; if (data instanceof Uint8Array) {