Add Database::set_user_general_messages()

This commit is contained in:
Oliver Hamlet
2026-01-02 16:41:42 +00:00
parent 1d123c8b21
commit f582a513bc
10 changed files with 110 additions and 0 deletions
+8
View File
@@ -191,6 +191,14 @@ public:
virtual std::vector<Message> GetUserGeneralMessages(
bool evaluateConditions = false) const = 0;
/**
* @brief Sets the general messages to store in the userlist, replacing any
* messages already stored there.
* @param messages
* The messages to set.
*/
virtual void SetUserGeneralMessages(const std::vector<Message>& messages) = 0;
/**
* @brief Gets the groups that are defined in the loaded metadata lists.
* @param includeUserMetadata
+9
View File
@@ -105,6 +105,15 @@ std::vector<Message> Database::GetUserGeneralMessages(
}
}
void Database::SetUserGeneralMessages(const std::vector<Message>& messages) {
try {
database_->set_user_general_messages(
convert<loot::rust::Message>(messages));
} 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));
+2
View File
@@ -41,6 +41,8 @@ public:
std::vector<Message> GetUserGeneralMessages(
bool evaluateConditions = false) const override;
void SetUserGeneralMessages(const std::vector<Message>& messages) override;
std::vector<Group> GetGroups(bool includeUserMetadata = true) const override;
std::vector<Group> GetUserGroups() const override;
void SetUserGroups(const std::vector<Group>& groups) override;
+16
View File
@@ -158,6 +158,22 @@ impl Database {
.collect())
}
#[expect(
clippy::vec_box,
reason = "Message is an opaque type to C++ so needs to be held in a Box."
)]
pub fn set_user_general_messages(
&self,
messages: Vec<Box<Message>>,
) -> Result<(), VerboseError> {
self.0
.write()
.map_err(DatabaseLockPoisonError::from)?
.set_user_general_messages(to_vec_of_unwrapped(messages));
Ok(())
}
pub fn groups(&self, include_user_metadata: bool) -> Result<Vec<Group>, VerboseError> {
Ok(self
.0
+2
View File
@@ -278,6 +278,8 @@ mod ffi {
pub fn user_general_messages(&self, evaluate_conditions: bool) -> Result<Vec<Message>>;
pub fn set_user_general_messages(&self, messages: Vec<Box<Message>>) -> Result<()>;
pub fn groups(&self, include_user_metadata: bool) -> Result<Vec<Group>>;
pub fn user_groups(&self) -> Result<Vec<Group>>;
@@ -581,6 +581,24 @@ TEST_P(DatabaseInterfaceTest,
EXPECT_EQ(expectedMessages, messages);
}
TEST_P(DatabaseInterfaceTest,
setUserGeneralMessagesShouldReplaceExistingUserGeneralMessages) {
ASSERT_NO_THROW(GenerateMasterlist());
ASSERT_NO_THROW(GenerateUserlist());
ASSERT_NO_THROW(handle_->GetDatabase().LoadMasterlist(masterlistPath));
ASSERT_NO_THROW(handle_->GetDatabase().LoadUserlist(userlistPath_));
std::vector<Message> replacementMessages({
Message(MessageType::say, "A replacement message"),
});
handle_->GetDatabase().SetUserGeneralMessages(replacementMessages);
auto messages = handle_->GetDatabase().GetUserGeneralMessages();
EXPECT_EQ(replacementMessages, messages);
}
TEST_P(DatabaseInterfaceTest,
getPluginMetadataShouldReturnAnEmptyOptionalIfThePluginHasNoMetadata) {
EXPECT_FALSE(handle_->GetDatabase().GetPluginMetadata(blankEsm));