diff --git a/picard/const/__init__.py b/picard/const/__init__.py index bbea7551e..709834db9 100644 --- a/picard/const/__init__.py +++ b/picard/const/__init__.py @@ -78,6 +78,7 @@ from picard.const.attributes import MB_ATTRIBUTES RELEASE_FORMATS = {} RELEASE_PRIMARY_GROUPS = {} RELEASE_SECONDARY_GROUPS = {} +RELEASE_STATUS = {} for k, v in MB_ATTRIBUTES.items(): if k.startswith('DB:medium_format/name:'): RELEASE_FORMATS[v] = v @@ -85,6 +86,8 @@ for k, v in MB_ATTRIBUTES.items(): RELEASE_PRIMARY_GROUPS[v] = v elif k.startswith('DB:release_group_secondary_type/name:'): RELEASE_SECONDARY_GROUPS[v] = v + elif k.startswith('DB:release_status/name:'): + RELEASE_STATUS[v] = v # Release countries from picard.const.countries import RELEASE_COUNTRIES # noqa: F401 # pylint: disable=unused-import diff --git a/picard/const/attributes.py b/picard/const/attributes.py index 4a4cc00e4..6eba5b89a 100644 --- a/picard/const/attributes.py +++ b/picard/const/attributes.py @@ -98,6 +98,7 @@ MB_ATTRIBUTES = { 'DB:medium_format/name:080': 'VinylDisc (DVD side)', 'DB:medium_format/name:081': 'VinylDisc (Vinyl side)', 'DB:medium_format/name:082': 'VinylDisc (CD side)', + 'DB:medium_format/name:083': 'Microcassette', 'DB:release_group_primary_type/name:001': 'Album', 'DB:release_group_primary_type/name:002': 'Single', 'DB:release_group_primary_type/name:003': 'EP', @@ -114,4 +115,8 @@ MB_ATTRIBUTES = { 'DB:release_group_secondary_type/name:009': 'Mixtape/Street', 'DB:release_group_secondary_type/name:010': 'Demo', 'DB:release_group_secondary_type/name:011': 'Audio drama', + 'DB:release_status/name:001': 'Official', + 'DB:release_status/name:002': 'Promotion', + 'DB:release_status/name:003': 'Bootleg', + 'DB:release_status/name:004': 'Pseudo-Release', } diff --git a/picard/ui/edittagdialog.py b/picard/ui/edittagdialog.py index e0e116997..e3656f1b7 100644 --- a/picard/ui/edittagdialog.py +++ b/picard/ui/edittagdialog.py @@ -2,6 +2,7 @@ # # Picard, the next-generation MusicBrainz tagger # Copyright (C) 2011 Michael Wiencek +# Copyright (C) 2019 Philipp Wolfer # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -22,12 +23,26 @@ from PyQt5 import ( QtWidgets, ) +from picard.const import ( + RELEASE_COUNTRIES, + RELEASE_FORMATS, + RELEASE_PRIMARY_GROUPS, + RELEASE_SECONDARY_GROUPS, + RELEASE_STATUS, +) from picard.util.tags import TAG_NAMES from picard.ui import PicardDialog from picard.ui.ui_edittagdialog import Ui_EditTagDialog +AUTOCOMPLETE_RELEASE_TYPES = [s.lower() for s + in sorted(RELEASE_PRIMARY_GROUPS) + sorted(RELEASE_SECONDARY_GROUPS)] +AUTOCOMPLETE_RELEASE_STATUS = sorted([s.lower() for s in RELEASE_STATUS]) +AUTOCOMPLETE_RELEASE_COUNTRIES = sorted(RELEASE_COUNTRIES, key=str.casefold) +AUTOCOMPLETE_RELEASE_FORMATS = sorted(RELEASE_FORMATS, key=str.casefold) + + class TagEditorDelegate(QtWidgets.QItemDelegate): def createEditor(self, parent, option, index): @@ -40,10 +55,26 @@ class TagEditorDelegate(QtWidgets.QItemDelegate): editor.setMinimumSize(QtCore.QSize(0, 80)) else: editor = super().createEditor(parent, option, index) + completer = None if tag in ('date', 'originaldate'): editor.setPlaceholderText(_('YYYY-MM-DD')) elif tag == 'originalyear': editor.setPlaceholderText(_('YYYY')) + elif tag == 'releasetype': + completer = QtWidgets.QCompleter(AUTOCOMPLETE_RELEASE_TYPES, editor) + elif tag == 'releasestatus': + completer = QtWidgets.QCompleter(AUTOCOMPLETE_RELEASE_STATUS, editor) + completer.setModelSorting(QtWidgets.QCompleter.CaseInsensitivelySortedModel) + elif tag == 'releasecountry': + completer = QtWidgets.QCompleter(AUTOCOMPLETE_RELEASE_COUNTRIES, editor) + completer.setModelSorting(QtWidgets.QCompleter.CaseInsensitivelySortedModel) + elif tag == 'media': + completer = QtWidgets.QCompleter(AUTOCOMPLETE_RELEASE_FORMATS, editor) + completer.setModelSorting(QtWidgets.QCompleter.CaseInsensitivelySortedModel) + if editor and completer: + completer.setCompletionMode(QtWidgets.QCompleter.UnfilteredPopupCompletion) + completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + editor.setCompleter(completer) return editor def get_tag_name(self, index): diff --git a/setup.py b/setup.py index 76623dd55..6b83dd4a3 100644 --- a/setup.py +++ b/setup.py @@ -572,6 +572,7 @@ class picard_update_constants(Command): 'DB:medium_format/name', 'DB:release_group_primary_type/name', 'DB:release_group_secondary_type/name', + 'DB:release_status/name', ) with open(attributes_potfile, 'rb') as f: log.info('Parsing %s' % attributes_potfile)