mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
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:
@@ -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() {
|
||||
|
||||
@@ -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_;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user