diff --git a/iphone/Maps/Classes/MapsAppDelegate.mm b/iphone/Maps/Classes/MapsAppDelegate.mm index 74b20b947c..4ee3114c0b 100644 --- a/iphone/Maps/Classes/MapsAppDelegate.mm +++ b/iphone/Maps/Classes/MapsAppDelegate.mm @@ -409,7 +409,7 @@ using namespace osm_auth_ios; // Starts async UGC uploading process. + (void)uploadUGC:(MWMVoidBlock)finishCallback { - GetFramework().UploadUGC([finishCallback] { + GetFramework().UploadUGC([finishCallback](bool /* isSuccessful */) { finishCallback(); }); } diff --git a/map/framework.cpp b/map/framework.cpp index b1f1604f0a..970b79e15e 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1441,6 +1441,8 @@ void Framework::EnterBackground() SaveViewport(); + m_ugcApi->SaveUGCOnDisk(); + m_trafficManager.OnEnterBackground(); m_routingManager.SetAllowSendingPoints(false); @@ -3482,13 +3484,18 @@ void Framework::UploadUGC(User::CompleteUploadingHandler const & onCompleteUploa if (!m_user.IsAuthenticated()) return; - m_ugcApi->GetUGCToSend([this, onCompleteUploading](string && json) { + m_ugcApi->GetUGCToSend([this, onCompleteUploading](string && json) + { if (!json.empty()) - m_user.UploadUserReviews(move(json), [this, onCompleteUploading] + { + m_user.UploadUserReviews(std::move(json), [this, onCompleteUploading](bool isSuccessful) { - if (onCompleteUploading) - onCompleteUploading(); - m_ugcApi->SendingCompleted(); + if (onCompleteUploading != nullptr) + onCompleteUploading(isSuccessful); + + if (isSuccessful) + m_ugcApi->SendingCompleted(); }); + } }); } diff --git a/map/user.cpp b/map/user.cpp index e90fbfefe9..c01eaad1b1 100644 --- a/map/user.cpp +++ b/map/user.cpp @@ -272,7 +272,7 @@ void User::UploadUserReviews(std::string && dataStr, LOG(LWARNING, ("Reviews have been uploaded.")); if (onCompleteUploading != nullptr) - onCompleteUploading(); + onCompleteUploading(true /* isSuccessful */); }, [this, onCompleteUploading](int errorCode) { @@ -281,7 +281,7 @@ void User::UploadUserReviews(std::string && dataStr, LOG(LWARNING, ("Reviews have not been uploaded.")); if (onCompleteUploading != nullptr) - onCompleteUploading(); + onCompleteUploading(false /* isSuccessful */); }); }); } diff --git a/map/user.hpp b/map/user.hpp index 156b4a4246..e730e17173 100644 --- a/map/user.hpp +++ b/map/user.hpp @@ -32,7 +32,7 @@ public: using BuildRequestHandler = std::function; using SuccessHandler = std::function; using ErrorHandler = std::function; - using CompleteUploadingHandler = std::function; + using CompleteUploadingHandler = std::function; User(); ~User(); diff --git a/ugc/api.cpp b/ugc/api.cpp index 3462bfdd81..7ea6954324 100644 --- a/ugc/api.cpp +++ b/ugc/api.cpp @@ -34,6 +34,11 @@ void Api::SendingCompleted() m_thread.Push([this] { SendingCompletedImpl(); }); } +void Api::SaveUGCOnDisk() +{ + m_thread.Push([this] { SaveUGCOnDiskImpl(); }); +} + void Api::GetUGCImpl(FeatureID const & id, UGCCallback callback) { if (!id.IsValid()) @@ -63,4 +68,9 @@ void Api::SendingCompletedImpl() { m_storage.MarkAllAsSynchronized(); } + +void Api::SaveUGCOnDiskImpl() +{ + m_storage.SaveIndex(); +} } // namespace ugc diff --git a/ugc/api.hpp b/ugc/api.hpp index 5cccf84009..8eec8c54c5 100644 --- a/ugc/api.hpp +++ b/ugc/api.hpp @@ -25,12 +25,14 @@ public: void SetUGCUpdate(FeatureID const & id, UGCUpdate const & ugc); void GetUGCToSend(UGCJsonToSendCallback const & fn); void SendingCompleted(); + void SaveUGCOnDisk(); private: void GetUGCImpl(FeatureID const & id, UGCCallback callback); void SetUGCUpdateImpl(FeatureID const & id, UGCUpdate const & ugc); void GetUGCToSendImpl(UGCJsonToSendCallback const & fn); void SendingCompletedImpl(); + void SaveUGCOnDiskImpl(); base::WorkerThread m_thread; Storage m_storage;