mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Add Database::set_user_known_bash_tags()
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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::*;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user