Skip to content

Commit 4bb7af2

Browse files
committed
Add provision for adding/removing plugin related tags.
1 parent d4d0d4a commit 4bb7af2

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

picard/tags/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
import re
3535

36+
from picard.config import get_config
3637
from picard.const.tags import ALL_TAGS
3738

3839

@@ -126,3 +127,12 @@ def display_tag_tooltip(name):
126127

127128
def display_tag_full_description(name):
128129
return ALL_TAGS.display_full_description(name)
130+
131+
132+
def remove_disabled_plugin_tags():
133+
config = get_config()
134+
plugins = config.setting['enabled_plugins']
135+
tvs = [tv for tv in ALL_TAGS if (lambda x: x.plugin_id)(tv)]
136+
for tv in tvs:
137+
if tv.plugin_id not in plugins:
138+
ALL_TAGS.remove(tv)

picard/tags/tagvar.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def __init__(
8383
self, name, shortdesc=None, longdesc=None, additionaldesc=None,
8484
is_preserved=False, is_hidden=False, is_script_variable=True, is_tag=True, is_calculated=False,
8585
is_file_info=False, is_from_mb=True, is_populated_by_picard=True, is_multi_value=False,
86-
see_also=None, related_options=None, doc_links=None
86+
see_also=None, related_options=None, doc_links=None, plugin_id=None
8787
):
8888
"""
8989
shortdesc: Short description (typically one or two words) in title case that is suitable
@@ -106,6 +106,7 @@ def __init__(
106106
see_also: an iterable containing ids of related tags
107107
related_options: an iterable containing the related option settings (see picard/options.py)
108108
doc_links: an iterable containing links to external documentation (DocumentLink tuples)
109+
plugin_id: the ID of the plugin providing the tag/variable (string, default: None)
109110
"""
110111
self._name = name
111112
self._shortdesc = shortdesc
@@ -123,6 +124,7 @@ def __init__(
123124
self.see_also = see_also
124125
self.related_options = related_options
125126
self.doc_links = doc_links
127+
self.plugin_id = plugin_id
126128

127129
@property
128130
def shortdesc(self):

picard/ui/options/plugins.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
N_,
5656
gettext as _,
5757
)
58+
from picard.tags import remove_disabled_plugin_tags
5859
from picard.util import (
5960
icontheme,
6061
open_local_path,
@@ -603,6 +604,7 @@ def v2int(elem):
603604
def save(self):
604605
config = get_config()
605606
config.setting['enabled_plugins'] = self.enabled_plugins()
607+
remove_disabled_plugin_tags()
606608
self.save_state()
607609

608610
def refresh_details(self, item):

test/test_tags.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
display_tag_tooltip,
4040
parse_comment_tag,
4141
parse_subtag,
42+
remove_disabled_plugin_tags,
4243
script_variable_tag_names,
4344
)
4445
from picard.tags.tagvar import (
@@ -59,6 +60,13 @@ def _translate_patch(s):
5960
return f"_({s})"
6061

6162

63+
class _config_patch():
64+
setting = {'enabled_plugins': ['plugin_id']}
65+
66+
def __init__(self):
67+
pass
68+
69+
6270
class TagVarTest(PicardTestCase):
6371
def test_basic_properties(self):
6472
tv = TagVar('name')
@@ -132,6 +140,7 @@ def setUp(self):
132140
is_file_info=True, is_hidden=True, is_script_variable=False)
133141
self.tagvar_notes2 = TagVar('notes2', shortdesc='notes2_sd', longdesc='notes2_ld', is_file_info=True, is_from_mb=False)
134142
self.tagvar_notes3 = TagVar('notes3', shortdesc='notes3_sd', longdesc='notes3_ld', is_from_mb=False)
143+
self.tagvar_plugin = TagVar('plugin', shortdesc='plugin_sd', longdesc='plugin_ld', plugin_id='plugin_id')
135144
self.tagvar_everything = TagVar('everything', shortdesc='everything sd', longdesc='everything ld.',
136145
additionaldesc='Test additional description.', is_preserved=True,
137146
is_script_variable=False, is_tag=False, is_calculated=True, is_file_info=True, is_from_mb=False,
@@ -531,3 +540,23 @@ def test_links_completeness(self):
531540
link = doc_link.link.strip()
532541
self.assertNotEqual(title, '', f"Invalid link (missing title) in '{str(tv)}' tag")
533542
self.assertNotEqual(link, '', f"Invalid link (missing URL) in '{str(tv)}' tag")
543+
544+
545+
class TagsPluginsTest(PicardTestCase):
546+
def setUp(self):
547+
self.tagvar_plugin_known = TagVar('known', shortdesc='known_sd', plugin_id='plugin_id')
548+
self.tagvar_plugin_unknown = TagVar('unknown', shortdesc='unknown_sd', plugin_id='unknown_plugin_id')
549+
550+
def test_cleaning_plugin_var(self):
551+
tagvars = TagVars(
552+
self.tagvar_plugin_known,
553+
self.tagvar_plugin_unknown,
554+
)
555+
self.assertEqual(len(tagvars), 2)
556+
557+
with mock.patch('picard.tags.get_config', return_value=_config_patch()):
558+
with mock.patch('picard.tags.ALL_TAGS', tagvars):
559+
remove_disabled_plugin_tags()
560+
self.assertEqual(len(tagvars), 1)
561+
562+
self.assertEqual(tagvars[0], self.tagvar_plugin_known)

0 commit comments

Comments
 (0)