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
17 self.__searchString = self.albumItem.artist + " " + self.albumItem.title
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 print "updating", row, "to", url
40 position = row + self.startOffset
41 assert position >= 0 and position < len (self._alternatives)
43 self._alternatives[position].url = "images/broken.png"
44 self._alternatives[position].broken = True
46 self._alternatives[position].url = url
48 def getData (self, row):
49 assert row >= 0 and row < len (self._alternatives)
50 return self._alternatives[row]
53 for i in range (self.startOffset, len (self._alternatives)):
54 self._alternatives[i].reset ()
57 def cleanCache (self):
59 The model contains the urls of the downloaded alternatives.
60 This method removes those files. The selected image should have already been copied
61 to its final location.
63 for i in range (self.startOffset, len (self._alternatives)):
64 # This url can be None if the image didn't finish downloading
65 if self._alternatives[i].url and os.path.exists (self._alternatives[i].url):
66 os.remove (self._alternatives[i].url)
68 def _searchString (self):
69 return self.albumItem.artist + " " + self.albumItem.title
70 def _setSearchString (self, searchStr):
71 self.searchString = searchStr
72 searchString_changed.emit ()
74 searchString_changed = QtCore.Signal ()
75 searchString = QtCore.Property (unicode, _searchString, _setSearchString, notify=searchString_changed)