~tobyll/moovida/media_scanner_ignore_files

« back to all changes in this revision

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

  • Committer: Benjamin Kampmann
  • Date: 2008-09-29 16:06:44 UTC
  • mfrom: (741.2.32 reenter_menu)
  • Revision ID: benjamin@fluendo.com-20080929160644-9r670fm7f149l3v0
Merge reenter menu fixes:
 - make append_controller of history cancellable
 - make the push controller signal asynchronous
 - introduce sensitive system
 - refactor code to take care of double clicks at one certain place only

Show diffs side-by-side

added added

removed removed

Lines of Context:
130
130
        return dfr
131
131
 
132
132
    def node_clicked(self, widget, item):
133
 
        widget_index = self.nodes._widget_index_from_item_index(widget.model.index(item))
134
 
        selected_item = self.nodes._widgets[widget_index]
135
 
 
136
 
        if selected_item != self._previous_clicked:
137
 
            self.cancel_deferreds(id(self))
138
 
            selected_item.activate(previous=self._previous_clicked)
139
 
 
140
 
            self._previous_clicked = selected_item
141
 
 
142
 
            if isinstance(item, Action):
143
 
                def silence_canceller(failure):
144
 
                    failure.trap(CancelledError)
145
 
 
146
 
                dfr = item.run()
147
 
                dfr.addErrback(silence_canceller)
148
 
                self.register_deferred(id(self), dfr)
149
 
            else:
150
 
                browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
151
 
                path = self.artist_controller_path
152
 
                deferred = browser.history.append_controller(path, item.name, artist=item)
 
133
        self.cancel_deferreds(id(self))
 
134
 
 
135
        if isinstance(item, Action):
 
136
            def silence_canceller(failure):
 
137
                failure.trap(CancelledError)
 
138
 
 
139
            dfr = item.run()
 
140
            dfr.addErrback(silence_canceller)
 
141
            self.register_deferred(id(self), dfr)
 
142
        else:
 
143
            browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
 
144
            path = self.artist_controller_path
 
145
            deferred = browser.history.append_controller(path, item.name, artist=item)
153
146
 
154
147
    def make_actions(self):
155
148
        actions = []
309
302
        return actions
310
303
 
311
304
    def node_clicked(self, widget, item):
312
 
        widget_index = self.nodes._widget_index_from_item_index(widget.model.index(item))
313
 
        selected_item = self.nodes._widgets[widget_index]
314
 
 
315
 
        if selected_item != self._previous_clicked:
316
 
            selected_item.activate(previous=self._previous_clicked)
317
 
 
318
 
            self._previous_clicked = selected_item
319
 
 
320
 
            if isinstance(item, Action):
321
 
                dfr = item.run()
322
 
            elif hasattr(item, 'all_tracks'):
323
 
                # Dummy "All Tracks" album
324
 
                browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
325
 
                dfr = browser.history.append_controller('/poblesec/database/music/tracks',
326
 
                                                        item.name,
327
 
                                                        artist=item.artist)
328
 
            elif hasattr(item, 'action') and issubclass(item.action, Action):
329
 
                action = item.action(self)
330
 
                dfr = action.run(item)
331
 
            else:
332
 
                browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
333
 
                path = self.album_controller_path
334
 
                dfr = browser.history.append_controller(path,
335
 
                                                        item.name,
336
 
                                                        album=item)
337
 
            return dfr
 
305
        if isinstance(item, Action):
 
306
            dfr = item.run()
 
307
        elif hasattr(item, 'all_tracks'):
 
308
            # Dummy "All Tracks" album
 
309
            browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
 
310
            dfr = browser.history.append_controller('/poblesec/database/music/tracks',
 
311
                                                    item.name,
 
312
                                                    artist=item.artist)
 
313
        elif hasattr(item, 'action') and issubclass(item.action, Action):
 
314
            action = item.action(self)
 
315
            dfr = action.run(item)
 
316
        else:
 
317
            browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
 
318
            path = self.album_controller_path
 
319
            dfr = browser.history.append_controller(path,
 
320
                                                    item.name,
 
321
                                                    album=item)
 
322
        return dfr
338
323
 
339
324
 
340
325
class AlbumsDbController(GenericAlbumsDbController):
560
545
        return actions
561
546
 
562
547
    def node_clicked(self, widget, item):
563
 
        widget_index = self.nodes._widget_index_from_item_index(widget.model.index(item))
564
 
        selected_item = self.nodes._widgets[widget_index]
565
 
 
566
 
        if selected_item != self._previous_clicked:
567
 
            selected_item.activate(previous=self._previous_clicked)
568
 
            self._previous_clicked = selected_item
569
 
            if isinstance(item, Action):
570
 
                item.run()
571
 
            elif hasattr(item, 'action') and issubclass(item.action, Action):
572
 
                action = item.action(self)
573
 
                dfr = action.run(item)
574
 
            else:
575
 
                browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
576
 
                path = self.track_controller_path
577
 
                title = item.title
578
 
                tracks = [t for t in self.model if not isinstance(t, Action)]
579
 
                args = {'track': item,
580
 
                        'tracks': tracks}
581
 
                dfr = browser.history.append_controller(path, title, **args)
 
548
        if isinstance(item, Action):
 
549
            item.run()
 
550
        elif hasattr(item, 'action') and issubclass(item.action, Action):
 
551
            action = item.action(self)
 
552
            dfr = action.run(item)
 
553
        else:
 
554
            browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
 
555
            path = self.track_controller_path
 
556
            title = item.title
 
557
            tracks = [t for t in self.model if not isinstance(t, Action)]
 
558
            args = {'track': item,
 
559
                    'tracks': tracks}
 
560
            dfr = browser.history.append_controller(path, title, **args)
582
561
 
583
562
 
584
563
class TracksDbController(GenericTracksDbController):
810
789
        return deferred
811
790
 
812
791
    def node_clicked(self, widget, item):
813
 
        widget_index = self.nodes._widget_index_from_item_index(widget.model.index(item))
814
 
        selected_item = self.nodes._widgets[widget_index]
815
 
 
816
 
        if selected_item != self._previous_clicked:
817
 
            selected_item.activate(previous=self._previous_clicked)
818
 
            self._previous_clicked = selected_item
819
 
            if isinstance(item, Action):
820
 
                item.run()
821
 
            else:
822
 
                browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
823
 
                path = item.controller_path
824
 
                args = item.controller_args
825
 
                dfr = browser.history.append_controller(path, item.label, **args)
 
792
        if isinstance(item, Action):
 
793
            item.run()
 
794
        else:
 
795
            browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
 
796
            path = item.controller_path
 
797
            args = item.controller_args
 
798
            dfr = browser.history.append_controller(path, item.label, **args)
826
799
 
827
800
 
828
801
class GenresDbPreviewListController(GenresDbController, MenuItemPreviewListController):
933
906
        return deferred
934
907
 
935
908
    def node_clicked(self, widget, item):
936
 
        widget_index = self.nodes._widget_index_from_item_index(widget.model.index(item))
937
 
        selected_item = self.nodes._widgets[widget_index]
938
 
 
939
 
        if selected_item != self._previous_clicked:
940
 
            selected_item.activate(previous=self._previous_clicked)
941
 
            self._previous_clicked = selected_item
942
 
            if isinstance(item, Action):
943
 
                item.run()
944
 
            else:
945
 
                browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
946
 
                path = '/poblesec/database/music/time'
947
 
                args = item.controller_args
948
 
                dfr = browser.history.append_controller(path, item.label, **args)
 
909
        if isinstance(item, Action):
 
910
            item.run()
 
911
        else:
 
912
            browser = self.frontend.retrieve_controllers('/poblesec/browser')[0]
 
913
            path = '/poblesec/database/music/time'
 
914
            args = item.controller_args
 
915
            dfr = browser.history.append_controller(path, item.label, **args)
949
916
 
950
917
 
951
918
class DecadesDbPreviewListController(DecadesDbController, MenuItemPreviewListController):