Add Database::user_general_messages()

This commit is contained in:
Oliver Hamlet
2026-01-02 16:41:42 +00:00
parent 744586fe96
commit 1d123c8b21
9 changed files with 170 additions and 17 deletions
+13
View File
@@ -178,6 +178,19 @@ public:
virtual std::vector<Message> GetGeneralMessages(
bool evaluateConditions = false) const = 0;
/**
* @brief Get all general messages listed in the loaded userlist.
* @param evaluateConditions
* If true, any metadata conditions are evaluated before the metadata
* is returned, otherwise unevaluated metadata is returned. Evaluating
* general message conditions also clears the condition cache before
* evaluating conditions.
* @returns A vector of messages supplied in the userlist but not attached to
* any particular plugin.
*/
virtual std::vector<Message> GetUserGeneralMessages(
bool evaluateConditions = false) const = 0;
/**
* @brief Gets the groups that are defined in the loaded metadata lists.
* @param includeUserMetadata
+10
View File
@@ -95,6 +95,16 @@ std::vector<Message> Database::GetGeneralMessages(
}
}
std::vector<Message> Database::GetUserGeneralMessages(
bool evaluateConditions) const {
try {
return convert<Message>(
database_->user_general_messages(evaluateConditions));
} catch (const ::rust::Error& e) {
std::rethrow_exception(mapError(e));
}
}
std::vector<Group> Database::GetGroups(bool includeUserMetadata) const {
try {
return convert<Group>(database_->groups(includeUserMetadata));
+3
View File
@@ -38,6 +38,9 @@ public:
std::vector<Message> GetGeneralMessages(
bool evaluateConditions = false) const override;
std::vector<Message> GetUserGeneralMessages(
bool evaluateConditions = false) const override;
std::vector<Group> GetGroups(bool includeUserMetadata = true) const override;
std::vector<Group> GetUserGroups() const override;
void SetUserGroups(const std::vector<Group>& groups) override;
+14
View File
@@ -144,6 +144,20 @@ impl Database {
.map_err(Into::into)
}
pub fn user_general_messages(
&self,
evaluate_conditions: bool,
) -> Result<Vec<Message>, VerboseError> {
Ok(self
.0
.read()
.map_err(DatabaseLockPoisonError::from)?
.user_general_messages(to_eval_mode(evaluate_conditions))?
.into_iter()
.map(Into::into)
.collect())
}
pub fn groups(&self, include_user_metadata: bool) -> Result<Vec<Group>, VerboseError> {
Ok(self
.0
+2
View File
@@ -276,6 +276,8 @@ mod ffi {
pub fn general_messages(&self, evaluate_conditions: bool) -> Result<Vec<Message>>;
pub fn user_general_messages(&self, evaluate_conditions: bool) -> Result<Vec<Message>>;
pub fn groups(&self, include_user_metadata: bool) -> Result<Vec<Group>>;
pub fn user_groups(&self) -> Result<Vec<Group>>;
@@ -566,6 +566,21 @@ TEST_P(
EXPECT_TRUE(messages.empty());
}
TEST_P(DatabaseInterfaceTest,
getUserGeneralMessagesShouldGetGeneralMessagesFromTheUserlistOnly) {
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().GetUserGeneralMessages();
std::vector<Message> expectedMessages({
Message(MessageType::say, generalUserlistMessage),
});
EXPECT_EQ(expectedMessages, messages);
}
TEST_P(DatabaseInterfaceTest,
getPluginMetadataShouldReturnAnEmptyOptionalIfThePluginHasNoMetadata) {
EXPECT_FALSE(handle_->GetDatabase().GetPluginMetadata(blankEsm));