Esempio n. 1
0
 def __init__(self):
     super(save_and_rewrite_header, self).__init__()
     register_file_action(self)
     register_track_action(self)
     register_album_action(self)
     register_cluster_action(self)
     register_clusterlist_action(self)
Esempio n. 2
0
	def __init__(self):
		super(NiCeFileAction, self).__init__()
		register_file_action(self)
		register_track_action(self)
		register_album_action(self)
		register_cluster_action(self)
		register_clusterlist_action(self)
 def __init__(self):
     super(save_and_rewrite_header, self).__init__()
     register_file_action(self)
     register_track_action(self)
     register_album_action(self)
     register_cluster_action(self)
     register_clusterlist_action(self)
Esempio n. 4
0
    options = [
        IntOption("setting", "bpm_slider_parameter", 1)
    ]

    def __init__(self, parent=None):
        super(BPMOptionsPage, self).__init__(parent)
        self.ui = Ui_BPMOptionsPage()
        self.ui.setupUi(self)
        self.ui.slider_parameter.valueChanged.connect(self.update_parameters)

    def load(self):
        cfg = self.config.setting
        self.ui.slider_parameter.setValue(cfg["bpm_slider_parameter"])

    def save(self):
        cfg = self.config.setting
        cfg["bpm_slider_parameter"] = self.ui.slider_parameter.value()

    def update_parameters(self):
        val = self.ui.slider_parameter.value()
        samplerate, buf_size, hop_size = [unicode(v) for v in
                                          bpm_slider_settings[val]]
        self.ui.samplerate_value.setText(samplerate)
        self.ui.win_s_value.setText(buf_size)
        self.ui.hop_s_value.setText(hop_size)


register_file_action(FileBPM())
register_options_page(BPMOptionsPage)
Esempio n. 5
0
        try:
            atoms = mp4.Atoms(fileobj)
            try:
                path = atoms.path("moov", "udta", "meta")
            except KeyError:
                pass
            else:
                for atom in reversed(path):
                    size = (sum(c.length for c in atom.children) + 8 +
                            mp4._SKIP_SIZE.get(atom.name, 0))
                    if size != atom.length:
                        fileobj.seek(atom.offset)
                        fileobj.write(struct.pack(">I", size))
                        atom.length = size
                        modified = True
        finally:
            fileobj.close()
        return modified

    def callback(self, objs):
        files = [o for o in objs if isinstance(o, File)]
        for file in files:
            if self.fix(encode_filename(file.filename)):
                self.log.info("fix_mp4_meta: %s - Fixed", file.filename)
            else:
                self.log.info("fix_mp4_meta: %s - Not needed", file.filename)
            QtCore.QCoreApplication.processEvents()


register_file_action(FixMp4Meta())
Esempio n. 6
0
        TextOption("setting", "moodbar_wav_command", "moodbar"),
        TextOption("setting", "moodbar_wav_options", "-o")
    ]

    def __init__(self, parent=None):
        super(MoodbarOptionsPage, self).__init__(parent)
        self.ui = Ui_MoodbarOptionsPage()
        self.ui.setupUi(self)

    def load(self):
        self.ui.vorbis_command.setText(
            self.config.setting["moodbar_vorbis_command"])
        self.ui.mp3_command.setText(self.config.setting["moodbar_mp3_command"])
        self.ui.flac_command.setText(
            self.config.setting["moodbar_flac_command"])
        self.ui.wav_command.setText(self.config.setting["moodbar_wav_command"])

    def save(self):
        self.config.setting["moodbar_vorbis_command"] = unicode(
            self.ui.vorbis_command.text())
        self.config.setting["moodbar_mp3_command"] = unicode(
            self.ui.mp3_command.text())
        self.config.setting["moodbar_flac_command"] = unicode(
            self.ui.flac_command.text())
        self.config.setting["moodbar_wav_command"] = unicode(
            self.ui.wav_command.text())


register_file_action(MoodBar())
register_options_page(MoodbarOptionsPage)
Esempio n. 7
0
        nv("edit-recording.length", track.metadata["~length"])


class AddFileAsRelease(AddObjectAsEntity):
    NAME = "Add File As Release..."
    objtype = File
    submit_url = 'http://musicbrainz.org/release/add'

    def set_form_values(self, track):
        nv = self.add_form_value

        # Main album attributes
        if track.metadata["albumartist"]:
            nv("artist_credit.names.0.artist.name", track.metadata["albumartist"])
        else:
            nv("artist_credit.names.0.artist.name", track.metadata["artist"])
        if track.metadata["album"]:
            nv("name", track.metadata["album"])
        else:
            nv("name", track.metadata["title"])

        # Tracklist
        nv("mediums.0.track.0.name", track.metadata["title"])
        nv("mediums.0.track.0.artist_credit.names.0.name", track.metadata["artist"])
        nv("mediums.0.track.0.length", str(track.metadata.length))


register_cluster_action(AddClusterAsRelease())
register_file_action(AddFileAsRecording())
register_file_action(AddFileAsRelease())
Esempio n. 8
0
    NAME = "Open file"

    def callback(self, objs):
        for obj in objs:
            if isinstance(obj, File):
                startfile(obj.filename)
                break
            elif isinstance(obj, Track):
                for linked in obj.linked_files:
                    startfile(linked.filename)
                    return


class OpenFolder(BaseAction):
    NAME = "Open folder"

    def callback(self, objs):
        folders = set()
        for obj in objs:
            if isinstance(obj, File):
                folders.add(os.path.dirname(obj.filename))
            elif isinstance(obj, Track):
                for linked in obj.linked_files:
                    folders.add(os.path.dirname(linked.filename))
        for folder in folders:
            startfile(folder)


register_file_action(OpenFile())
register_file_action(OpenFolder())
Esempio n. 9
0
from picard.metadata import register_track_metadata_processor

class SearchAMGR(BaseAction):
    NAME = "Search AMG for Release"
    def callback(self, objs):
        cluster = objs[0]
        url = "http://wc10.allmusic.com/cg/amg.dll?P=amg&opt1=2&sql="
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"])
        webbrowser2.open(url)
register_cluster_action(SearchAMGR())
register_album_action(SearchAMGR())

class SearchAMGA(BaseAction):
    NAME = "Search AMG for Artist"
    def callback(self, objs):
        cluster = objs[0]
        url = "http://wc09.allmusic.com/cg/amg.dll?P=amg&opt1=1&sql="
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"])
        webbrowser2.open(url)
register_cluster_action(SearchAMGA())
register_album_action(SearchAMGA())

class SearchAMGT(BaseAction):
    NAME = "Search AMG for Track"
    def callback(self, objs):
        file = objs[0]
        url = "http://wc10.allmusic.com/cg/amg.dll?P=amg&opt1=3&sql="
        url += QtCore.QUrl.toPercentEncoding(file.metadata["title"])
        webbrowser2.open(url)
register_file_action(SearchAMGT())
Esempio n. 10
0
register_cluster_action(SearchAMGR())
register_album_action(SearchAMGR())

class SearchAMGA(BaseAction):
    NAME = "Search AMG for Artist"
    def callback(self, objs):
        cluster = objs[0]
        url = "http://www.allmusic.com/search/artist/"
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["albumartist"])
        webbrowser2.open(url)
register_cluster_action(SearchAMGA())
register_album_action(SearchAMGA())

class SearchAMGTc(BaseAction):
    NAME = "Search AMG (non-classical music) for Track"
    def callback(self, objs):
        file = objs[0]
        url = "http://www.allmusic.com/search/song/"
        url += QtCore.QUrl.toPercentEncoding(file.metadata["title"])
        webbrowser2.open(url)
register_file_action(SearchAMGTc())

class SearchAMGT(BaseAction):
    NAME = "Search AMG (classical music) for Track"
    def callback(self, objs):
        file = objs[0]
        url = "http://www.allmusic.com/search/work/"
        url += QtCore.QUrl.toPercentEncoding(file.metadata["title"])
        webbrowser2.open(url)
register_file_action(SearchAMGT())
Esempio n. 11
0
        self.spacer = QtWidgets.QSpacerItem(0, 0,
                                            QtWidgets.QSizePolicy.Minimum,
                                            QtWidgets.QSizePolicy.Expanding)
        self.box.addItem(self.spacer)

    def load(self):
        self.appendReleaseTypeToAlbum.setChecked(
            config.setting[r'appendReleaseTypeToAlbum'])
        self.includeBarcode.setChecked(config.setting[r'includeBarcode'])
        # self.includeISRC.setChecked(config.setting[r'includeISRC'])
        self.includeASIN.setChecked(config.setting[r'includeASIN'])
        self.includeDiscID.setChecked(config.setting[r'includeDiscID'])
        self.removeMBIDs.setChecked(config.setting[r'removeMBIDs'])

    def save(self):
        config.setting[
            r'appendReleaseTypeToAlbum'] = self.appendReleaseTypeToAlbum.isChecked(
            )
        config.setting[r'includeBarcode'] = self.includeBarcode.isChecked()
        # config.setting[r'includeISRC'] = self.includeISRC.isChecked()
        config.setting[r'includeASIN'] = self.includeASIN.isChecked()
        config.setting[r'includeDiscID'] = self.includeDiscID.isChecked()
        config.setting[r'removeMBIDs'] = self.removeMBIDs.isChecked()


register_file_action(SuperComment())
register_file_post_addition_to_track_processor(SuperComment().processFile)
# register_track_action(SuperComment())
# register_track_metadata_processor(SuperComment().process)
register_options_page(SuperCommentOptionsPage)
Esempio n. 12
0
        try:
            atoms = mp4.Atoms(fileobj)
            try:
                path = atoms.path("moov", "udta", "meta")
            except KeyError:
                pass
            else:
                for atom in reversed(path):
                    size = (sum(c.length for c in atom.children) + 8 +
                            mp4._SKIP_SIZE.get(atom.name, 0))
                    if size != atom.length:
                        fileobj.seek(atom.offset)
                        fileobj.write(struct.pack(">I", size))
                        atom.length = size
                        modified = True
        finally:
            fileobj.close()
        return modified

    def callback(self, objs):
        files = [o for o in objs if isinstance(o, File)]
        for file in files:
            if self.fix(encode_filename(file.filename)):
                self.log.info("fix_mp4_meta: %s - Fixed", file.filename)
            else:
                self.log.info("fix_mp4_meta: %s - Not needed", file.filename)
            QtCore.QCoreApplication.processEvents()


register_file_action(FixMp4Meta())
Esempio n. 13
0
# -*- coding: utf-8 -*-

PLUGIN_NAME = u"Detele Files"
PLUGIN_AUTHOR = u"Ovidiu-Florin Bogdan"
PLUGIN_DESCRIPTION = "Adds a context menu item that gives the possibility to delete the selected file(s) or track(s) from the filesystem."
PLUGIN_VERSION = "0.1"
PLUGIN_API_VERSIONS = ["1.0.0"]

import os
from picard.file import File
from picard.track import Track
from picard.ui.itemviews import BaseAction, register_file_action

class DeleteTheSelectedFiles(BaseAction):
	NAME = "Delete from filesystem"
	
	def callback(self, objs):
		if len(objs) < 1:
			return
		
		for obj in objs:
			if isinstance(obj, File):
				os.remove(obj.filename)
				obj.remove()
			elif isinstance(obj, Track):
				for linked in obj.linked_files:
					os.remove(linked.filemane)
					linked.remove()
				
register_file_action(DeleteTheSelectedFiles())
Esempio n. 14
0
        TextOption("setting", "moodbar_wav_options", "-o")
    ]

    def __init__(self, parent=None):
        super(MoodbarOptionsPage, self).__init__(parent)
        self.ui = Ui_MoodbarOptionsPage()
        self.ui.setupUi(self)

    def load(self):
        self.ui.vorbis_command.setText(
            self.config.setting["moodbar_vorbis_command"])
        self.ui.mp3_command.setText(
            self.config.setting["moodbar_mp3_command"])
        self.ui.flac_command.setText(
            self.config.setting["moodbar_flac_command"])
        self.ui.wav_command.setText(
            self.config.setting["moodbar_wav_command"])

    def save(self):
        self.config.setting["moodbar_vorbis_command"] = unicode(
            self.ui.vorbis_command.text())
        self.config.setting["moodbar_mp3_command"] = unicode(
            self.ui.mp3_command.text())
        self.config.setting["moodbar_flac_command"] = unicode(
            self.ui.flac_command.text())
        self.config.setting["moodbar_wav_command"] = unicode(
            self.ui.wav_command.text())

register_file_action(MoodBar())
register_options_page(MoodbarOptionsPage)
Esempio n. 15
0
            self.spacer3 = QtWidgets.QSpacerItem(
                0, 0, QtWidgets.QSizePolicy.Minimum,
                QtWidgets.QSizePolicy.Expanding)
            self.box.addItem(self.spacer3)

        def load(self):
            self.apiKeyInput.setText(config.setting[r'gcsAPIKey'])
            self.idInput.setText(config.setting[r'gcsEngineID'])
            self.autoFetch.setChecked(config.setting[r'autoFetch'])

        def save(self):
            config.setting[r'gcsAPIKey'] = self.apiKeyInput.text()
            config.setting[r'gcsEngineID'] = self.idInput.text()
            config.setting[r'autoFetch'] = self.autoFetch.isChecked()

    register_file_action(OmniLyrics())
    register_file_post_addition_to_track_processor(OmniLyrics().processFile,
                                                   priority=PluginPriority.LOW)
    # register_track_action(OmniLyrics())
    # register_track_metadata_processor(OmniLyrics().processTrack, priority=PluginPriority.LOW)
    register_options_page(OmniLyricsOptionsPage)

else:

    omnilyrics = OmniLyrics()
    lyrics = r''
    url = re.compile(r'^(https?://|www\.)[\w.-]+/.*$', re.IGNORECASE)
    if ((len(argv) == 2) and (url.match(argv[-1]))):
        lyrics = omnilyrics.fetchLyricsFrom(argv[-1])
    elif (len(argv) == 4):
        lyrics = omnilyrics.fetchLyrics(argv[-3], argv[-2], argv[-1])
Esempio n. 16
0
                value = dict.get(metadata, key)
                if len(value) == 1 and value[0] != '':
                    value = value[0]
                else:
                    value = repr(value)
                value_item.setText(value)

    def add_separator_row(self, table, i, title):
        key_item, value_item = self.get_table_items(table, i)
        font = key_item.font()
        font.setBold(True)
        key_item.setFont(font)
        key_item.setText(title)

    def get_table_items(self, table, i):
        key_item = table.item(i, 0)
        value_item = table.item(i, 1)
        if not key_item:
            key_item = QtGui.QTableWidgetItem()
            key_item.setFlags(self.key_flags)
            table.setItem(i, 0, key_item)
        if not value_item:
            value_item = QtGui.QTableWidgetItem()
            value_item.setFlags(self.value_flags)
            table.setItem(i, 1, value_item)
        return key_item, value_item

vv = ViewVariables()
register_file_action(vv)
register_track_action(vv)
Esempio n. 17
0
class Foobar2000ReplayGainRemove(BaseAction):
    NAME = _("Foobar2000: &Remove ReplayGain information from files...")
    def callback(self, objs):
        run_foobar2000('remove', get_files(objs), self.tagger)

class Foobar2000ReplayGainOptionsPage(OptionsPage):
    NAME = "f2k_rgscan"
    TITLE = "Foobar2000 ReplayGain"
    PARENT = "plugins"

    options = [
        TextOption('setting', 'f2k_rgscan_foobar2000_path', get_foobar2000_path()),
    ]

    def __init__(self, parent=None):
        super(Foobar2000ReplayGainOptionsPage, self).__init__(parent)
        self.ui = Ui_Foobar2000ReplayGainOptionsPage()
        self.ui.setupUi(self)

    def load(self):
        self.ui.foobar2000_path.setText(self.config.setting['f2k_rgscan_foobar2000_path'])

    def save(self):
        self.config.setting['f2k_rgscan_foobar2000_path'] = unicode(self.ui.foobar2000_path.text())

register_file_action(Foobar2000ReplayGainScanTrack())
register_file_action(Foobar2000ReplayGainRemove())
register_album_action(Foobar2000ReplayGainScanAlbumByTags())
register_album_action(Foobar2000ReplayGainRemove())
register_options_page(Foobar2000ReplayGainOptionsPage)
Esempio n. 18
0
                if len(value) == 1 and value[0] != '':
                    value = value[0]
                else:
                    value = repr(value)
                value_item.setText(value)

    def add_separator_row(self, table, i, title):
        key_item, value_item = self.get_table_items(table, i)
        font = key_item.font()
        font.setBold(True)
        key_item.setFont(font)
        key_item.setText(title)

    def get_table_items(self, table, i):
        key_item = table.item(i, 0)
        value_item = table.item(i, 1)
        if not key_item:
            key_item = QtWidgets.QTableWidgetItem()
            key_item.setFlags(self.key_flags)
            table.setItem(i, 0, key_item)
        if not value_item:
            value_item = QtWidgets.QTableWidgetItem()
            value_item.setFlags(self.value_flags)
            table.setItem(i, 1, value_item)
        return key_item, value_item


vv = ViewVariables()
register_file_action(vv)
register_track_action(vv)
Esempio n. 19
0
class SearchPUID(BaseAction):
    NAME = "Lookup PUID"

    def callback(self, objs):
        cluster = objs[0]
        url = "http://musicbrainz.org/show/puid/?puid="
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["musicip_puid"])
        if len(cluster.metadata["musicip_puid"]) > 1:
            webbrowser2.open(url)
        else:
            global w
            w = NoPUID()
            w.show()


register_file_action(SearchPUID())


class NoPUID(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle(_("No PUID found"))
        self.doc = QtGui.QTextDocument(self)
        self.textCursor = QtGui.QTextCursor(self.doc)
        font = QtGui.QFont()
        font.setFixedPitch(True)
        font.setPointSize(8)
        font.setWeight(QtGui.QFont.Normal)
        font.setFamily("")
        self.textFormat = QtGui.QTextCharFormat()
        self.textFormat.setFont(font)
Esempio n. 20
0
class AddFileAsRelease(AddObjectAsEntity):
    NAME = "Add File As Release..."
    objtype = File
    submit_url = 'http://musicbrainz.org/release/add'

    def set_form_values(self, track):
        nv = self.add_form_value

        # Main album attributes
        if track.metadata["albumartist"]:
            nv("artist_credit.names.0.artist.name",
               track.metadata["albumartist"])
        else:
            nv("artist_credit.names.0.artist.name", track.metadata["artist"])
        if track.metadata["album"]:
            nv("name", track.metadata["album"])
        else:
            nv("name", track.metadata["title"])

        # Tracklist
        nv("mediums.0.track.0.name", track.metadata["title"])
        nv("mediums.0.track.0.artist_credit.names.0.name",
           track.metadata["artist"])
        nv("mediums.0.track.0.length", str(track.metadata.length))


register_cluster_action(AddClusterAsRelease())
register_file_action(AddFileAsRecording())
register_file_action(AddFileAsRelease())
Esempio n. 21
0
    def convert(self, source, target, file):
        for field in ['title', 'artist', 'album']:
            f = file.metadata[field]
            f = f.encode(source, 'backslashreplace')
            f = f.decode(target, 'replace')
            file.metadata[field] = f
        file.update()

    def callback(self, objs):
        dialog = EncodingDialog(self.tagger.window)
        if dialog.exec_():
            for o in objs:
                if isinstance(o, File):
                    self.convert(dialog.source, dialog.target, o)

register_file_action(ConvertFileEncoding())

class ConvertClusterEncoding(ConvertFileEncoding):
    def convert(self, source, target, cluster):
        for file in cluster.files:
            ConvertFileEncoding.convert(self, source, target, file)

        for field in ['artist', 'album']:
            f = cluster.metadata[field]
            f = f.encode(source, 'backslashreplace')
            f = f.decode(target, 'replace')
            cluster.metadata[field] = f
        cluster.update()

    def callback(self, objs):
        dialog = EncodingDialog(self.tagger.window)
Esempio n. 22
0
from picard.util import webbrowser2
from picard.ui.itemviews import BaseAction, register_cluster_action
from picard.ui.itemviews import BaseAction, register_album_action
from picard.ui.itemviews import BaseAction, register_file_action
from picard.metadata import register_track_metadata_processor

class SearchGoogle(BaseAction):
    NAME = "Search with Google"
    def callback(self, objs):
        cluster = objs[0]
        url = "http://www.google.com/search?hl=en&q="
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"])
        url += " "
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"])
        webbrowser2.open(url)
register_cluster_action(SearchGoogle())
register_album_action(SearchGoogle())

class SearchGoogleTrack(BaseAction):
    NAME = "Search with Google"
    def callback(self, objs):
        file = objs[0]
        url = "http://www.google.com/search?hl=en&q="
        url += QtCore.QUrl.toPercentEncoding(file.metadata["artist"])
        url += " "
        url += QtCore.QUrl.toPercentEncoding(file.metadata["album"])
        url += " "
        url += QtCore.QUrl.toPercentEncoding(file.metadata["title"])
        webbrowser2.open(url)
register_file_action(SearchGoogleTrack())
Esempio n. 23
0
class MetaFlacReplayGainRemove(BaseAction):
    NAME = _("MetaFlac:: &Remove ReplayGain information from files...")
    def callback(self, objs):
        run_MetaFlac('--remove-replay-gain', get_files(objs), self.tagger)

class MetaFlacReplayGainOptionsPage(OptionsPage):
    NAME = "metaflac_rgscan"
    TITLE = "MetaFlac ReplayGain"
    PARENT = "plugins"

    options = [
        TextOption('setting', 'metaflac_rgscan_metaflac_path', get_metaflac_path()),
    ]

    def __init__(self, parent=None):
        super(MetaFlacReplayGainOptionsPage, self).__init__(parent)
        self.ui = Ui_MetaFlacReplayGainOptionsPage()
        self.ui.setupUi(self)

    def load(self):
        self.ui.metaflac_path.setText(self.config.setting['metaflac_rgscan_metaflac_path'])

    def save(self):
        self.config.setting['metaflac_rgscan_metaflac_path'] = unicode(self.ui.metaflac_path.text())

register_file_action(MetaFlacReplayGainScanTrack())
register_file_action(MetaFlacReplayGainRemove())
register_album_action(MetaFlacReplayGainScanAlbumByTags())
register_album_action(MetaFlacReplayGainRemove())
register_options_page(MetaFlacReplayGainOptionsPage)
Esempio n. 24
0
    NAME = "Search with Google"

    def callback(self, objs):
        cluster = objs[0]
        url = "http://www.google.com/search?hl=en&q="
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"])
        url += " "
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"])
        webbrowser2.open(url)


register_cluster_action(SearchGoogle())
register_album_action(SearchGoogle())


class SearchGoogleTrack(BaseAction):
    NAME = "Search with Google"

    def callback(self, objs):
        file = objs[0]
        url = "http://www.google.com/search?hl=en&q="
        url += QtCore.QUrl.toPercentEncoding(file.metadata["artist"])
        url += " "
        url += QtCore.QUrl.toPercentEncoding(file.metadata["album"])
        url += " "
        url += QtCore.QUrl.toPercentEncoding(file.metadata["title"])
        webbrowser2.open(url)


register_file_action(SearchGoogleTrack())
Esempio n. 25
0
        self.purgeAcoustID.setChecked(False)
        self.purgeAcoustID.setText(r'Purge AcoustID tags')
        self.box.addWidget(self.purgeAcoustID)
        self.spacer = QtWidgets.QSpacerItem(0, 0,
                                            QtWidgets.QSizePolicy.Minimum,
                                            QtWidgets.QSizePolicy.Expanding)
        self.box.addItem(self.spacer)

    def load(self):
        self.purgeMBIDs.setChecked(config.setting[r'purgeMBIDs'])
        self.purgeiTunes.setChecked(config.setting[r'purgeiTunes'])
        self.purgeLastFM.setChecked(config.setting[r'purgeLastFM'])
        self.purgeMusicIP.setChecked(config.setting[r'purgeMusicIP'])
        self.purgeAcoustID.setChecked(config.setting[r'purgeAcoustID'])

    def save(self):
        config.setting[r'purgeMBIDs'] = self.purgeMBIDs.isChecked()
        config.setting[r'purgeiTunes'] = self.purgeiTunes.isChecked()
        config.setting[r'purgeLastFM'] = self.purgeLastFM.isChecked()
        config.setting[r'purgeMusicIP'] = self.purgeMusicIP.isChecked()
        config.setting[r'purgeAcoustID'] = self.purgeAcoustID.isChecked()


register_file_action(OriginsOblivion())
register_file_post_addition_to_track_processor(OriginsOblivion().processFile,
                                               priority=PluginPriority.LOW)
register_file_post_load_processor(OriginsOblivion().processFileOnLoad)
# register_track_action(OriginsOblivion())
# register_track_metadata_processor(OriginsOblivion().process)
register_options_page(OriginsOblivionOptionsPage)
Esempio n. 26
0
        TextOption("setting", "replaygain_vorbisgain_command", "vorbisgain"),
        TextOption("setting", "replaygain_vorbisgain_options", "-asf"),
        TextOption("setting", "replaygain_mp3gain_command", "mp3gain"),
        TextOption("setting", "replaygain_mp3gain_options", "-a -s i"),
        TextOption("setting", "replaygain_metaflac_command", "metaflac"),
        TextOption("setting", "replaygain_metaflac_options", "--add-replay-gain"),
        TextOption("setting", "replaygain_wvgain_command", "wvgain"),
        TextOption("setting", "replaygain_wvgain_options", "-a")
    ]

    def __init__(self, parent=None):
        super(ReplayGainOptionsPage, self).__init__(parent)
        self.ui = Ui_ReplayGainOptionsPage()
        self.ui.setupUi(self)

    def load(self):
        self.ui.vorbisgain_command.setText(self.config.setting["replaygain_vorbisgain_command"])
        self.ui.mp3gain_command.setText(self.config.setting["replaygain_mp3gain_command"])
        self.ui.metaflac_command.setText(self.config.setting["replaygain_metaflac_command"])
        self.ui.wvgain_command.setText(self.config.setting["replaygain_wvgain_command"])

    def save(self):
        self.config.setting["replaygain_vorbisgain_command"] = unicode(self.ui.vorbisgain_command.text())
        self.config.setting["replaygain_mp3gain_command"] = unicode(self.ui.mp3gain_command.text())
        self.config.setting["replaygain_metaflac_command"] = unicode(self.ui.metaflac_command.text())
        self.config.setting["replaygain_wvgain_command"] = unicode(self.ui.wvgain_command.text())

register_file_action(ReplayGain())
register_album_action(AlbumGain())
register_options_page(ReplayGainOptionsPage)
Esempio n. 27
0
from picard.ui.itemviews import BaseAction, register_file_action
from picard.metadata import register_track_metadata_processor

class SearchPUID(BaseAction):
    NAME = "Lookup PUID"
    def callback(self, objs):
        cluster = objs[0]
        url = "http://musicbrainz.org/show/puid/?puid="
        url += QtCore.QUrl.toPercentEncoding(cluster.metadata["musicip_puid"])
        if len(cluster.metadata["musicip_puid"]) > 1:
            webbrowser2.open(url)
        else:
            global w
            w = NoPUID()
            w.show()
register_file_action(SearchPUID())

class NoPUID(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle(_("No PUID found"))
        self.doc = QtGui.QTextDocument(self)
        self.textCursor = QtGui.QTextCursor(self.doc)
        font = QtGui.QFont()
        font.setFixedPitch(True)
        font.setPointSize(8)
        font.setWeight(QtGui.QFont.Normal)
        font.setFamily("")
        self.textFormat = QtGui.QTextCharFormat()
        self.textFormat.setFont(font)
        self.browser = QtGui.QTextBrowser(self)