mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Add include_user_metadata parameter to Database::general_messages()
The C++ wrapper defaults it to true, so the behaviour hasn't changed for existing callers that don't pass a value for the evaluateConditions parameter, i.e. that call GetGeneralMessages(). Since the new parameter comes before evaluateConditions, existing GetGeneralMessages(true) and GetGeneralMessages(false) calls need to be replaced with GetGeneralMessages(true, true) and GetGeneralMessages(true, false) to retain their existing behaviour. The parameter order was chosen to match that of GetPluginMetadata(), at the cost of this backwards incompatibility.
This commit is contained in:
@@ -167,6 +167,10 @@ public:
|
||||
|
||||
/**
|
||||
* @brief Get all general messages listed in the loaded metadata lists.
|
||||
* @param includeUserMetadata
|
||||
* If true, any general messages present in the userlist are included
|
||||
* in the returned metadata, otherwise the metadata returned only
|
||||
* includes metadata from the masterlist.
|
||||
* @param evaluateConditions
|
||||
* If true, any metadata conditions are evaluated before the metadata
|
||||
* is returned, otherwise unevaluated metadata is returned. Evaluating
|
||||
@@ -176,6 +180,7 @@ public:
|
||||
* to any particular plugin.
|
||||
*/
|
||||
virtual std::vector<Message> GetGeneralMessages(
|
||||
bool includeUserMetadata = true,
|
||||
bool evaluateConditions = false) const = 0;
|
||||
|
||||
/**
|
||||
|
||||
@@ -87,9 +87,11 @@ void Database::SetUserKnownBashTags(const std::vector<std::string>& bashTags) {
|
||||
}
|
||||
|
||||
std::vector<Message> Database::GetGeneralMessages(
|
||||
bool includeUserMetadata,
|
||||
bool evaluateConditions) const {
|
||||
try {
|
||||
return convert<Message>(database_->general_messages(evaluateConditions));
|
||||
return convert<Message>(
|
||||
database_->general_messages(includeUserMetadata, evaluateConditions));
|
||||
} catch (const ::rust::Error& e) {
|
||||
std::rethrow_exception(mapError(e));
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ public:
|
||||
void SetUserKnownBashTags(const std::vector<std::string>& bashTags) override;
|
||||
|
||||
std::vector<Message> GetGeneralMessages(
|
||||
bool includeUserMetadata = true,
|
||||
bool evaluateConditions = false) const override;
|
||||
|
||||
std::vector<Message> GetUserGeneralMessages(
|
||||
|
||||
+5
-1
@@ -134,12 +134,16 @@ impl Database {
|
||||
|
||||
pub fn general_messages(
|
||||
&self,
|
||||
include_user_metadata: bool,
|
||||
evaluate_conditions: bool,
|
||||
) -> Result<Vec<Message>, VerboseError> {
|
||||
self.0
|
||||
.read()
|
||||
.map_err(DatabaseLockPoisonError::from)?
|
||||
.general_messages(to_eval_mode(evaluate_conditions))
|
||||
.general_messages(
|
||||
to_merge_mode(include_user_metadata),
|
||||
to_eval_mode(evaluate_conditions),
|
||||
)
|
||||
.map(|v| v.into_iter().map(Into::into).collect())
|
||||
.map_err(Into::into)
|
||||
}
|
||||
|
||||
+5
-1
@@ -274,7 +274,11 @@ mod ffi {
|
||||
|
||||
pub fn set_user_known_bash_tags(&self, bash_tags: Vec<String>) -> Result<()>;
|
||||
|
||||
pub fn general_messages(&self, evaluate_conditions: bool) -> Result<Vec<Message>>;
|
||||
pub fn general_messages(
|
||||
&self,
|
||||
include_user_metadata: bool,
|
||||
evaluate_conditions: bool,
|
||||
) -> Result<Vec<Message>>;
|
||||
|
||||
pub fn user_general_messages(&self, evaluate_conditions: bool) -> Result<Vec<Message>>;
|
||||
|
||||
|
||||
@@ -555,13 +555,31 @@ TEST_P(DatabaseInterfaceTest,
|
||||
EXPECT_EQ(expectedMessages, messages);
|
||||
}
|
||||
|
||||
TEST_P(
|
||||
DatabaseInterfaceTest,
|
||||
getGeneralMessagesShouldGetGeneralMessagesFromTheMasterlistOnlyWhenFirstParamIsFalse) {
|
||||
ASSERT_NO_THROW(GenerateMasterlist());
|
||||
ASSERT_NO_THROW(GenerateUserlist());
|
||||
ASSERT_NO_THROW(handle_->GetDatabase().LoadMasterlist(masterlistPath));
|
||||
ASSERT_NO_THROW(handle_->GetDatabase().LoadUserlist(userlistPath_));
|
||||
|
||||
auto messages = handle_->GetDatabase().GetGeneralMessages(false);
|
||||
|
||||
std::vector<Message> expectedMessages({
|
||||
Message(MessageType::say,
|
||||
generalMasterlistMessage,
|
||||
"file(\"" + missingEsp + "\")"),
|
||||
});
|
||||
EXPECT_EQ(expectedMessages, messages);
|
||||
}
|
||||
|
||||
TEST_P(
|
||||
DatabaseInterfaceTest,
|
||||
getGeneralMessagesShouldReturnOnlyValidMessagesIfConditionsAreEvaluated) {
|
||||
ASSERT_NO_THROW(GenerateMasterlist());
|
||||
ASSERT_NO_THROW(handle_->GetDatabase().LoadMasterlist(masterlistPath));
|
||||
|
||||
auto messages = handle_->GetDatabase().GetGeneralMessages(true);
|
||||
auto messages = handle_->GetDatabase().GetGeneralMessages(true, true);
|
||||
|
||||
EXPECT_TRUE(messages.empty());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user