Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/map
diff options
context:
space:
mode:
authorSergey Magidovich <mgsergio@mapswithme.com>2016-05-31 17:17:01 +0300
committerSergey Magidovich <mgsergio@mapswithme.com>2016-06-01 14:39:34 +0300
commit0ae019f82dc2d4e30a1bbf3ea924d07d22621a52 (patch)
tree931222ae8befa7f13bbe3ffb52cc9a0936fdf20a /map
parente0b17934baa7c0d18e404eec2ca18a967eca7e81 (diff)
Add UserStatsLoader.
Diffstat (limited to 'map')
-rw-r--r--map/framework.cpp84
-rw-r--r--map/framework.hpp32
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);