SHA256
1
0
forked from pool/picard
picard/addrelease.py
Stephan Kulow 6beefab6df Accepting request 76928 from home:olh:branches:multimedia:apps
- Update name of dlopen libdiscid object during build

- Update additional python plugins to report compatibility for 0.15

- Run dos2unix on additional python plugins

- Update to version 0.15 - 2011-07-17
  - Added options for using standardized track, release, and artist metadata.
  - Added preferred release format support.
  - Expanded preferred release country support to allow multiple countries.
  - Added support for tagging non-album tracks (standalone recordings).
  - Plugins can now be installed via drag and drop, or a file browser.
  - Added several new tags: %%_originaldate%%, %%_recordingcomment%%, and %%_releasecomment%%
  - Changes to request queuing: added separate high and low priority queues for each host.
  - Tagger scripts now run after metadata plugins finish (#5850)
  - The "compilation" tag can now be $unset or modified via tagger script.
  - Added a shortcut (Ctrl+I) for Edit->Details.
  - Miscellaneous bug fixes.
  - Support for the NGS web service
 
 Version 0.14 - 2011-05-15
  - Fixed a problem with network operations hanging after a network error (#5794, #5884)
  - ID3v2.3 with UTF-16 is now the default ID3 version
  - Option to set preferred release types for improved album matching
  - Added support for sorting the album/file lists (#75)
  - Fixed OptimFROG tag reading (#5859)
  - Fixed colors for a white-on-black color scheme (#5846)
  - Added an option to replace non-ASCII punctuation (#5834)
  - Support for writing release group and work IDs, currently unused (#5805)
  - Fixed saving of the release event format tag (#5250)

OBS-URL: https://build.opensuse.org/request/show/76928
OBS-URL: https://build.opensuse.org/package/show/multimedia:apps/picard?expand=0&rev=14
2011-07-25 10:17:02 +00:00

79 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
PLUGIN_NAME = u"Add Cluster As Release"
PLUGIN_AUTHOR = u"Lukáš Lalinský, Philip Jägenstedt"
PLUGIN_DESCRIPTION = ""
PLUGIN_VERSION = "0.2"
PLUGIN_API_VERSIONS = ["0.9.0", "0.10", "0.15.0"]
from picard.cluster import Cluster
from picard.util import webbrowser2
from picard.ui.itemviews import BaseAction, register_cluster_action
import codecs
import os
import tempfile
HTML_HEAD = """<!doctype html>
<meta charset="UTF-8">
<title>Add Cluster As Release</title>
<form action="http://musicbrainz.org/release/add" method="post">
"""
HTML_INPUT = """<input type="hidden" name="%s" value="%s">
"""
HTML_TAIL = """<input type="submit" value="Add Release">
</form>
<script>document.forms[0].submit()</script>
"""
HTML_ATTR_ESCAPE = {
"&": "&amp;",
'"': "&quot;"
}
class AddClusterAsRelease(BaseAction):
NAME = "Add Cluster As Release..."
def callback(self, objs):
if len(objs) != 1 or not isinstance(objs[0], Cluster):
return
cluster = objs[0]
(fd, fp) = tempfile.mkstemp(suffix=".html")
f = codecs.getwriter("utf-8")(os.fdopen(fd, "w"))
def esc(s):
return "".join(HTML_ATTR_ESCAPE.get(c, c) for c in s)
# add a global (release-level) name-value
def nv(n, v):
f.write(HTML_INPUT % (esc(n), esc(v)))
f.write(HTML_HEAD)
nv("artist_credit.names.0.artist.name", cluster.metadata["artist"])
nv("name", cluster.metadata["album"])
for i, file in enumerate(cluster.files):
try:
i = int(file.metadata["tracknumber"]) - 1
except:
pass
try:
m = int(file.metadata["discnumber"]) - 1
except:
m = 0
# add a track-level name-value
def tnv(n, v):
nv("mediums.%d.track.%d.%s" % (m, i, n), v)
tnv("name", file.metadata["title"])
if file.metadata["artist"] != cluster.metadata["artist"]:
tnv("artist_credit.names.0.name", file.metadata["artist"])
tnv("length", str(file.metadata.length))
f.write(HTML_TAIL)
f.close()
webbrowser2.open("file://"+fp)
register_cluster_action(AddClusterAsRelease())