+++ /dev/null
-# -*- coding: utf-8 -*-
-import os
-import sys
-from PySide import QtCore
-from PySide import QtGui
-from PySide import QtDeclarative
-
-from aa_search import MussorgskyAlbumArt
-
-try:
- from tracker_backend_gi import TrackerBackendGI as TrackerBackend
-except ImportError:
- from tracker_backend_dbus import TrackerBackendDBus as TrackerBackend
-
-from albumItem import AlbumItem
-from coverModel import CoversModel
-
-class DownloadThread (QtCore.QThread):
-
- def __init__ (self, model, album):
- QtCore.QThread.__init__ (self)
- self.downloader = MussorgskyAlbumArt ()
- self.model = model
- self.album = album
-
- def run (self):
- print "Running the thread"
- MAX_OPTIONS = 4
- counter = 0
- for img in self.downloader.get_alternatives (self.album.artist,
- self.album.title, MAX_OPTIONS):
- if counter >= MAX_OPTIONS:
- break
-
- self.model.updateData (counter, img)
- counter += 1
-
-
-class MassiveDownloadsThread (QtCore.QThread):
-
- def __init__ (self, albumModel):
- QtCore.QThread.__init__ (self)
- self.downloader = MussorgskyAlbumArt ()
- self.albumModel = albumModel
-
- def run (self):
- print "Download one cover per-album in a thread"
- import time
- time.sleep (4)
- for albumItem in self.albumModel.get_albums ():
- if albumItem.require_download:
- self.downloader.get_album_art (albumItem)
-
-
-class MussorgskyController (QtCore.QObject):
-
- def __init__ (self, rootContext):
- QtCore.QObject.__init__ (self)
- self.download = None
- self.ctx = rootContext
- self.tracker = TrackerBackend ()
- self.__is_downloading = False
-
- def _is_downloading (self):
- return self.__is_downloading
-
- def _set_is_downloading (self, value):
- if (value != self.__is_downloading):
- self.__is_downloading = value
- self.is_downloading_changed.emit ()
-
- is_downloading_changed = QtCore.Signal ()
- is_downloading = QtCore.Property (bool, _is_downloading, notify=is_downloading_changed)
-
- @QtCore.Slot (QtCore.QObject)
- def download_all (self, albumModel):
- self._set_is_downloading (True)
- self.download_all_thread = MassiveDownloadsThread (albumModel)
- self.download_all_thread.finished.connect (self.download_all_finished)
- self.download_all_thread.start ()
- print "now we are downloading..."
-
- @QtCore.Slot ()
- def download_all_finished (self):
- self._set_is_downloading (False)
-
-
- @QtCore.Slot (QtCore.QObject)
- def get_options_for (self, albumItem):
- print "Getting options for", albumItem.title
- m = CoversModel (albumItem)
- print m.rowCount ()
- self.ctx.setContextProperty ("coversModel", m)
- self.download = DownloadThread (m, albumItem)
- self.download.start ()
-
- @QtCore.Slot (QtCore.QObject, int)
- def save_option_for (self, coversModel, index):
- print "Saving option", index
- coverItem = coversModel.getData (index)
- coverItem.save (coversModel.albumItem.get_aa ().get_media_art_path ())
- # Update the main model. Is this enough?
- if not coverItem.initialImage and not coverItem.deleteAction:
- coversModel.albumItem.album_art = None
- coversModel.albumItem.album_art = coversModel.albumItem.get_aa().get_media_art_path ()
- elif coverItem.deleteAction:
- coversModel.albumItem.resetAlbumArt ()
-
- coversModel.cleanCache ()
-
-
- @QtCore.Slot ()
- def stop_pending_jobs (self):
- if self.download :
- self.download.quit ()
-
- def get_all_albums (self):
- """
- Return a list of AlbumItem objects to build the model
- This is not called from QML, no need to make it a slot
- """
- results = []
- for album_title, album_artist in self.tracker.get_all_albums ():
- results.append (AlbumItem (album_title, album_artist))
- return results
-