Blob Blame Raw
# -*- coding: utf-8 -*-

PLUGIN_NAME = u"Copy Cluster to Clipboard"
PLUGIN_AUTHOR = u"Michael Elsdรถrfer"
PLUGIN_DESCRIPTION = "Exports a cluster's tracks to the clipboard, so it can be copied into the tracklist field on MusicBrainz"
PLUGIN_VERSION = "0.1"
PLUGIN_API_VERSIONS = ["0.9.0", "0.10", "0.15"]


from PyQt4 import QtCore, QtGui
from picard.cluster import Cluster
from picard.util import format_time
from picard.ui.itemviews import BaseAction, register_cluster_action


class CopyClusterToClipboard(BaseAction):
    NAME = "Copy Cluster to Clipboard..."

    def callback(self, objs):
        if len(objs) != 1 or not isinstance(objs[0], Cluster):
            return
        cluster = objs[0]

        artists = set()
        for i, file in enumerate(cluster.files):
            artists.add(file.metadata["artist"])

        tracks = []
        for i, file in enumerate(cluster.files):
            try:
                i = int(file.metadata["tracknumber"])
            except:
                i += 1

            if len(artists) > 1:
                tracks.append((i, "%s. %s - %s (%s)" % (
                    i,
                    file.metadata["title"],
                    file.metadata["artist"],
                    format_time(file.metadata.length))))
            else:
                tracks.append((i, "%s. %s (%s)" % (
                    i,
                    file.metadata["title"],
                    format_time(file.metadata.length))))

        clipboard = QtGui.QApplication.clipboard()
        clipboard.setText("\n".join(map(lambda x: x[1], sorted(tracks))))


register_cluster_action(CopyClusterToClipboard())