--- /dev/null
+# -*- coding: utf-8 -*-
+import os
+import sys
+from PySide import QtCore
+from PySide import QtGui
+from PySide import QtDeclarative
+
+from coverItem import CoverItem
+from albumItem import AlbumItem
+
+class CoversModel (QtCore.QAbstractListModel):
+ COLUMNS = ('cover', )
+
+ def __init__ (self, albumItem):
+ QtCore.QAbstractListModel.__init__ (self)
+ self.albumItem = albumItem
+
+ self.startOffset = 2
+ self._alternatives = [
+ CoverItem (self.albumItem.album_art, initialImage=True),
+ CoverItem ("images/blank_record.png", deleteAction = True),
+ CoverItem (None),
+ CoverItem (None),
+ CoverItem (None),
+ CoverItem (None)
+ ]
+
+ self.setRoleNames (dict(enumerate(CoversModel.COLUMNS)))
+
+ def rowCount (self, parent=QtCore.QModelIndex()):
+ return len (self._alternatives)
+
+ def data (self, index, role):
+ if index.isValid () and role == CoversModel.COLUMNS.index ('cover'):
+ return self._alternatives[index.row ()]
+ return None
+
+ def updateData (self, row, url):
+ position = row + self.startOffset
+ assert position >= 0 and position < len (self._alternatives)
+ self._alternatives[position].url = url
+
+ def getData (self, row):
+ assert row >= 0 and row < len (self._alternatives)
+ return self._alternatives[row]
+
+ def cleanCache (self):
+ """
+ The model contains the urls of the downloaded alternatives.
+ This method removes those files. The selected image should have already been copied
+ to its final location.
+ """
+ for i in range (self.startOffset, len (self._alternatives)):
+ # This url can be None if the image didn't finish downloading
+ if self._alternatives[i].url and os.path.exists (self._alternatives[i].url):
+ os.remove (self._alternatives[i].url)