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
This commit is contained in:
Cédric Krier committed 2021-12-21 23:24:05 +01:00
1 parent ff5cfcdcea
commit 2b31bca469
1 file changed
+13 -4
+13 -4
View File
@@ -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) {