[picard] Add new plugins.

alexlan alexlan at fedoraproject.org
Sun Aug 21 06:36:34 UTC 2011


commit acb83456d4e3b1c44860cb7b5e4a370504694a20
Author: Alex Lancaster <alexlan at fedoraproject.org>
Date:   Sun Aug 21 02:35:13 2011 -0400

    Add new plugins.

 featartistsintitles.py |   23 +++++++++++
 no_release.py          |  104 ++++++++++++++++++++++++++++++++++++++++++++++++
 release_type.py        |   36 ++++++++++++++++
 3 files changed, 163 insertions(+), 0 deletions(-)
---
diff --git a/featartistsintitles.py b/featartistsintitles.py
new file mode 100644
index 0000000..166b692
--- /dev/null
+++ b/featartistsintitles.py
@@ -0,0 +1,23 @@
+PLUGIN_NAME = 'Feat. Artists in Titles'
+PLUGIN_AUTHOR = 'Lukas Lalinsky, Michael Wiencek'
+PLUGIN_DESCRIPTION = 'Move "feat." from artist names to album and track titles.'
+PLUGIN_VERSION = "0.1"
+PLUGIN_API_VERSIONS = ["0.9.0", "0.10", "0.15"]
+
+from picard.metadata import register_album_metadata_processor, register_track_metadata_processor
+import re
+
+def move_album_featartists(tagger, metadata, release):
+    match = re.match(r"([\s\S]+) feat.([\s\S]+)", metadata["albumartist"])
+    if match:
+        metadata["albumartist"] = match.group(1)
+        metadata["album"] += " (feat.%s)" % match.group(2)
+
+def move_track_featartists(tagger, metadata, release, track):
+    match = re.match(r"([\s\S]+) feat.([\s\S]+)", metadata["artist"])
+    if match:
+        metadata["artist"] = match.group(1)
+        metadata["title"] += " (feat.%s)" % match.group(2)
+
+register_album_metadata_processor(move_album_featartists)
+register_track_metadata_processor(move_track_featartists)
diff --git a/no_release.py b/no_release.py
new file mode 100644
index 0000000..f3b6280
--- /dev/null
+++ b/no_release.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+
+PLUGIN_NAME = u'No release'
+PLUGIN_AUTHOR = u'Johannes Weißl'
+PLUGIN_DESCRIPTION = '''Do not store specific release information in releases of unknown origin.'''
+PLUGIN_VERSION = '0.1'
+PLUGIN_API_VERSIONS = ['0.15']
+
+from PyQt4 import QtCore, QtGui
+
+from picard.album import Album
+from picard.metadata import register_album_metadata_processor, register_track_metadata_processor
+from picard.ui.options import register_options_page, OptionsPage
+from picard.ui.itemviews import BaseAction, register_album_action
+from picard.config import BoolOption, TextOption
+
+class Ui_NoReleaseOptionsPage(object):
+    def setupUi(self, NoReleaseOptionsPage):
+        NoReleaseOptionsPage.setObjectName('NoReleaseOptionsPage')
+        NoReleaseOptionsPage.resize(394, 300)
+        self.verticalLayout = QtGui.QVBoxLayout(NoReleaseOptionsPage)
+        self.verticalLayout.setObjectName('verticalLayout')
+        self.groupBox = QtGui.QGroupBox(NoReleaseOptionsPage)
+        self.groupBox.setObjectName('groupBox')
+        self.vboxlayout = QtGui.QVBoxLayout(self.groupBox)
+        self.vboxlayout.setObjectName('vboxlayout')
+        self.norelease_enable = QtGui.QCheckBox(self.groupBox)
+        self.norelease_enable.setObjectName('norelease_enable')
+        self.vboxlayout.addWidget(self.norelease_enable)
+        self.label = QtGui.QLabel(self.groupBox)
+        self.label.setObjectName('label')
+        self.vboxlayout.addWidget(self.label)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName('horizontalLayout')
+        self.norelease_strip_tags = QtGui.QLineEdit(self.groupBox)
+        self.norelease_strip_tags.setObjectName('norelease_strip_tags')
+        self.horizontalLayout.addWidget(self.norelease_strip_tags)
+        self.vboxlayout.addLayout(self.horizontalLayout)
+        self.verticalLayout.addWidget(self.groupBox)
+        spacerItem = QtGui.QSpacerItem(368, 187, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout.addItem(spacerItem)
+
+        self.retranslateUi(NoReleaseOptionsPage)
+        QtCore.QMetaObject.connectSlotsByName(NoReleaseOptionsPage)
+
+    def retranslateUi(self, NoReleaseOptionsPage):
+        self.groupBox.setTitle(QtGui.QApplication.translate('NoReleaseOptionsPage', 'No release', None, QtGui.QApplication.UnicodeUTF8))
+        self.norelease_enable.setText(QtGui.QApplication.translate('NoReleaseOptionsPage', _('Enable plugin for all releases by default'), None, QtGui.QApplication.UnicodeUTF8))
+        self.label.setText(QtGui.QApplication.translate('NoReleaseOptionsPage', _('Tags to strip (comma-separated)'), None, QtGui.QApplication.UnicodeUTF8))
+
+def strip_release_specific_metadata(tagger, metadata):
+    strip_tags = tagger.config.setting['norelease_strip_tags']
+    strip_tags = [tag.strip() for tag in strip_tags.split(',')]
+    for tag in strip_tags:
+        if tag in metadata:
+            del metadata[tag]
+
+class NoReleaseAction(BaseAction):
+    NAME = _('Remove specific release information...')
+    def callback(self, objs):
+        for album in objs:
+            if isinstance(album, Album):
+                strip_release_specific_metadata(self.tagger, album.metadata)
+                for track in album.tracks:
+                    strip_release_specific_metadata(self.tagger, track.metadata)
+                    for file in track.linked_files:
+                        track.update_file_metadata(file)
+                album.update()
+
+class NoReleaseOptionsPage(OptionsPage):
+    NAME = 'norelease'
+    TITLE = 'No release'
+    PARENT = 'plugins'
+
+    options = [
+        BoolOption('setting', 'norelease_enable', False),
+        TextOption('setting', 'norelease_strip_tags', 'asin,barcode,catalognumber,date,label,media,releasecountry,releasestatus'),
+    ]
+
+    def __init__(self, parent=None):
+        super(NoReleaseOptionsPage, self).__init__(parent)
+        self.ui = Ui_NoReleaseOptionsPage()
+        self.ui.setupUi(self)
+
+    def load(self):
+        self.ui.norelease_strip_tags.setText(self.config.setting['norelease_strip_tags'])
+        self.ui.norelease_enable.setChecked(self.config.setting['norelease_enable'])
+
+    def save(self):
+        self.config.setting['norelease_strip_tags'] = unicode(self.ui.norelease_strip_tags.text())
+        self.config.setting['norelease_enable'] = self.ui.norelease_enable.isChecked()
+
+def NoReleaseAlbumProcessor(tagger, metadata, release):
+    if tagger.config.setting['norelease_enable']:
+        strip_release_specific_metadata(tagger, metadata)
+
+def NoReleaseTrackProcessor(tagger, metadata, track, release):
+    if tagger.config.setting['norelease_enable']:
+        strip_release_specific_metadata(tagger, metadata)
+
+register_album_metadata_processor(NoReleaseAlbumProcessor)
+register_track_metadata_processor(NoReleaseTrackProcessor)
+register_album_action(NoReleaseAction())
+register_options_page(NoReleaseOptionsPage)
diff --git a/release_type.py b/release_type.py
new file mode 100644
index 0000000..6984d10
--- /dev/null
+++ b/release_type.py
@@ -0,0 +1,36 @@
+PLUGIN_NAME = 'Release Type'
+PLUGIN_AUTHOR = 'Elliot Chance'
+PLUGIN_DESCRIPTION = 'Appends information to EPs and Singles'
+PLUGIN_VERSION = '1.2'
+PLUGIN_API_VERSIONS = ["0.9.0", "0.10", "0.15"]
+
+from picard.metadata import register_album_metadata_processor
+import re
+
+#==================
+# options
+#==================
+_SINGLE = " (single)"
+_EP = " EP"
+
+def add_release_type(tagger, metadata, release):
+
+  # make sure "EP" (or "single", ...) is not already a word in the name
+  words = metadata["album"].lower().split(" ")
+  for word in ["ep", "e.p.", "single", "(single)"]:
+    if word in words:
+      return
+
+  # check release type
+  if metadata["releasetype"] == "ep":
+    rs = _EP;
+  elif metadata["releasetype"] == "single":
+    rs = _SINGLE;
+  else:
+    rs = ""
+
+  # append title
+  metadata["album"] = metadata["album"] + rs
+
+register_album_metadata_processor(add_release_type)
+


More information about the scm-commits mailing list