diff options
author | Sergey Magidovich <mgsergio@mapswithme.com> | 2016-05-31 17:17:01 +0300 |
---|---|---|
committer | Sergey Magidovich <mgsergio@mapswithme.com> | 2016-06-01 14:39:34 +0300 |
commit | 0ae019f82dc2d4e30a1bbf3ea924d07d22621a52 (patch) | |
tree | 931222ae8befa7f13bbe3ffb52cc9a0936fdf20a /map | |
parent | e0b17934baa7c0d18e404eec2ca18a967eca7e81 (diff) |
Add UserStatsLoader.
Diffstat (limited to 'map')
-rw-r--r-- | map/framework.cpp | 84 | ||||
-rw-r--r-- | map/framework.hpp | 32 |
2 files changed, 12 insertions, 104 deletions
diff --git a/map/framework.cpp b/map/framework.cpp index b7f38102b7..8faa69f390 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -412,11 +412,6 @@ Framework::Framework() m_model.GetIndex().AddObserver(editor); LOG(LINFO, ("Editor initialized")); - - if(!LoadUserStatsFromSettings()) - LOG(LINFO, ("There is no cached stats in settings")); - else - LOG(LINFO, ("User stats was loaded successfully")); } Framework::~Framework() @@ -2901,82 +2896,3 @@ bool Framework::RollBackChanges(FeatureID const & fid) } return rolledBack; } - -namespace -{ -char const kSettingsUserName[] = "LoginedUser"; -char const kSettingsRating[] = "UserEditorRating"; -char const kSettingsChangesCount[] = "UserEditorChangsCount"; -} // namespace - -shared_ptr<editor::UserStats const> Framework::GetUserStats(string const & userName) const -{ - lock_guard<mutex> g(m_userStatsMutex); - if (m_userName == userName) - return m_userStats; - return nullptr; -} - -void Framework::UpdateUserStats(string const & userName, TOnStatsUpdated const & fn) -{ - { - lock_guard<mutex> g(m_userStatsMutex); - - auto nothingToUpdate = m_userStats && m_userName == userName; - nothingToUpdate = nothingToUpdate && difftime(time(nullptr), m_latsUpdate) <= 60 * 60 * 60; - - if (nothingToUpdate) - return GetPlatform().RunOnGuiThread(fn); - - m_userName = userName; - } - - thread([this, &fn, userName]() - { - if (UpdateUserStats(userName)) - { - lock_guard<mutex> g(m_userStatsMutex); - if (m_userName == userName) - GetPlatform().RunOnGuiThread(fn); - } - }).detach(); -} - -bool Framework::UpdateUserStats(string const & userName) -{ - auto userStats = make_shared<editor::UserStats>(userName); - if (!userStats->GetUpdateStatus()) - return false; - - lock_guard<mutex> g(m_userStatsMutex); - if (m_userName != userName) - return false; - m_latsUpdate = time(nullptr); - m_userStats = move(userStats); - SaveUserStatsToSettings(); - return true; -} - -bool Framework::LoadUserStatsFromSettings() -{ - uint32_t rating, changesCount; - if (!settings::Get(kSettingsUserName, m_userName) || - !settings::Get(kSettingsChangesCount, changesCount) || - !settings::Get(kSettingsRating, rating)) - { - return false; - } - - m_userStats = make_shared<editor::UserStats>(m_userName, rating, changesCount); - return true; -} - -void Framework::SaveUserStatsToSettings() -{ - if (!m_userStats) - return; - - settings::Set(kSettingsUserName, m_userName); - settings::Set(kSettingsRating, m_userStats->GetRank()); - settings::Set(kSettingsChangesCount, m_userStats->GetChangesCount()); -} diff --git a/map/framework.hpp b/map/framework.hpp index 418115350b..be7ea1c6d3 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -43,8 +43,6 @@ #include "base/thread_checker.hpp" #include "std/list.hpp" -#include "std/mutex.hpp" // TODO(mgsergio): remove when m_UserStatsMutex is gone. -#include "std/shared_ptr.hpp" #include "std/target_os.hpp" #include "std/unique_ptr.hpp" #include "std/vector.hpp" @@ -676,30 +674,24 @@ private: public: //@{ - // TODO(mgsergio): move mutexed logic out from framework. // User statistics. - // A callback type to be passed in UpdateUserStats. - using TOnStatsUpdated = function<void()>; + editor::UserStats GetUserStats(string const & userName) const + { + return m_userStatsLoader.GetStats(userName); + } - // TODO(mgsergio): Comment to this function. - shared_ptr<editor::UserStats const> GetUserStats(string const & userName) const; + // Reads user stats from server or gets it from cache calls |fn| on success. + void UpdateUserStats(string const & userName, + editor::UserStatsLoader::TOnUpdateCallback fn) + { + m_userStatsLoader.Update(userName, fn); + } - // Reads user stats from server or gets it from cache calls reader on success. - void UpdateUserStats(string const & userName, TOnStatsUpdated const & fn); + void DropUserStats(string const & userName) { m_userStatsLoader.DropStats(userName); } private: - /// Sends a synchronous request to the server and updates user's stats. - bool UpdateUserStats(string const & userName); - - bool LoadUserStatsFromSettings(); - /// Not thread-safe, use synchonization. - void SaveUserStatsToSettings(); - - shared_ptr<editor::UserStats> m_userStats; - string m_userName; - time_t m_latsUpdate{}; - mutable mutex m_userStatsMutex; + editor::UserStatsLoader m_userStatsLoader; //@} DECLARE_THREAD_CHECKER(m_threadChecker); |