~osomon/moovida/upicek_release_scripts

« back to all changes in this revision

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

Added a generic mechanism to mark as favorites non-local items storing their URIs.

Implements https://blueprints.launchpad.net/elisa/+spec/yes.fm-favorites

Show diffs side-by-side

added added

removed removed

Lines of Context:
102
102
    def run(self):
103
103
        if self.toggled:
104
104
            if self.controller.artist:
105
 
                dfr = common.application.store.find(FavoritesItem,
106
 
                                                    FavoritesItem.foreign_id == self.controller.artist.name,
107
 
                                                    FavoritesItem.foreign_class == u'Artist')
 
105
                uri = getattr(self.controller.artist, 'uri', None)
 
106
                if uri:
 
107
                    dfr = common.application.store.find(FavoritesItem,
 
108
                                                        FavoritesItem.uri == unicode(uri),
 
109
                                                        FavoritesItem.type == u'artist')
 
110
                else:
 
111
                    dfr = common.application.store.find(FavoritesItem,
 
112
                                                        FavoritesItem.foreign_id == self.controller.artist.name,
 
113
                                                        FavoritesItem.foreign_class == u'Artist')
108
114
                dfr.addCallback(lambda rs: rs.one())
109
115
                dfr.addCallback(self.remove)
110
116
        else:
113
119
 
114
120
            # expecting an AlbumsController
115
121
            if self.controller.artist:
116
 
                favorite.foreign_id = self.controller.artist.name
117
 
                favorite.foreign_class = u'Artist'
 
122
                uri = getattr(self.controller.artist, 'uri', None)
 
123
                if uri:
 
124
                    favorite.uri = unicode(uri)
 
125
                else:
 
126
                    favorite.foreign_id = self.controller.artist.name
 
127
                    favorite.foreign_class = u'Artist'
 
128
                favorite.type = u'artist'
118
129
                favorite.title = self.controller.artist.name
119
130
                self.store(favorite)
120
131
 
 
132
 
121
133
class TrackAddToFavoritesAction(AddToFavoritesAction):
122
134
 
123
135
    def run(self):
124
136
        if self.toggled:
125
 
            if self.controller.album:
126
 
                dfr = common.application.store.find(FavoritesItem,
127
 
                                                    FavoritesItem.foreign_id == self.controller.album.name,
128
 
                                                    FavoritesItem.foreign_class == u'MusicAlbum')
 
137
            if self.controller.track:
 
138
                uri = getattr(self.controller.track, 'uri', None)
 
139
                if uri:
 
140
                    dfr = common.application.store.find(FavoritesItem,
 
141
                                                        FavoritesItem.uri == unicode(uri),
 
142
                                                        FavoritesItem.type == u'music_track')
 
143
                else:
 
144
                    dfr = common.application.store.find(FavoritesItem,
 
145
                                                        FavoritesItem.foreign_id == self.controller.track.file_path,
 
146
                                                        FavoritesItem.foreign_class == u'MusicTrack')
129
147
                dfr.addCallback(lambda rs: rs.one())
130
148
                dfr.addCallback(self.remove)
131
 
            elif self.controller.track:
132
 
                dfr = common.application.store.find(FavoritesItem,
133
 
                                                    FavoritesItem.foreign_id == self.controller.track.file_path,
134
 
                                                    FavoritesItem.foreign_class == u'MusicTrack')
 
149
            elif self.controller.album:
 
150
                uri = getattr(self.controller.album, 'uri', None)
 
151
                if uri:
 
152
                    dfr = common.application.store.find(FavoritesItem,
 
153
                                                        FavoritesItem.uri == unicode(uri),
 
154
                                                        FavoritesItem.type == u'music_album')
 
155
                else:
 
156
                    dfr = common.application.store.find(FavoritesItem,
 
157
                                                        FavoritesItem.foreign_id == self.controller.album.name,
 
158
                                                        FavoritesItem.foreign_class == u'MusicAlbum')
135
159
                dfr.addCallback(lambda rs: rs.one())
136
160
                dfr.addCallback(self.remove)
137
161
        else:
139
163
            favorite.added_time = datetime.datetime.now()
140
164
 
141
165
            # expecting a TracksController
142
 
            if self.controller.album:
143
 
                favorite.foreign_id = self.controller.album.name
144
 
                favorite.foreign_class = u'MusicAlbum'
145
 
                favorite.title = self.controller.album.name
146
 
                self.store(favorite)
147
 
            elif self.controller.track:
148
 
                favorite.foreign_id = self.controller.track.file_path
149
 
                favorite.foreign_class = u'MusicTrack'
 
166
            if self.controller.track:
 
167
                uri = getattr(self.controller.track, 'uri', None)
 
168
                if uri:
 
169
                    favorite.uri = unicode(uri)
 
170
                else:
 
171
                    favorite.foreign_id = self.controller.track.file_path
 
172
                    favorite.foreign_class = u'MusicTrack'
 
173
                favorite.type = u'music_track'
150
174
                favorite.title = self.controller.track.title
151
175
                self.store(favorite)
 
176
            elif self.controller.album:
 
177
                uri = getattr(self.controller.album, 'uri', None)
 
178
                if uri:
 
179
                    favorite.uri = unicode(uri)
 
180
                else:
 
181
                    favorite.foreign_id = self.controller.album.name
 
182
                    favorite.foreign_class = u'MusicAlbum'
 
183
                favorite.type = u'music_album'
 
184
                favorite.title = self.controller.album.name
 
185
                self.store(favorite)
152
186
 
153
187
class PhotoAddToFavoritesAction(AddToFavoritesAction):
154
188