1 # -*- coding: utf-8 -*-
4 from PySide import QtCore
5 from PySide import QtGui
6 from PySide import QtDeclarative
8 from coverItem import CoverItem
9 from albumItem import AlbumItem
11 class CoversModel (QtCore.QAbstractListModel):
14 def __init__ (self, albumItem):
15 QtCore.QAbstractListModel.__init__ (self)
16 self.albumItem = albumItem
19 self._alternatives = [
20 CoverItem (self.albumItem.album_art, initialImage=True),
21 CoverItem ("images/blank_record.png", deleteAction = True),
28 self.setRoleNames (dict(enumerate(CoversModel.COLUMNS)))
30 def rowCount (self, parent=QtCore.QModelIndex()):
31 return len (self._alternatives)
33 def data (self, index, role):
34 if index.isValid () and role == CoversModel.COLUMNS.index ('cover'):
35 return self._alternatives[index.row ()]
38 def updateData (self, row, url):
39 position = row + self.startOffset
40 assert position >= 0 and position < len (self._alternatives)
41 self._alternatives[position].url = url
43 def getData (self, row):
44 assert row >= 0 and row < len (self._alternatives)
45 return self._alternatives[row]
47 def cleanCache (self):
49 The model contains the urls of the downloaded alternatives.
50 This method removes those files. The selected image should have already been copied
51 to its final location.
53 for i in range (self.startOffset, len (self._alternatives)):
54 # This url can be None if the image didn't finish downloading
55 if self._alternatives[i].url and os.path.exists (self._alternatives[i].url):
56 os.remove (self._alternatives[i].url)