diff --git a/picard/album.py b/picard/album.py index 8573cda4c..841acc167 100644 --- a/picard/album.py +++ b/picard/album.py @@ -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 diff --git a/picard/file.py b/picard/file.py index 3b475426f..e2459fb92 100644 --- a/picard/file.py +++ b/picard/file.py @@ -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): diff --git a/picard/plugins/cuesheet.py b/picard/plugins/cuesheet.py index 96a83068b..c50f4c40f 100644 --- a/picard/plugins/cuesheet.py +++ b/picard/plugins/cuesheet.py @@ -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): diff --git a/picard/plugins/mutagenmp3.py b/picard/plugins/mutagenmp3.py index c7441e882..8d6f5eb96 100644 --- a/picard/plugins/mutagenmp3.py +++ b/picard/plugins/mutagenmp3.py @@ -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) diff --git a/picard/track.py b/picard/track.py index c1d8c7525..a06f056ab 100644 --- a/picard/track.py +++ b/picard/track.py @@ -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"" % (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): diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 967528e26..4dc7189e6 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -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: