diff --git a/iphone/Maps/Common/Statistics/StatisticsStrings.h b/iphone/Maps/Common/Statistics/StatisticsStrings.h index c644fc7b5b..169e5ca580 100644 --- a/iphone/Maps/Common/Statistics/StatisticsStrings.h +++ b/iphone/Maps/Common/Statistics/StatisticsStrings.h @@ -28,6 +28,7 @@ static NSString * const kStatApplicationColdStartupInfo = @"Application_ColdStar static NSString * const kStatApply = @"Apply"; static NSString * const kStatAsk = @"Ask"; static NSString * const kStatAttractions = @"Attractions"; +static NSString * const kStatAuth = @"auth"; static NSString * const kStatAuthorization = @"Authorization"; static NSString * const kStatAutoDownload = @"Auto download"; static NSString * const kStatAutoZoom = @"Autozoom"; @@ -40,8 +41,13 @@ static NSString * const kStatBookmarkCreated = @"Bookmark. Bookmark created"; static NSString * const kStatBookmarks = @"Bookmarks"; static NSString * const kStatBookmarksAuthRequestError = @"Bookmarks_SyncProposal_error"; static NSString * const kStatBookmarksAuthRequestSuccess = @"Bookmarks_SyncProposal_enabled"; +static NSString * const kStatBookmarksRestoreProposalError = @"Bookmarks_RestoreProposal_error"; +static NSString * const kStatBookmarksRestoreProposalSuccess = @"Bookmarks_RestoreProposal_success"; +static NSString * const kStatBookmarksSyncError = @"Bookmarks_sync_error"; static NSString * const kStatBookmarksSyncProposalApproved = @"Bookmarks_SyncProposal_approved"; static NSString * const kStatBookmarksSyncProposalShown = @"Bookmarks_SyncProposal_shown"; +static NSString * const kStatBookmarksSyncStarted = @"Bookmarks_sync_started"; +static NSString * const kStatBookmarksSyncSuccess = @"Bookmarks_sync_success"; static NSString * const kStatBuildRoute = @"Build route"; static NSString * const kStatButton = @"Button"; static NSString * const kStatCallPhoneNumber = @"Call phone number"; @@ -83,6 +89,7 @@ static NSString * const kStatDeviceType = @"Device type"; static NSString * const kStatDiscovery = @"discovery"; static NSString * const kStatDiscoveryButtonItemShow = @"DiscoveryButton_Item_Show"; static NSString * const kStatDiscoveryButtonOpen = @"DiscoveryButton_Open"; +static NSString * const kStatDisk = @"disk"; static NSString * const kStatDownload = @"download"; static NSString * const kStatDownloadGroup = @"download_group"; static NSString * const kStatDownloadMap = @"Download map"; @@ -125,7 +132,7 @@ static NSString * const kStatEditorProblemReport = @"Editor_Problem_report"; static NSString * const kStatEditorRegRequest = @"Editor_Reg_request"; static NSString * const kStatEditorSecondTimeShareClick = @"Editor_SecondTimeShare_click"; static NSString * const kStatEditorSecondTimeShareShow = @"Editor_SecondTimeShare_show"; -static NSString * const kStatError = @"Error"; +static NSString * const kStatError = @"error"; static NSString * const kStatErrorCode = @"error_code"; static NSString * const kStatErrorData = @"err_data"; static NSString * const kStatErrorMessage = @"error_message"; @@ -194,6 +201,7 @@ static NSString * const kStatNever = @"Never"; static NSString * const kStatNext = @"Next"; static NSString * const kStatNightMode = @"NightMode"; static NSString * const kStatNo = @"No"; +static NSString * const kStatNoBackup = @"no_backup"; static NSString * const kStatNoConnection = @"no_connection"; static NSString * const kStatNoSpace = @"no_space"; static NSString * const kStatNone = @"none"; diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm index 35e17ca146..56f5eee644 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm @@ -6,12 +6,26 @@ #include "coding/internal/file_data.hpp" +#include + namespace { using Observer = id; using Observers = NSHashTable; using TLoopBlock = void (^)(Observer observer); + +NSString * const CloudErrorToString(Cloud::SynchronizationResult result) +{ + switch (result) + { + case Cloud::SynchronizationResult::Success: return nil; + case Cloud::SynchronizationResult::AuthError: return kStatAuth; + case Cloud::SynchronizationResult::NetworkError: return kStatNetwork; + case Cloud::SynchronizationResult::DiskError: return kStatDisk; + case Cloud::SynchronizationResult::UserInterrupted: return nil; + } +} } // namespace @interface MWMBookmarksManager () @@ -111,7 +125,57 @@ using TLoopBlock = void (^)(Observer observer); + (void)loadBookmarks { [MWMBookmarksManager manager]; - GetFramework().LoadBookmarks(); + + auto & bm = GetFramework().GetBookmarkManager(); + + auto onSynchronizationStarted = [](Cloud::SynchronizationType type) + { + if (type == Cloud::SynchronizationType::Backup) + [Statistics logEvent:kStatBookmarksSyncStarted]; + }; + + auto onSynchronizationFinished = [](Cloud::SynchronizationType type, Cloud::SynchronizationResult result, + std::string const & errorStr) + { + if (result == Cloud::SynchronizationResult::Success) + { + [Statistics logEvent:type == Cloud::SynchronizationType::Backup ? kStatBookmarksSyncSuccess : + kStatBookmarksRestoreProposalSuccess]; + } + else + { + NSString * const errorType = CloudErrorToString(result); + if (errorType != nil) + { + [Statistics logEvent:type == Cloud::SynchronizationType::Backup ? kStatBookmarksSyncError : + kStatBookmarksRestoreProposalError + withParameters:@{kStatType: errorType, kStatError: @(errorStr.c_str())}]; + } + } + }; + + auto onRestoreRequested = [](Cloud::RestoringRequestResult result, uint64_t backupTimestampInMs) + { + if (result == Cloud::RestoringRequestResult::NoBackup) + { + [Statistics logEvent:kStatBookmarksRestoreProposalError + withParameters:@{kStatType: kStatNoBackup, kStatError: @("")}]; + } + else if (result == Cloud::RestoringRequestResult::NotEnoughDiskSpace) + { + [Statistics logEvent:kStatBookmarksRestoreProposalError + withParameters:@{kStatType: kStatDisk, kStatError: @("Not enough disk space")}]; + } + }; + + auto onRestoredFilesPrepared = []() + { + //TODO: On this callback we have to block cancel button in restore dialog if such button exists. + }; + + bm.SetCloudHandlers(std::move(onSynchronizationStarted), std::move(onSynchronizationFinished), + std::move(onRestoreRequested), std::move(onRestoredFilesPrepared)); + bm.LoadBookmarks(); } + (MWMGroupIDCollection)groupsIdList