~fluendo-elisa/moovida/elisa-pancake

« back to all changes in this revision

Viewing changes to elisa-plugins/elisa/plugins/database/actions.py

  • Committer: pancake
  • Date: 2009-03-27 12:16:38 UTC
  • mfrom: (1115.2.37 elisa)
  • Revision ID: pancake@flubox-20090327121638-2da0c1a0zu3byufd
* Merge against the head

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
from elisa.core import common
21
21
 
22
 
from elisa.core.media_uri import MediaUri
 
22
from elisa.core import media_uri
23
23
 
24
24
from elisa.core.utils.cancellable_defer import cancellable_deferred_iterator, \
25
25
        CancellableDeferred
29
29
from elisa.plugins.poblesec.actions import Action, LinkAction
30
30
from elisa.plugins.poblesec.actions import PlayAllAction, ShuffleAction
31
31
from elisa.plugins.poblesec.actions import AddToFavoritesAction, AddToPlaylistAction
32
 
from elisa.plugins.poblesec.actions import ViewSlideshowAction
 
32
from elisa.plugins.poblesec.actions import PlaySlideshowAction
33
33
 
34
34
from elisa.plugins.favorites.models import FavoritesItem
35
35
from elisa.plugins.database.models import Image, File
39
39
import datetime
40
40
import os.path
41
41
 
42
 
# pute
43
42
from elisa.core.utils.i18n import install_translation
44
43
 
45
44
from elisa.plugins.poblesec.base.hierarchy import HierarchyController
233
232
    def run(self):
234
233
        raise NotImplementedError()
235
234
 
236
 
 
237
 
class ViewPhotoAlbumSlideshowAction(ViewSlideshowAction):
238
 
 
239
 
    def order_photos(self, rs):
 
235
class ViewPhotoAlbumSlideshowAction(PlaySlideshowAction):
 
236
 
 
237
    def _order_photos(self, rs):
240
238
        # copied and pasted the ordering from database.PhotosController
241
239
        rs.order_by(Image.shot_time, Image.file_path)
242
240
        return rs.all()
243
241
 
244
 
    def get_items(self, item):
245
 
        dfr = common.application.store.find(Image, Image.album_name == item.name)
246
 
        dfr.addCallback(self.order_photos)
 
242
    def _get_photos_from_album(self, album):
 
243
        dfr = common.application.store.find(Image, Image.album_name == album.name)
 
244
        dfr.addCallback(self._order_photos)
247
245
        return dfr
248
246
 
249
 
class ViewPhotoDateSlideshowAction(ViewSlideshowAction):
 
247
    def _load_images_from_database(self):
 
248
        items = [item for item in self.controller.model if not isinstance(item, Action)]
 
249
        images = []
 
250
        dfrs = []
 
251
        for item in items:
 
252
            dfr = self._get_photos_from_album(item)
 
253
            dfr.addCallback(lambda the_images: images.extend(the_images))
 
254
            dfrs.append(dfr)
 
255
 
 
256
        if len(dfrs) == 0:
 
257
            return defer.fail(None)
 
258
 
 
259
        def return_images(result):
 
260
            return images
 
261
 
 
262
        dfr_list = defer.DeferredList(dfrs)
 
263
        dfr_list.addCallback(return_images)
 
264
        return dfr_list
 
265
 
 
266
    def _cleanup(self):
 
267
        self.controller.stop_loading_animation()
 
268
 
 
269
    def run(self):
 
270
        dfr = self._load_images_from_database()
 
271
        dfr.addCallbacks(self._play_slideshow, self._cleanup)
 
272
 
 
273
class ViewPhotoDateSlideshowAction(PlaySlideshowAction):
250
274
 
251
275
    def order_photos(self, rs):
252
276
        # copied and pasted the ordering from database.PhotosController
256
280
    def run(self):
257
281
        dfr = common.application.store.find(Image, Image.shot_time != None)
258
282
        dfr.addCallback(self.order_photos)
259
 
        dfr.addCallback(self.play)
 
283
        dfr.addCallback(self._play_slideshow)
260
284
        return dfr
261
285
 
262
286
class RemoveAction(Action):
298
322
            yield None
299
323
        elif hasattr(self.controller, 'file_path'):
300
324
            playable_model = PlayableModel()
301
 
            playable_model.uri = MediaUri("file://%s" % 
302
 
                                          self.controller.file_path) 
 
325
            playable_model.uri = media_uri.MediaUri({'scheme' : 'file',
 
326
                                                     'path' : self.controller.file_path})
303
327
            videos.append(playable_model)
304
328
            yield None
305
329
        else: