From abca53c99c4d824e9e9ba08804cd7826c8a47c26 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Thu, 10 Mar 2016 14:12:20 +0300 Subject: [PATCH] [editor] Upload created/deleted features implementation. --- indexer/osm_editor.cpp | 53 +++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/indexer/osm_editor.cpp b/indexer/osm_editor.cpp index ea1a7b50a1..d32119bee1 100644 --- a/indexer/osm_editor.cpp +++ b/indexer/osm_editor.cpp @@ -541,30 +541,45 @@ void Editor::UploadChanges(string const & key, string const & secret, TChangeset // Do not process already uploaded features or those failed permanently. if (!NeedsUpload(fti.m_uploadStatus)) continue; - - // TODO(AlexZ): Create/delete nodes support. - if (fti.m_status != FeatureStatus::Modified) - continue; - - XMLFeature feature = fti.m_feature.ToXML(); - if (!fti.m_street.empty()) - feature.SetTagValue(kAddrStreetTag, fti.m_street); try { - XMLFeature osmFeature = - GetMatchingFeatureFromOSM(changeset, m_getOriginalFeatureFn(fti.m_feature.GetID())); - XMLFeature const osmFeatureCopy = osmFeature; - osmFeature.ApplyPatch(feature); - // Check to avoid duplicates. - if (osmFeature == osmFeatureCopy) + XMLFeature feature = fti.m_feature.ToXML(); + if (!fti.m_street.empty()) + feature.SetTagValue(kAddrStreetTag, fti.m_street); + + switch (fti.m_status) { - LOG(LWARNING, ("Local changes are equal to OSM, feature was not uploaded, local changes were deleted.", osmFeatureCopy)); - // TODO(AlexZ): Delete local change. - continue; + case FeatureStatus::Untouched: CHECK(false, ("It's impossible.")); break; + + case FeatureStatus::Created: changeset.Create(feature); break; + + case FeatureStatus::Modified: + { + XMLFeature osmFeature = + GetMatchingFeatureFromOSM(changeset, m_getOriginalFeatureFn(fti.m_feature.GetID())); + XMLFeature const osmFeatureCopy = osmFeature; + osmFeature.ApplyPatch(feature); + // Check to avoid duplicates. + if (osmFeature == osmFeatureCopy) + { + LOG(LWARNING, ("Local changes are equal to OSM, feature was not uploaded, local " + "changes were deleted.", + osmFeatureCopy)); + // TODO(AlexZ): Delete local change. + continue; + } + LOG(LDEBUG, ("Uploading patched feature", osmFeature)); + changeset.Modify(osmFeature); + } + break; + + case FeatureStatus::Deleted: + changeset.Delete(GetMatchingFeatureFromOSM( + changeset, m_getOriginalFeatureFn(fti.m_feature.GetID()))); + break; } - LOG(LDEBUG, ("Uploading patched feature", osmFeature)); - changeset.Modify(osmFeature); fti.m_uploadStatus = kUploaded; + // TODO(AlexZ): Use timestamp from the server. fti.m_uploadAttemptTimestamp = time(nullptr); fti.m_uploadError.clear(); ++uploadedFeaturesCount;