Fix incorrect "not sorted" message display

The "not sorted" message shouldn't be displayed if a sort is cancelled
and the load order has been sorted at least once before in the same
session. Fixes #621.
This commit is contained in:
Oliver Hamlet
2016-08-01 16:22:24 +01:00
parent 47366efe7d
commit 6ca40a57d9
5 changed files with 45 additions and 19 deletions
+15 -6
View File
@@ -40,7 +40,7 @@ using std::pair;
using std::string;
namespace loot {
GameCache::GameCache() : isLoadOrderSorted_(false) {}
GameCache::GameCache() : loadOrderSortCount_(0) {}
GameCache::GameCache(const GameCache& cache) :
masterlist_(cache.masterlist_),
@@ -48,7 +48,7 @@ GameCache::GameCache(const GameCache& cache) :
conditions_(cache.conditions_),
plugins_(cache.plugins_),
messages_(cache.messages_),
isLoadOrderSorted_(cache.isLoadOrderSorted_) {}
loadOrderSortCount_(cache.loadOrderSortCount_) {}
GameCache& GameCache::operator=(const GameCache& cache) {
if (&cache != this) {
@@ -57,7 +57,7 @@ GameCache& GameCache::operator=(const GameCache& cache) {
conditions_ = cache.conditions_;
plugins_ = cache.plugins_;
messages_ = cache.messages_;
isLoadOrderSorted_ = cache.isLoadOrderSorted_;
loadOrderSortCount_ = cache.loadOrderSortCount_;
}
return *this;
@@ -116,7 +116,7 @@ void GameCache::AddPlugin(const Plugin&& plugin) {
std::vector<Message> GameCache::GetMessages() const {
std::vector<Message> output(messages_);
if (!isLoadOrderSorted_)
if (loadOrderSortCount_ == 0)
output.push_back(Message(Message::Type::warn, "You have not sorted your load order this session."));
return output;
@@ -128,8 +128,17 @@ void GameCache::AppendMessage(const Message& message) {
messages_.push_back(message);
}
void GameCache::SetLoadOrderSorted(bool isLoadOrderSorted) {
this->isLoadOrderSorted_ = isLoadOrderSorted;
void GameCache::IncrementLoadOrderSortCount() {
lock_guard<mutex> guard(mutex_);
++loadOrderSortCount_;
}
void GameCache::DecrementLoadOrderSortCount() {
lock_guard<mutex> guard(mutex_);
if (loadOrderSortCount_ > 0)
--loadOrderSortCount_;
}
void GameCache::ClearCachedConditions() {
+3 -2
View File
@@ -55,7 +55,8 @@ public:
std::vector<Message> GetMessages() const;
void AppendMessage(const Message& message);
void SetLoadOrderSorted(bool isLoadOrderSorted);
void IncrementLoadOrderSortCount();
void DecrementLoadOrderSortCount();
void ClearCachedConditions();
void ClearCachedPlugins();
@@ -66,7 +67,7 @@ private:
std::unordered_map<std::string, bool> conditions_;
std::unordered_map<std::string, Plugin> plugins_;
std::vector<Message> messages_;
bool isLoadOrderSorted_;
unsigned short loadOrderSortCount_;
mutable std::mutex mutex_;
};
+1 -1
View File
@@ -161,7 +161,7 @@ std::list<Plugin> PluginSorter::Sort(Game& game, const Language::Code language)
plugins.push_back(graph_[vertex]);
}
game.SetLoadOrderSorted(true);
game.IncrementLoadOrderSortCount();
return plugins;
}
+1 -1
View File
@@ -144,7 +144,7 @@ bool QueryHandler::OnQuery(CefRefPtr<CefBrowser> browser,
return true;
} else if (request == "cancelSort") {
lootState_.decrementUnappliedChangeCounter();
lootState_.getCurrentGame().SetLoadOrderSorted(false);
lootState_.getCurrentGame().DecrementLoadOrderSortCount();
YAML::Node node(GetGeneralMessages());
callback->Success(JSON::stringify(node));
+25 -9
View File
@@ -66,7 +66,7 @@ TEST_P(GameCacheTest, copyConstructorShouldCopyCachedData) {
cache_.AddPlugin(Plugin(game_, blankEsm, true));
Message expectedMessage(Message::Type::say, "1");
cache_.AppendMessage(expectedMessage);
cache_.SetLoadOrderSorted(true);
cache_.IncrementLoadOrderSortCount();
GameCache otherCache(cache_);
EXPECT_EQ(std::make_pair(true, true), otherCache.GetCachedCondition(conditionLowercase));
@@ -82,7 +82,7 @@ TEST_P(GameCacheTest, assignmentOperatorShouldCopyCachedData) {
cache_.AddPlugin(Plugin(game_, blankEsm, true));
Message expectedMessage(Message::Type::say, "1");
cache_.AppendMessage(expectedMessage);
cache_.SetLoadOrderSorted(true);
cache_.IncrementLoadOrderSortCount();
GameCache otherCache = cache_;
EXPECT_EQ(std::make_pair(true, true), otherCache.GetCachedCondition(conditionLowercase));
@@ -180,18 +180,34 @@ TEST_P(GameCacheTest, aMessageShouldBeCachedByDefault) {
ASSERT_EQ(1, cache_.GetMessages().size());
}
TEST_P(GameCacheTest, settingLoadOrderSortedToTrueShouldSupressDefaultCachedMessage) {
cache_.SetLoadOrderSorted(true);
TEST_P(GameCacheTest, incrementLoadOrderSortCountShouldSupressTheDefaultCachedMessage) {
cache_.IncrementLoadOrderSortCount();
ASSERT_TRUE(cache_.GetMessages().empty());
EXPECT_TRUE(cache_.GetMessages().empty());
}
TEST_P(GameCacheTest, settingLoadOrderSortedToFalseShouldReverseTheDefaultCachedMessageSuppression) {
TEST_P(GameCacheTest, decrementingLoadOrderSortCountToZeroShouldShowTheDefaultCachedMessage) {
auto expectedMessages = cache_.GetMessages();
cache_.SetLoadOrderSorted(true);
cache_.SetLoadOrderSorted(false);
cache_.IncrementLoadOrderSortCount();
cache_.DecrementLoadOrderSortCount();
ASSERT_EQ(expectedMessages, cache_.GetMessages());
EXPECT_EQ(expectedMessages, cache_.GetMessages());
}
TEST_P(GameCacheTest, decrementingLoadOrderSortCountThatIsAlreadyZeroShouldShowTheDefaultCachedMessage) {
auto expectedMessages = cache_.GetMessages();
cache_.DecrementLoadOrderSortCount();
EXPECT_EQ(expectedMessages, cache_.GetMessages());
}
TEST_P(GameCacheTest, decrementingLoadOrderSortCountToANonZeroValueShouldSupressTheDefaultCachedMessage) {
auto expectedMessages = cache_.GetMessages();
cache_.IncrementLoadOrderSortCount();
cache_.IncrementLoadOrderSortCount();
cache_.DecrementLoadOrderSortCount();
EXPECT_TRUE(cache_.GetMessages().empty());
}
TEST_P(GameCacheTest, appendingMessagesShouldStoreThemInTheGivenOrder) {