13
0

Update Plugin-Tag policy

* Don't store tags from plugin's own metadata
  Those are set during plugin-scan every time
* Save user-tags even if they're not new
* Reset tags to factory-file tag (if any)

Old user tag files (prior to this commit) are interpreted
as "factory-file". This will auto-correct after the
first save_tags().
This commit is contained in:
Robin Gareus 2019-08-27 13:43:09 +02:00
parent 37caa11b52
commit 79ac8215e9
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 16 additions and 6 deletions

View File

@ -148,6 +148,7 @@ private:
typedef std::set<PluginTag> PluginTagList;
PluginTagList ptags;
PluginTagList ftags; /* factory-file defaults */
std::string sanitize_tag (const std::string) const;

View File

@ -1574,8 +1574,8 @@ PluginManager::save_tags ()
}
}
#endif
if ((*i).tagtype == FromFactoryFile || (*i).tagtype == FromUserFile) {
/* user file should contain only plugins that are (a) newly user-tagged or (b) previously unknown */
if ((*i).tagtype <= FromFactoryFile) {
/* user file should contain only plugins that are user-tagged */
continue;
}
XMLNode* node = new XMLNode (X_("Plugin"));
@ -1583,9 +1583,7 @@ PluginManager::save_tags ()
node->set_property (X_("id"), (*i).unique_id);
node->set_property (X_("tags"), (*i).tags);
node->set_property (X_("name"), (*i).name);
if ((*i).tagtype >= FromUserFile) {
node->set_property (X_("user-set"), "1");
}
root->add_child_nocopy (*node);
}
@ -1650,6 +1648,12 @@ PluginManager::set_tags (PluginType t, string id, string tag, std::string name,
ptags.erase (ps);
ptags.insert (ps);
}
if (ttype == FromFactoryFile) {
if (find (ftags.begin(), ftags.end(), ps) != ftags.end()) {
ftags.erase (ps);
}
ftags.insert (ps);
}
if (ttype == FromGui) {
PluginTagChanged (t, id, sanitized); /* EMIT SIGNAL */
}
@ -1660,11 +1664,16 @@ PluginManager::reset_tags (PluginInfoPtr const& pi)
{
PluginTag ps (pi->type, pi->unique_id, pi->category, pi->name, FromPlug);
PluginTagList::const_iterator j = find (ftags.begin(), ftags.end(), ps);
if (j != ftags.end()) {
ps = *j;
}
PluginTagList::const_iterator i = find (ptags.begin(), ptags.end(), ps);
if (i != ptags.end()) {
ptags.erase (ps);
ptags.insert (ps);
PluginTagChanged (pi->type, pi->unique_id, pi->category); /* EMIT SIGNAL */
PluginTagChanged (ps.type, ps.unique_id, ps.tags); /* EMIT SIGNAL */
}
}