Merge lp:~ahayzen/music-app/remix-defer-loading-pages into lp:music-app/remix

Proposed by Andrew Hayzen
Status: Merged
Approved by: Victor Thompson
Approved revision: 705
Merged at revision: 703
Proposed branch: lp:~ahayzen/music-app/remix-defer-loading-pages
Merge into: lp:music-app/remix
Diff against target: 677 lines (+242/-133)
14 files modified
MusicAlbums.qml (+15/-7)
MusicArtists.qml (+11/-3)
MusicGenres.qml (+14/-7)
MusicNowPlaying.qml (+18/-4)
MusicPlaylists.qml (+31/-8)
MusicStart.qml (+17/-10)
MusicTracks.qml (+8/-2)
MusicaddtoPlaylist.qml (+3/-0)
Player.qml (+72/-56)
common/AlbumsPage.qml (+14/-7)
common/ListItemActions/AddToPlaylist.qml (+10/-3)
common/SongsPage.qml (+24/-7)
music-app.qml (+2/-15)
tests/autopilot/music_app/__init__.py (+3/-4)
To merge this branch: bzr merge lp:~ahayzen/music-app/remix-defer-loading-pages
Reviewer Review Type Date Requested Status
Victor Thompson Approve
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Review via email: mp+239600@code.launchpad.net

Commit message

* Defer loading of page
* Async load MediaPlayer object

Description of the change

* Defer loading of pages
* Async load MediaPlayer object

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
703. By Andrew Hayzen

* Fix for autopilot

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
704. By Andrew Hayzen

* Fix for pyflakes

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Victor Thompson (vthompson) wrote :

A few comments/questions:

1. Should the "Error handling" conditions check for normal equality rather than strict? i.e. == instead of === so 'undefined' might also be matched? Or does createObject() only return 'null' for all error conditions?

2. See small nit pick inline.

review: Needs Fixing
705. By Andrew Hayzen

* Fix for using === instead of ==
* Fix for comment grammar

Revision history for this message
Andrew Hayzen (ahayzen) wrote :

Fixed please retest :)

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Victor Thompson (vthompson) wrote :

LGTM!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'MusicAlbums.qml'
2--- MusicAlbums.qml 2014-10-24 12:41:57 +0000
3+++ MusicAlbums.qml 2014-10-26 16:21:02 +0000
4@@ -48,13 +48,21 @@
5 secondaryText: model.artist
6
7 onClicked: {
8- songsPage.album = model.title;
9- songsPage.covers = [{art: model.art}]
10- songsPage.genre = undefined
11- songsPage.isAlbum = true
12- songsPage.line1 = model.artist
13- songsPage.line2 = model.title
14- songsPage.title = i18n.tr("Album")
15+ var comp = Qt.createComponent("common/SongsPage.qml")
16+ var songsPage = comp.createObject(mainPageStack,
17+ {
18+ "album": model.title,
19+ "covers": [{art: model.art}],
20+ "isAlbum": true,
21+ "genre": undefined,
22+ "title": i18n.tr("Album"),
23+ "line1": model.artist,
24+ "line2": model.title,
25+ });
26+
27+ if (songsPage == null) { // Error Handling
28+ console.log("Error creating object");
29+ }
30
31 mainPageStack.push(songsPage)
32 }
33
34=== modified file 'MusicArtists.qml'
35--- MusicArtists.qml 2014-10-24 12:41:57 +0000
36+++ MusicArtists.qml 2014-10-26 16:21:02 +0000
37@@ -72,9 +72,17 @@
38
39
40 onClicked: {
41- albumsPage.artist = model.artist;
42- albumsPage.covers = artistCard.coverSources
43- albumsPage.title = i18n.tr("Artist")
44+ var comp = Qt.createComponent("common/AlbumsPage.qml")
45+ var albumsPage = comp.createObject(mainPageStack,
46+ {
47+ "artist": model.artist,
48+ "covers": artistCard.coverSources,
49+ "title": i18n.tr("Artist"),
50+ });
51+
52+ if (albumsPage == null) { // Error Handling
53+ console.log("Error creating object");
54+ }
55
56 mainPageStack.push(albumsPage)
57 }
58
59=== modified file 'MusicGenres.qml'
60--- MusicGenres.qml 2014-10-24 12:41:57 +0000
61+++ MusicGenres.qml 2014-10-26 16:21:02 +0000
62@@ -82,14 +82,21 @@
63 }
64
65 onClicked: {
66- songsPage.covers = genreCard.coverSources
67- songsPage.album = undefined
68- songsPage.isAlbum = true
69- songsPage.genre = model.genre;
70- songsPage.title = i18n.tr("Genre")
71- songsPage.line2 = model.genre
72- songsPage.line1 = i18n.tr("Genre")
73+ var comp = Qt.createComponent("common/SongsPage.qml")
74+ var songsPage = comp.createObject(mainPageStack,
75+ {
76+ "covers": genreCard.coverSources,
77+ "album": undefined,
78+ "isAlbum": true,
79+ "genre": model.genre,
80+ "title": i18n.tr("Genre"),
81+ "line2": model.genre,
82+ "line1": i18n.tr("Genre")
83+ });
84
85+ if (songsPage == null) { // Error Handling
86+ console.log("Error creating object");
87+ }
88
89 mainPageStack.push(songsPage)
90 }
91
92=== modified file 'MusicNowPlaying.qml'
93--- MusicNowPlaying.qml 2014-10-24 12:41:57 +0000
94+++ MusicNowPlaying.qml 2014-10-26 16:21:02 +0000
95@@ -82,8 +82,14 @@
96 items.push(makeDict(trackQueue.model.get(i)));
97 }
98
99- chosenElements = items;
100- mainPageStack.push(addtoPlaylist)
101+ var comp = Qt.createComponent("MusicaddtoPlaylist.qml")
102+ var addToPlaylist = comp.createObject(mainPageStack, {"chosenElements": items});
103+
104+ if (addToPlaylist == null) { // Error Handling
105+ console.log("Error creating object");
106+ }
107+
108+ mainPageStack.push(addToPlaylist)
109 }
110 },
111 Action {
112@@ -136,8 +142,14 @@
113 items.push(makeDict(trackQueue.model.get(queuelist.selectedItems[i])));
114 }
115
116- chosenElements = items;
117- mainPageStack.push(addtoPlaylist)
118+ var comp = Qt.createComponent("MusicaddtoPlaylist.qml")
119+ var addToPlaylist = comp.createObject(mainPageStack, {"chosenElements": items});
120+
121+ if (addToPlaylist == null) { // Error Handling
122+ console.log("Error creating object");
123+ }
124+
125+ mainPageStack.push(addToPlaylist)
126
127 queuelist.closeSelection()
128 }
129@@ -266,7 +278,9 @@
130 id: progressSliderMusic
131 anchors.left: parent.left
132 anchors.right: parent.right
133+ maximumValue: player.duration // load value at startup
134 objectName: "progressSliderShape"
135+ value: player.position // load value at startup
136
137 function formatValue(v) {
138 if (seeking) { // update position label while dragging
139
140=== modified file 'MusicPlaylists.qml'
141--- MusicPlaylists.qml 2014-10-24 12:41:57 +0000
142+++ MusicPlaylists.qml 2014-10-26 16:21:02 +0000
143@@ -34,8 +34,20 @@
144 // Remember to keep the translation short to fit the screen width
145 title: i18n.tr("Playlists")
146
147- property string playlistTracks: ""
148- property string inPlaylist: ""
149+ property bool changed: false
150+
151+ onVisibleChanged: {
152+ if (changed) {
153+ changed = false
154+ refreshWaitTimer.start()
155+ }
156+ }
157+
158+ Timer { // FIXME: workaround for when the playlist is deleted and the delegate being deleting causes freezing
159+ id: refreshWaitTimer
160+ interval: 250
161+ onTriggered: playlistModel.filterPlaylists()
162+ }
163
164 head {
165 actions: [
166@@ -62,12 +74,23 @@
167
168 onClicked: {
169 albumTracksModel.filterPlaylistTracks(name)
170- songsPage.isAlbum = false
171- songsPage.line1 = i18n.tr("Playlist")
172- songsPage.line2 = model.name
173- songsPage.covers = coverSources
174- songsPage.genre = undefined
175- songsPage.title = i18n.tr("Playlist")
176+
177+ var comp = Qt.createComponent("common/SongsPage.qml")
178+ var songsPage = comp.createObject(mainPageStack,
179+ {
180+ "album": undefined,
181+ "covers": coverSources,
182+ "isAlbum": false,
183+ "genre": undefined,
184+ "page": playlistsPage,
185+ "title": i18n.tr("Playlist"),
186+ "line1": i18n.tr("Playlist"),
187+ "line2": model.name,
188+ });
189+
190+ if (songsPage == null) { // Error Handling
191+ console.log("Error creating object");
192+ }
193
194 mainPageStack.push(songsPage)
195 }
196
197=== modified file 'MusicStart.qml'
198--- MusicStart.qml 2014-10-24 12:41:57 +0000
199+++ MusicStart.qml 2014-10-26 16:21:02 +0000
200@@ -59,16 +59,23 @@
201 onClicked: {
202 if (type === "playlist") {
203 albumTracksModel.filterPlaylistTracks(model.key)
204- } else {
205- songsPage.album = title;
206- }
207- songsPage.genre = undefined;
208-
209- songsPage.line1 = secondaryText
210- songsPage.line2 = primaryText
211- songsPage.covers = coverSources
212- songsPage.isAlbum = (type === "album")
213- songsPage.title = songsPage.isAlbum ? i18n.tr("Album") : i18n.tr("Playlist")
214+ }
215+
216+ var comp = Qt.createComponent("common/SongsPage.qml")
217+ var songsPage = comp.createObject(mainPageStack,
218+ {
219+ "album": type !== "playlist" ? title : undefined,
220+ "covers": coverSources,
221+ "isAlbum": (type === "album"),
222+ "genre": undefined,
223+ "title": (type === "album") ? i18n.tr("Album") : i18n.tr("Playlist"),
224+ "line1": secondaryText,
225+ "line2": primaryText,
226+ });
227+
228+ if (songsPage == null) { // Error Handling
229+ console.log("Error creating object");
230+ }
231
232 mainPageStack.push(songsPage)
233 }
234
235=== modified file 'MusicTracks.qml'
236--- MusicTracks.qml 2014-10-24 12:41:57 +0000
237+++ MusicTracks.qml 2014-10-26 16:21:02 +0000
238@@ -66,8 +66,14 @@
239 items.push(makeDict(tracklist.model.get(tracklist.selectedItems[i], tracklist.model.RoleModelData)));
240 }
241
242- chosenElements = items;
243- mainPageStack.push(addtoPlaylist)
244+ var comp = Qt.createComponent("MusicaddtoPlaylist.qml")
245+ var addToPlaylist = comp.createObject(mainPageStack, {"chosenElements": items});
246+
247+ if (addToPlaylist == null) { // Error Handling
248+ console.log("Error creating object");
249+ }
250+
251+ mainPageStack.push(addToPlaylist)
252
253 tracklist.closeSelection()
254 }
255
256=== modified file 'MusicaddtoPlaylist.qml'
257--- MusicaddtoPlaylist.qml 2014-10-24 12:41:57 +0000
258+++ MusicaddtoPlaylist.qml 2014-10-26 16:21:02 +0000
259@@ -41,6 +41,8 @@
260 title: i18n.tr("Select playlist")
261 visible: false
262
263+ property var chosenElements: []
264+
265 head {
266 actions: [
267 Action {
268@@ -84,6 +86,7 @@
269 }
270
271 playlistModel.filterPlaylists();
272+ albumTracksModel.filterPlaylistTracks(name)
273
274 musicToolbar.goBack(); // go back to the previous page
275 }
276
277=== modified file 'Player.qml'
278--- Player.qml 2014-10-24 12:41:57 +0000
279+++ Player.qml 2014-10-26 16:21:02 +0000
280@@ -38,14 +38,14 @@
281 property string currentMetaFile: ""
282 property string currentMetaTitle: ""
283 property int currentIndex: -1
284- property alias duration: mediaPlayer.duration
285- property bool isPlaying: player.playbackState === MediaPlayer.PlayingState
286- property alias playbackState: mediaPlayer.playbackState
287- property alias position: mediaPlayer.position
288+ property int duration: 1
289+ readonly property bool isPlaying: player.playbackState === MediaPlayer.PlayingState
290+ readonly property var playbackState: mediaPlayerLoader.status == Loader.Ready ? mediaPlayerLoader.item.playbackState : MediaPlayer.StoppedState
291+ property int position: 0
292 property alias repeat: settings.repeat
293 property alias shuffle: settings.shuffle
294- property alias source: mediaPlayer.source
295- property alias volume: mediaPlayer.volume
296+ readonly property string source: mediaPlayerLoader.status == Loader.Ready ? mediaPlayerLoader.item.source : ""
297+ readonly property double volume: mediaPlayerLoader.status == Loader.Ready ? mediaPlayerLoader.item.volume : 1.0
298
299 signal stopped()
300
301@@ -62,10 +62,10 @@
302 onCountChanged: {
303 if (trackQueue.model.count === 1) {
304 player.currentIndex = 0;
305- player.source = Qt.resolvedUrl(trackQueue.model.get(0).filename)
306+ mediaPlayerLoader.item.source = Qt.resolvedUrl(trackQueue.model.get(0).filename)
307 } else if (trackQueue.model.count === 0) {
308 player.currentMetaFile = ""
309- player.source = ""
310+ mediaPlayerLoader.item.source = ""
311 }
312 }
313 }
314@@ -132,18 +132,18 @@
315 }
316
317 function pause() {
318- mediaPlayer.pause();
319+ mediaPlayerLoader.item.pause();
320 }
321
322 function play() {
323- mediaPlayer.play();
324+ mediaPlayerLoader.item.play();
325 }
326
327 function playSong(filepath, index) {
328- player.stop();
329+ stop();
330 currentIndex = index;
331- player.source = Qt.resolvedUrl(filepath);
332- player.play();
333+ setSource(filepath);
334+ play();
335 }
336
337 function previousSong(startPlaying) {
338@@ -151,61 +151,77 @@
339 }
340
341 function seek(position) {
342- mediaPlayer.seek(position);
343+ mediaPlayerLoader.item.seek(position);
344+ }
345+
346+ function setSource(filepath) {
347+ mediaPlayerLoader.item.source = Qt.resolvedUrl(filepath);
348+ }
349+
350+ function setVolume(volume) {
351+ mediaPlayerLoader.item.volume = volume
352 }
353
354 function stop() {
355- mediaPlayer.stop();
356+ mediaPlayerLoader.item.stop();
357 }
358
359 function toggle() {
360 if (player.playbackState == MediaPlayer.PlayingState) {
361- player.pause()
362+ pause()
363 }
364 else {
365- player.play()
366+ play()
367 }
368 }
369
370- MediaPlayer {
371- id: mediaPlayer
372- muted: false
373-
374- onSourceChanged: {
375- // Force invalid source to ""
376- if (source === undefined || source === false) {
377- source = ""
378- return
379- }
380-
381- if (source === "") {
382- currentIndex = -1
383- player.stop()
384- }
385- else {
386- var obj = trackQueue.model.get(player.currentIndex);
387- currentMetaAlbum = obj.album;
388-
389- if (obj.art !== undefined) { // FIXME: protect against not art property in playlists
390- currentMetaArt = obj.art;
391- }
392-
393- currentMetaArtist = obj.author;
394- currentMetaFile = obj.filename;
395- currentMetaTitle = obj.title;
396- }
397-
398- console.log("Source: " + source.toString())
399- console.log("Index: " + currentIndex)
400- }
401-
402- onStatusChanged: {
403- if (status == MediaPlayer.EndOfMedia) {
404- nextSong(true, false) // next track
405- }
406- }
407-
408- onStopped: player.stopped()
409+ Loader {
410+ id: mediaPlayerLoader
411+ asynchronous: true
412+ sourceComponent: Component {
413+ MediaPlayer {
414+ muted: false
415+
416+ onDurationChanged: player.duration = duration
417+ onPositionChanged: player.position = position
418+
419+ onSourceChanged: {
420+ // Force invalid source to ""
421+ if (source === undefined || source === false) {
422+ source = ""
423+ return
424+ }
425+
426+ if (source === "") {
427+ player.currentIndex = -1
428+ player.stop()
429+ }
430+ else {
431+ var obj = trackQueue.model.get(player.currentIndex);
432+ player.currentMetaAlbum = obj.album;
433+
434+ if (obj.art !== undefined) { // FIXME: protect against no art property in playlists
435+ player.currentMetaArt = obj.art;
436+ }
437+
438+ player.currentMetaArtist = obj.author;
439+ player.currentMetaFile = obj.filename;
440+ player.currentMetaTitle = obj.title;
441+ }
442+
443+ console.log("Source: " + source.toString())
444+ console.log("Index: " + player.currentIndex)
445+ }
446+
447+ onStatusChanged: {
448+ if (status == MediaPlayer.EndOfMedia) {
449+ nextSong(true, false) // next track
450+ }
451+ }
452+
453+ onStopped: player.stopped()
454+ }
455+ }
456 }
457 }
458
459
460=== modified file 'common/AlbumsPage.qml'
461--- common/AlbumsPage.qml 2014-10-24 12:41:57 +0000
462+++ common/AlbumsPage.qml 2014-10-26 16:21:02 +0000
463@@ -136,14 +136,21 @@
464 secondaryTextVisible: false
465
466 onClicked: {
467- songsPage.album = model.title;
468+ var comp = Qt.createComponent("SongsPage.qml")
469+ var songsPage = comp.createObject(mainPageStack,
470+ {
471+ "album": model.title,
472+ "covers": [{art: model.art}],
473+ "isAlbum": true,
474+ "genre": undefined,
475+ "title": i18n.tr("Album"),
476+ "line1": model.artist,
477+ "line2": model.title,
478+ });
479
480- songsPage.line1 = model.artist
481- songsPage.line2 = model.title
482- songsPage.isAlbum = true
483- songsPage.covers = [{art: model.art}]
484- songsPage.genre = undefined
485- songsPage.title = i18n.tr("Album")
486+ if (songsPage == null) { // Error Handling
487+ console.log("Error creating object");
488+ }
489
490 mainPageStack.push(songsPage)
491 }
492
493=== modified file 'common/ListItemActions/AddToPlaylist.qml'
494--- common/ListItemActions/AddToPlaylist.qml 2014-10-24 12:41:57 +0000
495+++ common/ListItemActions/AddToPlaylist.qml 2014-10-26 16:21:02 +0000
496@@ -27,8 +27,15 @@
497 property bool primed: false
498
499 onTriggered: {
500- chosenElements = [makeDict(model)];
501- console.debug("Debug: Add track to playlist");
502- mainPageStack.push(addtoPlaylist)
503+ console.debug("Debug: Add track to playlist");
504+
505+ var comp = Qt.createComponent("../../MusicaddtoPlaylist.qml")
506+ var addToPlaylist = comp.createObject(mainPageStack, {"chosenElements": [makeDict(model)]});
507+
508+ if (addToPlaylist == null) { // Error Handling
509+ console.log("Error creating object");
510+ }
511+
512+ mainPageStack.push(addToPlaylist)
513 }
514 }
515
516=== modified file 'common/SongsPage.qml'
517--- common/SongsPage.qml 2014-10-24 12:41:57 +0000
518+++ common/SongsPage.qml 2014-10-26 16:21:02 +0000
519@@ -41,6 +41,7 @@
520 property string file: ""
521 property string year: ""
522
523+ property var page
524 property alias album: songsModel.album
525 property alias genre: songsModel.genre
526
527@@ -113,8 +114,14 @@
528 items.push(makeDict(albumtrackslist.model.get(albumtrackslist.selectedItems[i], albumtrackslist.model.RoleModelData)));
529 }
530
531- chosenElements = items;
532- mainPageStack.push(addtoPlaylist)
533+ var comp = Qt.createComponent("../MusicaddtoPlaylist.qml")
534+ var addToPlaylist = comp.createObject(mainPageStack, {"chosenElements": items});
535+
536+ if (addToPlaylist == null) { // Error Handling
537+ console.log("Error creating object");
538+ }
539+
540+ mainPageStack.push(addToPlaylist)
541
542 albumtrackslist.closeSelection()
543 }
544@@ -138,13 +145,20 @@
545 visible: songStackPage.line1 === i18n.tr("Playlist")
546 onTriggered: {
547 for (var i=0; i < albumtrackslist.selectedItems.length; i++) {
548- Playlists.removeFromPlaylist(songStackPage.line2, albumtrackslist.selectedItems[i] - i)
549+ Playlists.removeFromPlaylist(songStackPage.line2, albumtrackslist.selectedItems[i])
550+
551+ // Update indexes as an index has been removed
552+ for (var j=i + 1; j < albumtrackslist.selectedItems.length; j++) {
553+ if (albumtrackslist.selectedItems[j] > albumtrackslist.selectedItems[i]) {
554+ albumtrackslist.selectedItems[j]--;
555+ }
556+ }
557 }
558
559 albumtrackslist.closeSelection()
560
561+ songStackPage.page.changed = true
562 albumTracksModel.filterPlaylistTracks(songStackPage.line2)
563- playlistModel.filterPlaylists()
564 }
565 }
566 ]
567@@ -371,8 +385,8 @@
568 onTriggered: {
569 Playlists.removeFromPlaylist(songStackPage.line2, model.i)
570
571+ songStackPage.page.changed = true
572 albumTracksModel.filterPlaylistTracks(songStackPage.line2)
573- playlistModel.filterPlaylists()
574 }
575 }
576 }
577@@ -488,13 +502,16 @@
578 // removing playlist
579 Playlists.removePlaylist(dialogRemovePlaylist.oldPlaylistName)
580
581- playlistModel.filterPlaylists();
582-
583 if (Library.recentContainsPlaylist(dialogRemovePlaylist.oldPlaylistName)) {
584 Library.recentRemovePlaylist(dialogRemovePlaylist.oldPlaylistName)
585 recentModel.filterRecent()
586 }
587
588+ if (songStackPage.page !== undefined) {
589+ songStackPage.page.changed = true
590+ songStackPage.page = undefined
591+ }
592+
593 PopupUtils.close(dialogRemovePlaylist)
594
595 musicToolbar.goBack()
596
597=== modified file 'music-app.qml'
598--- music-app.qml 2014-10-25 02:58:47 +0000
599+++ music-app.qml 2014-10-26 16:21:02 +0000
600@@ -562,7 +562,6 @@
601 // VARIABLES
602 property string musicName: i18n.tr("Music")
603 property string appVersion: '1.2'
604- property var chosenElements: []
605 property bool toolbarShown: musicToolbar.visible
606 property bool selectedAlbum: false
607
608@@ -649,7 +648,7 @@
609 tabs.pushNowPlaying();
610 }
611 else {
612- player.source = file;
613+ player.setSource(file);
614 }
615 }
616
617@@ -998,7 +997,7 @@
618 var comp = Qt.createComponent("MusicNowPlaying.qml")
619 var nowPlaying = comp.createObject(mainPageStack, {});
620
621- if (nowPlaying === null) { // Error Handling
622+ if (nowPlaying == null) { // Error Handling
623 console.log("Error creating object");
624 }
625
626@@ -1025,18 +1024,6 @@
627 ensurePopulated(selectedTab);
628 }
629 } // end of tabs
630-
631- SongsPage {
632- id: songsPage
633- }
634-
635- AlbumsPage {
636- id: albumsPage
637- }
638-
639- MusicaddtoPlaylist {
640- id: addtoPlaylist
641- }
642 }
643
644 Page {
645
646=== modified file 'tests/autopilot/music_app/__init__.py'
647--- tests/autopilot/music_app/__init__.py 2014-10-24 12:55:02 +0000
648+++ tests/autopilot/music_app/__init__.py 2014-10-26 16:21:02 +0000
649@@ -52,7 +52,7 @@
650 self.player = self.app.select_single(Player, objectName='player')
651
652 def get_add_to_playlist_page(self):
653- return self.app.wait_select_single(Page11,
654+ return self.app.wait_select_single(MusicaddtoPlaylist,
655 objectName="addToPlaylistPage")
656
657 def get_albums_page(self):
658@@ -215,9 +215,9 @@
659 objectName="addToPlaylistCardItem" + str(i)))
660
661
662-class Page11(MusicAlbums, MusicArtists, MusicTracks, MusicaddtoPlaylist):
663+class Page11(MusicAlbums, MusicArtists, MusicTracks):
664 """
665- FIXME: Represents MusicTracks MusicArtists MusicAlbums MusicaddtoPlaylists
666+ FIXME: Represents MusicTracks MusicArtists MusicAlbums
667 due to bug 1341671 and bug 1337004 they all appear as Page11
668 Therefore this class 'contains' all of them for now
669 Once the bugs are fixed Page11 should be swapped for MusicTracks etc
670@@ -226,7 +226,6 @@
671 super(MusicAlbums, self).__init__(*args)
672 super(MusicArtists, self).__init__(*args)
673 super(MusicTracks, self).__init__(*args)
674- super(MusicaddtoPlaylist, self).__init__(*args)
675
676
677 class Player(UbuntuUIToolkitCustomProxyObjectBase):

Subscribers

People subscribed via source and target branches