bool ModelTreeElement::updateModel(const ModelItem& model) { // NOTE: this method must first lookup the model by ID, hence it is O(N) // and "model is not found" is worst-case (full N) but maybe we don't care? // (guaranteed that num models per elemen is small?) const bool wantDebug = false; uint16_t numberOfModels = _modelItems->size(); for (uint16_t i = 0; i < numberOfModels; i++) { ModelItem& thisModel = (*_modelItems)[i]; if (thisModel.getID() == model.getID()) { int difference = thisModel.getLastUpdated() - model.getLastUpdated(); bool changedOnServer = thisModel.getLastEdited() < model.getLastEdited(); bool localOlder = thisModel.getLastUpdated() < model.getLastUpdated(); if (changedOnServer || localOlder) { if (wantDebug) { qDebug("local model [id:%d] %s and %s than server model by %d, model.isNewlyCreated()=%s", model.getID(), (changedOnServer ? "CHANGED" : "same"), (localOlder ? "OLDER" : "NEWER"), difference, debug::valueOf(model.isNewlyCreated()) ); } thisModel.copyChangedProperties(model); markWithChangedTime(); } else { if (wantDebug) { qDebug(">>> IGNORING SERVER!!! Would've caused jutter! <<< " "local model [id:%d] %s and %s than server model by %d, model.isNewlyCreated()=%s", model.getID(), (changedOnServer ? "CHANGED" : "same"), (localOlder ? "OLDER" : "NEWER"), difference, debug::valueOf(model.isNewlyCreated()) ); } } return true; } } return false; }