Fixed bug for save functionality (#141)

In case of any changes during save request the state of exported shapes can be inconsistent. That leads to errors for future saves.
main
Andrey Zhavoronkov 7 years ago committed by Nikita Manovich
parent 02fcd015ad
commit 42d79b550c

@ -100,7 +100,8 @@ function buildAnnotationUI(job, shapeData, loadJobEvent) {
// Setup components // Setup components
let annotationParser = new AnnotationParser(job, window.cvat.labelsInfo); let annotationParser = new AnnotationParser(job, window.cvat.labelsInfo);
let shapeCollectionModel = new ShapeCollectionModel().import(shapeData).updateHash(); let shapeCollectionModel = new ShapeCollectionModel().import(shapeData).updateExportedState();
shapeCollectionModel.confirmExportedState();
let shapeCollectionController = new ShapeCollectionController(shapeCollectionModel); let shapeCollectionController = new ShapeCollectionController(shapeCollectionModel);
let shapeCollectionView = new ShapeCollectionView(shapeCollectionModel, shapeCollectionController); let shapeCollectionView = new ShapeCollectionView(shapeCollectionModel, shapeCollectionController);
@ -690,6 +691,7 @@ function saveAnnotation(shapeCollectionModel, job) {
}); });
const exportedData = shapeCollectionModel.export(); const exportedData = shapeCollectionModel.export();
shapeCollectionModel.updateExportedState();
const annotationLogs = Logger.getLogs(); const annotationLogs = Logger.getLogs();
const data = { const data = {
@ -702,8 +704,7 @@ function saveAnnotation(shapeCollectionModel, job) {
saveJobRequest(job.jobid, data, () => { saveJobRequest(job.jobid, data, () => {
// success // success
shapeCollectionModel.reset_state(); shapeCollectionModel.confirmExportedState();
shapeCollectionModel.updateHash();
saveButton.text('Success!'); saveButton.text('Success!');
setTimeout(() => { setTimeout(() => {
saveButton.prop('disabled', false); saveButton.prop('disabled', false);

@ -53,6 +53,7 @@ class ShapeCollectionModel extends Listener {
this._splitter = new ShapeSplitter(); this._splitter = new ShapeSplitter();
this._erased = false; this._erased = false;
this._initialShapes = {}; this._initialShapes = {};
this._exportedShapes = {};
} }
_nextIdx() { _nextIdx() {
@ -239,8 +240,9 @@ class ShapeCollectionModel extends Listener {
return this; return this;
} }
reset_state() { confirmExportedState() {
this._erased = false; this._erased = false;
this._initialShapes = this._exportedShapes;
} }
export() { export() {
@ -349,8 +351,8 @@ class ShapeCollectionModel extends Listener {
return exportData.pre_erase; return exportData.pre_erase;
} }
updateHash() { updateExportedState() {
this._initialShapes = {}; this._exportedShapes = {};
if (this._erased) { if (this._erased) {
return this; return this;
@ -358,7 +360,7 @@ class ShapeCollectionModel extends Listener {
for (const shape of this._shapes) { for (const shape of this._shapes) {
if (!shape.removed) { if (!shape.removed) {
this._initialShapes[shape.id] = shape.export(); this._exportedShapes[shape.id] = shape.export();
} }
} }
return this; return this;

Loading…
Cancel
Save