Add Database::set_user_known_bash_tags()

This commit is contained in:
Oliver Hamlet
2026-01-02 15:30:40 +00:00
parent 2fe107d66b
commit db97a0786a
10 changed files with 92 additions and 2 deletions
+9
View File
@@ -152,6 +152,15 @@ public:
*/
virtual std::vector<std::string> GetUserKnownBashTags() const = 0;
/**
* @brief Sets the known Bash Tags to store in the userlist, overwriting any
* existing definitions there.
* @param bashTags
* The Bash Tag names to set.
*/
virtual void SetUserKnownBashTags(
const std::vector<std::string>& bashTags) = 0;
/**
* @brief Get all general messages listed in the loaded metadata lists.
* @param evaluateConditions
+9 -2
View File
@@ -70,8 +70,15 @@ std::vector<std::string> Database::GetKnownBashTags() const {
std::vector<std::string> Database::GetUserKnownBashTags() const {
try {
return convert<std::string>(
database_->user_known_bash_tags());
return convert<std::string>(database_->user_known_bash_tags());
} catch (const ::rust::Error& e) {
std::rethrow_exception(mapError(e));
}
}
void Database::SetUserKnownBashTags(const std::vector<std::string>& bashTags) {
try {
return database_->set_user_known_bash_tags(convert(bashTags));
} catch (const ::rust::Error& e) {
std::rethrow_exception(mapError(e));
}
+2
View File
@@ -32,6 +32,8 @@ public:
std::vector<std::string> GetUserKnownBashTags() const override;
void SetUserKnownBashTags(const std::vector<std::string>& bashTags) override;
std::vector<Message> GetGeneralMessages(
bool evaluateConditions = false) const override;
+9
View File
@@ -120,6 +120,15 @@ impl Database {
.to_vec())
}
pub fn set_user_known_bash_tags(&self, bash_tags: Vec<String>) -> Result<(), VerboseError> {
self.0
.write()
.map_err(DatabaseLockPoisonError::from)?
.set_user_known_bash_tags(bash_tags);
Ok(())
}
pub fn general_messages(
&self,
evaluate_conditions: bool,
+2
View File
@@ -272,6 +272,8 @@ mod ffi {
pub fn user_known_bash_tags(&self) -> Result<Vec<String>>;
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 groups(&self, include_user_metadata: bool) -> Result<Vec<Group>>;
@@ -502,6 +502,23 @@ TEST_P(DatabaseInterfaceTest,
EXPECT_EQ(expectedTags, tags);
}
TEST_P(DatabaseInterfaceTest,
setUserKnownBashTagsShouldReplaceAllKnownBashTagsInTheUserlist) {
ASSERT_NO_THROW(GenerateMasterlist());
ASSERT_NO_THROW(GenerateUserlist());
ASSERT_NO_THROW(handle_->GetDatabase().LoadMasterlist(masterlistPath));
ASSERT_NO_THROW(handle_->GetDatabase().LoadUserlist(userlistPath_));
std::vector<std::string> tags({
"Filter",
});
handle_->GetDatabase().SetUserKnownBashTags({"Filter"});
EXPECT_EQ(tags, handle_->GetDatabase().GetUserKnownBashTags());
}
TEST_P(DatabaseInterfaceTest,
getGeneralMessagesShouldGetGeneralMessagesFromTheMasterlistAndUserlist) {
ASSERT_NO_THROW(GenerateMasterlist());
+10
View File
@@ -157,6 +157,16 @@ impl Database {
.to_vec())
}
#[napi]
pub fn set_user_known_bash_tags(&self, bash_tags: Vec<String>) -> Result<(), VerboseError> {
self.0
.write()
.map_err(DatabaseLockPoisonError::from)?
.set_user_known_bash_tags(bash_tags);
Ok(())
}
#[napi]
pub fn general_messages(
&self,
+9
View File
@@ -124,6 +124,15 @@ impl Database {
.to_vec())
}
pub fn set_user_known_bash_tags(&self, bash_tags: Vec<String>) -> Result<(), VerboseError> {
self.0
.write()
.map_err(DatabaseLockPoisonError::from)?
.set_user_known_bash_tags(bash_tags);
Ok(())
}
pub fn general_messages(
&self,
evaluate_conditions: bool,
+21
View File
@@ -180,6 +180,12 @@ impl Database {
self.userlist.bash_tags()
}
/// Sets the known Bash Tags to store in the userlist, replacing any
/// existing values stored there.
pub fn set_user_known_bash_tags(&mut self, bash_tags: Vec<String>) {
self.userlist.set_bash_tags(bash_tags);
}
/// Get all general messages listed in the loaded metadata lists.
pub fn general_messages(
&self,
@@ -914,6 +920,21 @@ plugins:
assert_eq!(&["Relev", "Delev"], database.user_known_bash_tags());
}
#[test]
fn set_user_known_bash_tags_should_replace_existing_user_known_bash_tags() {
let fixture = Fixture::new(GameType::Oblivion);
let mut database = fixture.database();
let userlist_path = fixture.inner.local_path.join("userlist.yaml");
std::fs::write(&userlist_path, "bash_tags: [Relev, Delev]").unwrap();
database.load_userlist(&userlist_path).unwrap();
database.set_user_known_bash_tags(vec!["Filter".to_owned()]);
assert_eq!(&["Filter"], database.user_known_bash_tags());
}
mod general_messages {
use super::*;
+4
View File
@@ -310,6 +310,10 @@ impl MetadataDocument {
}
}
pub(crate) fn set_bash_tags(&mut self, bash_tags: Vec<String>) {
self.bash_tags = bash_tags;
}
pub(crate) fn set_groups(&mut self, groups: Vec<Group>) {
// Ensure that the default group is present.
let default_group_exists = groups.iter().any(|g| g.name() == Group::DEFAULT_NAME);