mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-18 13:43:59 +00:00
Putting MB metadata to files.
This commit is contained in:
@@ -23,6 +23,7 @@ from threading import RLock
|
||||
from musicbrainz2.webservice import Query, WebServiceError, ReleaseIncludes
|
||||
from musicbrainz2.model import VARIOUS_ARTISTS_ID, NS_MMD_1
|
||||
from musicbrainz2.utils import extractUuid, extractFragment
|
||||
from picard.metadata import Metadata
|
||||
from picard.util import formatTime
|
||||
from picard.dataobj import DataObject
|
||||
from picard.track import Track
|
||||
@@ -65,6 +66,17 @@ class Album(DataObject):
|
||||
|
||||
self.lock()
|
||||
|
||||
mdata = Metadata()
|
||||
mdata["ALBUM"] = release.title
|
||||
mdata["ARTIST"] = release.artist.name
|
||||
mdata["ARTIST_SORTNAME"] = release.artist.sortName
|
||||
mdata["ALBUMARTIST"] = release.artist.name
|
||||
mdata["ALBUMARTIST_SORTNAME"] = release.artist.sortName
|
||||
mdata["MUSICBRAINZ_ALBUMID"] = release.id
|
||||
mdata["MUSICBRAINZ_ARTISTID"] = release.artist.id
|
||||
mdata["MUSICBRAINZ_ALBUMARTISTID"] = release.artist.id
|
||||
mdata["TOTALTRACKS"] = len(release.tracks)
|
||||
|
||||
self.name = release.title
|
||||
self.artist = Artist(release.artist.id, release.artist.name)
|
||||
|
||||
@@ -77,6 +89,13 @@ class Album(DataObject):
|
||||
artist = Artist(release.artist.id, release.artist.name)
|
||||
tr = Track(track.id, track.title, artist, self)
|
||||
tr.duration = track.duration or 0
|
||||
tr.metadata.copy(mdata)
|
||||
tr.metadata["TITLE"] = track.title
|
||||
if track.artist:
|
||||
tr.metadata["ARTIST"] = artist.name
|
||||
tr.metadata["ARTIST_SORTNAME"] = track.artist.sortName
|
||||
tr.metadata["MUSICBRAINZ_ARTISTID"] = artist.id
|
||||
tr.metadata["MUSICBRAINZ_TRACKID"] = track.id
|
||||
self.tracks.append(tr)
|
||||
self.duration += tr.duration
|
||||
|
||||
@@ -94,6 +113,9 @@ class Album(DataObject):
|
||||
self.files.append(file)
|
||||
self.emit(QtCore.SIGNAL("trackUpdated"), track)
|
||||
|
||||
def removeLinkedFile(self, track, file):
|
||||
self.emit(QtCore.SIGNAL("trackUpdated"), track)
|
||||
|
||||
def getNumUnmatchedFiles(self):
|
||||
return len(self.unmatchedFiles)
|
||||
|
||||
@@ -107,9 +129,6 @@ class Album(DataObject):
|
||||
count += 1
|
||||
return count
|
||||
|
||||
def getNumFiles(self):
|
||||
return len(self.files)
|
||||
|
||||
def removeFile(self, file):
|
||||
index = self.unmatchedFiles.index(file)
|
||||
self.emit(QtCore.SIGNAL("fileAboutToBeRemoved"), index)
|
||||
@@ -120,7 +139,7 @@ class Album(DataObject):
|
||||
|
||||
def getName(self):
|
||||
if self.getNumTracks():
|
||||
return _(u"%s (%d / %d)") % (self.name, self.getNumTracks(), self.getNumFiles())
|
||||
return _(u"%s (%d / %d)") % (self.name, self.getNumTracks(), self.getNumLinkedFiles())
|
||||
else:
|
||||
return self.name
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class File(QtCore.QObject):
|
||||
self.track = None
|
||||
|
||||
self.localMetadata = Metadata()
|
||||
self.serverMetadata = Metadata()
|
||||
self.metadata = Metadata()
|
||||
self.audioProperties = AudioProperties()
|
||||
|
||||
def lock(self):
|
||||
@@ -66,7 +66,7 @@ class File(QtCore.QObject):
|
||||
raise NotImplementedError()
|
||||
|
||||
def getNewMetadata(self):
|
||||
return self.serverMetadata
|
||||
return self.metadata
|
||||
|
||||
def removeFromCluster(self):
|
||||
locker = QtCore.QMutexLocker(self.mutex)
|
||||
@@ -105,7 +105,7 @@ class File(QtCore.QObject):
|
||||
def getSimilarity(self):
|
||||
locker = QtCore.QMutexLocker(self.mutex)
|
||||
return similarity(self.localMetadata.get(u"TITLE", u""),
|
||||
self.serverMetadata.get(u"TITLE", u""))
|
||||
self.metadata.get(u"TITLE", u""))
|
||||
|
||||
class FileManager(QtCore.QObject):
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ class CuesheetVirtualFile(File):
|
||||
self.localMetadata["ALBUMARTIST"] = cuesheet.tracks[0].getArtist()
|
||||
self.localMetadata["TRACKNUMBER"] = str(track.getTrackNumber())
|
||||
self.localMetadata["TOTALTRACKS"] = str(len(cuesheet.tracks) - 1)
|
||||
self.serverMetadata.copy(self.localMetadata)
|
||||
self.metadata.copy(self.localMetadata)
|
||||
self.audioProperties.length = track.getLength()
|
||||
|
||||
class CuesheetOpener(Component):
|
||||
|
||||
@@ -27,7 +27,7 @@ class MutagenMp3File(File):
|
||||
else:
|
||||
self.localMetadata["TRACKNUMBER"] = text
|
||||
|
||||
self.serverMetadata.copy(self.localMetadata)
|
||||
self.metadata.copy(self.localMetadata)
|
||||
|
||||
# Audio properties
|
||||
self.audioProperties.length = int(mfile.info.length * 1000)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from picard.metadata import Metadata
|
||||
from picard.util import formatTime
|
||||
from picard.dataobj import DataObject
|
||||
|
||||
@@ -30,6 +31,7 @@ class Track(DataObject):
|
||||
self.album = album
|
||||
self.duration = 0
|
||||
self.file = None
|
||||
self.metadata = Metadata()
|
||||
|
||||
def __str__(self):
|
||||
return u"<Track %s, name %s>" % (self.id, self.name)
|
||||
@@ -46,11 +48,13 @@ class Track(DataObject):
|
||||
if self.file:
|
||||
self.file.moveToCluster(self.tagger.unmatchedFiles)
|
||||
self.file = file
|
||||
file.metadata.copy(self.metadata)
|
||||
self.album.addLinkedFile(self, file)
|
||||
|
||||
def removeFile(self, file):
|
||||
file = self.file
|
||||
self.file = None
|
||||
self.album.removeLinkedFile(self, file)
|
||||
return file
|
||||
|
||||
def isLinked(self):
|
||||
|
||||
@@ -359,12 +359,12 @@ class MainWindow(QtGui.QMainWindow):
|
||||
obj = objects[0]
|
||||
if isinstance(obj, File):
|
||||
localMetadata = obj.localMetadata
|
||||
serverMetadata = obj.serverMetadata
|
||||
serverMetadata = obj.metadata
|
||||
statusBar = obj.fileName
|
||||
elif isinstance(obj, Track):
|
||||
if obj.isLinked():
|
||||
localMetadata = obj.file.localMetadata
|
||||
serverMetadata = obj.file.serverMetadata
|
||||
serverMetadata = obj.file.metadata
|
||||
statusBar = obj.file.fileName
|
||||
|
||||
if localMetadata:
|
||||
|
||||
Reference in New Issue
Block a user