Commit cf3898a5 authored by Tristan Cavelier's avatar Tristan Cavelier

erp5_core: Update jio.js to version 3.16.0

parent bb4af52d
...@@ -8462,6 +8462,12 @@ return new Parser; ...@@ -8462,6 +8462,12 @@ return new Parser;
}); });
this._use_remote_post = spec.use_remote_post || false; this._use_remote_post = spec.use_remote_post || false;
// Number of request we allow browser execution for attachments
this._parallel_operation_attachment_amount =
spec.parallel_operation_attachment_amount || 1;
// Number of request we allow browser execution for documents
this._parallel_operation_amount =
spec.parallel_operation_amount || 1;
this._conflict_handling = spec.conflict_handling || 0; this._conflict_handling = spec.conflict_handling || 0;
// 0: no resolution (ie, throw an Error) // 0: no resolution (ie, throw an Error)
...@@ -8604,6 +8610,32 @@ return new Parser; ...@@ -8604,6 +8610,32 @@ return new Parser;
// Do not sync the signature document // Do not sync the signature document
skip_document_dict[context._signature_hash] = null; skip_document_dict[context._signature_hash] = null;
function dispatchQueue(function_used, argument_list, number_queue) {
var result_promise_list = [],
i;
function pushAndExecute(queue) {
queue
.push(function () {
if (argument_list.length > 0) {
var argument_array = argument_list.shift(),
sub_queue = new RSVP.Queue();
argument_array[0] = sub_queue;
function_used.apply(context, argument_array);
pushAndExecute(queue);
return sub_queue;
}
});
}
for (i = 0; i < number_queue; i += 1) {
result_promise_list.push(new RSVP.Queue());
pushAndExecute(result_promise_list[i]);
}
if (number_queue > 1) {
return RSVP.all(result_promise_list);
}
return result_promise_list[0];
}
function propagateAttachmentDeletion(skip_attachment_dict, function propagateAttachmentDeletion(skip_attachment_dict,
destination, destination,
...@@ -8724,8 +8756,8 @@ return new Parser; ...@@ -8724,8 +8756,8 @@ return new Parser;
}); });
} }
function checkAttachmentSignatureDifference(skip_attachment_dict, function checkAttachmentSignatureDifference(queue, skip_attachment_dict,
queue, source, source,
destination, id, name, destination, id, name,
conflict_force, conflict_force,
conflict_revert, conflict_revert,
...@@ -8775,8 +8807,8 @@ return new Parser; ...@@ -8775,8 +8807,8 @@ return new Parser;
}); });
} }
function checkAttachmentLocalDeletion(skip_attachment_dict, function checkAttachmentLocalDeletion(queue, skip_attachment_dict,
queue, destination, id, name, source, destination, id, name, source,
conflict_force, conflict_revert, conflict_force, conflict_revert,
conflict_ignore) { conflict_ignore) {
var status_hash; var status_hash;
...@@ -8797,7 +8829,9 @@ return new Parser; ...@@ -8797,7 +8829,9 @@ return new Parser;
function pushDocumentAttachment(skip_attachment_dict, id, source, function pushDocumentAttachment(skip_attachment_dict, id, source,
destination, options) { destination, options) {
var queue = new RSVP.Queue(); var queue = new RSVP.Queue(),
local_dict = {},
signature_dict = {};
return queue return queue
.push(function () { .push(function () {
...@@ -8821,11 +8855,10 @@ return new Parser; ...@@ -8821,11 +8855,10 @@ return new Parser;
]); ]);
}) })
.push(function (result_list) { .push(function (result_list) {
var local_dict = {}, var is_modification,
signature_dict = {},
is_modification,
is_creation, is_creation,
key; key,
argument_list = [];
for (key in result_list[0]) { for (key in result_list[0]) {
if (result_list[0].hasOwnProperty(key)) { if (result_list[0].hasOwnProperty(key)) {
if (!skip_attachment_dict.hasOwnProperty(key)) { if (!skip_attachment_dict.hasOwnProperty(key)) {
...@@ -8848,30 +8881,45 @@ return new Parser; ...@@ -8848,30 +8881,45 @@ return new Parser;
is_creation = !signature_dict.hasOwnProperty(key) is_creation = !signature_dict.hasOwnProperty(key)
&& options.check_creation; && options.check_creation;
if (is_modification === true || is_creation === true) { if (is_modification === true || is_creation === true) {
checkAttachmentSignatureDifference(skip_attachment_dict, argument_list.push([undefined,
queue, source, skip_attachment_dict,
destination, id, key, source,
options.conflict_force, destination, id, key,
options.conflict_revert, options.conflict_force,
options.conflict_ignore, options.conflict_revert,
is_creation, options.conflict_ignore,
is_modification); is_creation,
is_modification]);
} }
} }
} }
return dispatchQueue(
checkAttachmentSignatureDifference,
argument_list,
context._parallel_operation_attachment_amount
);
})
.push(function () {
var key, argument_list = [];
if (options.check_deletion === true) { if (options.check_deletion === true) {
for (key in signature_dict) { for (key in signature_dict) {
if (signature_dict.hasOwnProperty(key)) { if (signature_dict.hasOwnProperty(key)) {
if (!local_dict.hasOwnProperty(key)) { if (!local_dict.hasOwnProperty(key)) {
checkAttachmentLocalDeletion(skip_attachment_dict, argument_list.push([undefined,
queue, destination, id, key, skip_attachment_dict,
destination, id, key,
source, source,
options.conflict_force, options.conflict_force,
options.conflict_revert, options.conflict_revert,
options.conflict_ignore); options.conflict_ignore]);
} }
} }
} }
return dispatchQueue(
checkAttachmentLocalDeletion,
argument_list,
context._parallel_operation_attachment_amount
);
} }
}); });
} }
...@@ -9184,7 +9232,7 @@ return new Parser; ...@@ -9184,7 +9232,7 @@ return new Parser;
}) })
.push(function (result_list) { .push(function (result_list) {
var i, var i,
sub_queue = new RSVP.Queue(); argument_list = [];
function getResult(j) { function getResult(j) {
return function (id) { return function (id) {
...@@ -9196,20 +9244,26 @@ return new Parser; ...@@ -9196,20 +9244,26 @@ return new Parser;
} }
for (i = 0; i < result_list.length; i += 1) { for (i = 0; i < result_list.length; i += 1) {
checkSignatureDifference(sub_queue, source, destination, argument_list[i] = [undefined, source, destination,
id_list[i].parameter_list[0], id_list[i].parameter_list[0],
conflict_force, conflict_revert, conflict_force, conflict_revert,
conflict_ignore, conflict_ignore,
document_status_list[i].is_creation, document_status_list[i].is_creation,
document_status_list[i].is_modification, document_status_list[i].is_modification,
getResult(i), options); getResult(i), options];
} }
return sub_queue; return dispatchQueue(
checkSignatureDifference,
argument_list,
options.operation_amount
);
}); });
} }
function pushStorage(source, destination, options) { function pushStorage(source, destination, options) {
var queue = new RSVP.Queue(); var queue = new RSVP.Queue(),
argument_list = [],
argument_list_deletion = [];
if (!options.hasOwnProperty("use_post")) { if (!options.hasOwnProperty("use_post")) {
options.use_post = false; options.use_post = false;
} }
...@@ -9246,6 +9300,7 @@ return new Parser; ...@@ -9246,6 +9300,7 @@ return new Parser;
signature_dict[result_list[1].data.rows[i].id] = i; signature_dict[result_list[1].data.rows[i].id] = i;
} }
} }
i = 0;
for (key in local_dict) { for (key in local_dict) {
if (local_dict.hasOwnProperty(key)) { if (local_dict.hasOwnProperty(key)) {
is_modification = signature_dict.hasOwnProperty(key) is_modification = signature_dict.hasOwnProperty(key)
...@@ -9263,29 +9318,50 @@ return new Parser; ...@@ -9263,29 +9318,50 @@ return new Parser;
is_modification: is_modification is_modification: is_modification
}); });
} else { } else {
checkSignatureDifference(queue, source, destination, key, argument_list[i] = [undefined, source, destination,
options.conflict_force, key,
options.conflict_revert, options.conflict_force,
options.conflict_ignore, options.conflict_revert,
is_creation, is_modification, options.conflict_ignore,
source.get.bind(source), is_creation, is_modification,
options); source.get.bind(source),
options];
i += 1;
} }
} }
} }
} }
queue
.push(function () {
return dispatchQueue(
checkSignatureDifference,
argument_list,
options.operation_amount
);
});
if (options.check_deletion === true) { if (options.check_deletion === true) {
i = 0;
for (key in signature_dict) { for (key in signature_dict) {
if (signature_dict.hasOwnProperty(key)) { if (signature_dict.hasOwnProperty(key)) {
if (!local_dict.hasOwnProperty(key)) { if (!local_dict.hasOwnProperty(key)) {
checkLocalDeletion(queue, destination, key, source, argument_list_deletion[i] = [undefined,
options.conflict_force, destination, key,
options.conflict_revert, source,
options.conflict_ignore, options.conflict_force,
options); options.conflict_revert,
options.conflict_ignore,
options];
i += 1;
} }
} }
} }
queue.push(function () {
return dispatchQueue(
checkLocalDeletion,
argument_list_deletion,
options.operation_amount
);
});
} }
if ((options.use_bulk_get === true) && (document_list.length !== 0)) { if ((options.use_bulk_get === true) && (document_list.length !== 0)) {
checkBulkSignatureDifference(queue, source, destination, checkBulkSignatureDifference(queue, source, destination,
...@@ -9298,6 +9374,12 @@ return new Parser; ...@@ -9298,6 +9374,12 @@ return new Parser;
}); });
} }
function repairDocument(queue, id) {
queue.push(function () {
return repairDocumentAttachment(id);
});
}
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
// Ensure that the document storage is usable // Ensure that the document storage is usable
...@@ -9350,7 +9432,8 @@ return new Parser; ...@@ -9350,7 +9432,8 @@ return new Parser;
CONFLICT_CONTINUE), CONFLICT_CONTINUE),
check_modification: context._check_local_modification, check_modification: context._check_local_modification,
check_creation: context._check_local_creation, check_creation: context._check_local_creation,
check_deletion: context._check_local_deletion check_deletion: context._check_local_deletion,
operation_amount: context._parallel_operation_amount
}); });
} }
}) })
...@@ -9381,7 +9464,8 @@ return new Parser; ...@@ -9381,7 +9464,8 @@ return new Parser;
CONFLICT_CONTINUE), CONFLICT_CONTINUE),
check_modification: context._check_remote_modification, check_modification: context._check_remote_modification,
check_creation: context._check_remote_creation, check_creation: context._check_remote_creation,
check_deletion: context._check_remote_deletion check_deletion: context._check_remote_deletion,
operation_amount: context._parallel_operation_amount
}); });
} }
}) })
...@@ -9397,19 +9481,19 @@ return new Parser; ...@@ -9397,19 +9481,19 @@ return new Parser;
return context._signature_sub_storage.allDocs() return context._signature_sub_storage.allDocs()
.push(function (result) { .push(function (result) {
var i, var i,
repair_document_queue = new RSVP.Queue(); argument_list = [],
len = result.data.total_rows;
function repairDocument(id) { for (i = 0; i < len; i += 1) {
repair_document_queue argument_list.push(
.push(function () { [undefined, result.data.rows[i].id]
return repairDocumentAttachment(id); );
});
}
for (i = 0; i < result.data.total_rows; i += 1) {
repairDocument(result.data.rows[i].id);
} }
return repair_document_queue; return dispatchQueue(
repairDocument,
argument_list,
context._parallel_operation_amount
);
}); });
} }
}); });
...@@ -11335,6 +11419,7 @@ return new Parser; ...@@ -11335,6 +11419,7 @@ return new Parser;
"type": "POST", "type": "POST",
"url": name, "url": name,
"data": data, "data": data,
"dataType": "blob",
"xhrFields": { "xhrFields": {
withCredentials: true withCredentials: true
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment