Merge lp:~ahayzen/music-app/remix-recent-card-view into lp:music-app/remix
- remix-recent-card-view
- Merge into remix
Status: | Merged |
---|---|
Approved by: | Victor Thompson |
Approved revision: | 676 |
Merged at revision: | 679 |
Proposed branch: | lp:~ahayzen/music-app/remix-recent-card-view |
Merge into: | lp:music-app/remix |
Diff against target: |
877 lines (+93/-549) 4 files modified
MusicStart.qml (+37/-474) common/SongsPage.qml (+0/-7) music-app.qml (+3/-3) po/com.ubuntu.music.pot (+53/-65) |
To merge this branch: | bzr merge lp:~ahayzen/music-app/remix-recent-card-view |
Related bugs: | |
Related blueprints: |
Music Remix for RTM
(Essential)
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu Phone Apps Jenkins Bot | continuous-integration | Approve | |
Victor Thompson | Approve | ||
Review via email: mp+238636@code.launchpad.net |
Commit message
* Use CardView in Recent Tab
* Use Recent as default if >0 recent items otherwise use Albums Tab
Description of the change
* Use CardView in Recent Tab
* Use Recent as default if >0 recent items otherwise use Albums Tab
Note we still need designs for an empty recent item state.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
Victor Thompson (vthompson) wrote : | # |
I think we may need some design input on the behavior for Recent as well. For instance, the "clear" icon (the X used the in the header in Recent) simply clears the recent list. We need to check with Jouni concerning 1) which icon we should use and 2) what the action should be. IMO, if we use the "delete" (trash can) icon, then simply clearing the recent list seems OK, but if we use the "clear" X icon, it seems like we might also want to go to the Albums tab. We may want to go to the Albums tab in either case, actually.
This is kind of subjective, but I think the phrase "Recently played" (or similar) might be better then "Recent". The other tabs have simple titles because they describe the type of data they contain. Again, I'd like design input.
We'll also want Design opinion on how the changes in startup tab ("Recent" or "Albums") affects how we configure the splash screen--which right now the splash has "Music" in the header.
Regardless, you'll want to also update the translatable strings before we merge this in. This looks very good overall, however.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:675
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:676
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Victor Thompson (vthompson) wrote : | # |
This change looks good, but we will still need to get design input. Let's opt to land this and tweak as necessary. LTGM!
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
UNSTABLE: http://
deb: http://
SUCCESS: http://
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) : | # |
Preview Diff
1 | === modified file 'MusicStart.qml' |
2 | --- MusicStart.qml 2014-09-20 15:41:33 +0000 |
3 | +++ MusicStart.qml 2014-10-20 18:24:24 +0000 |
4 | @@ -32,482 +32,45 @@ |
5 | |
6 | MusicPage { |
7 | id: mainpage |
8 | - title: i18n.tr("Music") |
9 | + title: i18n.tr("Recent") |
10 | |
11 | - /* Dev button for search. |
12 | - Button { |
13 | - id: searchButton |
14 | - text: i18n.tr("Search") |
15 | - anchors.top: parent.top |
16 | - anchors.topMargin: units.gu(2) |
17 | - anchors.bottom: recentlyPlayed.top |
18 | - anchors.bottomMargin: units.gu(1) |
19 | - height: units.gu(4) |
20 | - onClicked: { |
21 | - PopupUtils.open(Qt.resolvedUrl("MusicSearch.qml"), mainView, |
22 | - { |
23 | - title: i18n.tr("Search") |
24 | - } ) |
25 | - } |
26 | + head { |
27 | + actions: [ |
28 | + Action { |
29 | + iconName: "delete" |
30 | + onTriggered: { |
31 | + Library.clearRecentHistory() |
32 | + recentModel.filterRecent() |
33 | + } |
34 | + } |
35 | + ] |
36 | } |
37 | - */ |
38 | - Flickable{ |
39 | - id: musicFlickable |
40 | - anchors.fill: parent |
41 | - |
42 | - width: mainpage.width |
43 | - height: mainpage.height |
44 | - |
45 | - contentHeight: mainView.hasRecent ? recentlyPlayed.height + recentlist.height + genres.height + genrelist.height + albums.height + albumlist.height + units.gu(4) |
46 | - : genres.height + genrelist.height + albums.height + albumlist.height + units.gu(3) |
47 | - contentWidth: width |
48 | - |
49 | - focus: true |
50 | - |
51 | - ListItem.Standard { |
52 | - id: recentlyPlayed |
53 | - Label { |
54 | - anchors { |
55 | - verticalCenter: parent.verticalCenter |
56 | - left: parent.left |
57 | - leftMargin: units.gu(2) |
58 | - } |
59 | - text: i18n.tr("Recent") |
60 | - color: styleMusic.common.music |
61 | - } |
62 | - visible: mainView.hasRecent |
63 | - } |
64 | - |
65 | - ListView { |
66 | - id: recentlist |
67 | - anchors.top: recentlyPlayed.bottom |
68 | - anchors.topMargin: units.gu(1) |
69 | - width: parent.width |
70 | - spacing: units.gu(1) |
71 | - height: units.gu(18) |
72 | - // TODO: Update when view counts are collected |
73 | - model: recentModel.model |
74 | - delegate: recentDelegate |
75 | - header: Item { |
76 | - id: recentSpacer |
77 | - width: units.gu(1) |
78 | - } |
79 | - footer: Item { |
80 | - id: clearRecent |
81 | - width: recentlist.height - units.gu(2) |
82 | - height: width |
83 | - visible: mainView.hasRecent && !loading.visible |
84 | - Button { |
85 | - id: clearRecentButton |
86 | - anchors.centerIn: parent |
87 | - text: i18n.tr("Clear History") |
88 | - onClicked: { |
89 | - Library.clearRecentHistory() |
90 | - mainView.hasRecent = false |
91 | - recentModel.filterRecent() |
92 | - } |
93 | - } |
94 | - } |
95 | - orientation: ListView.Horizontal |
96 | - visible: mainView.hasRecent |
97 | - |
98 | - Component { |
99 | - id: recentDelegate |
100 | - Item { |
101 | - property string title: model.title |
102 | - property string title2: model.title2 !== "Playlist" ? model.title2 : i18n.tr("Playlist") |
103 | - property var covers: type === "playlist" ? Playlists.getPlaylistCovers(title) : (model.art !== undefined ? [{art: model.art}] : [{author: model.title2, album: model.title}]) |
104 | - property string type: model.type |
105 | - property string time: model.time |
106 | - property string key: model.key |
107 | - id: recentItem |
108 | - height: recentlist.height - units.gu(1) |
109 | - width: height |
110 | - CoverRow { |
111 | - id: recentShape |
112 | - anchors { |
113 | - top: parent.top |
114 | - left: parent.left |
115 | - verticalCenter: parent.verticalCenter |
116 | - } |
117 | - count: recentItem.covers.length |
118 | - size: recentItem.width |
119 | - covers: recentItem.covers |
120 | - spacing: units.gu(2) |
121 | - } |
122 | - Item { // Background so can see text in current state |
123 | - id: albumBg |
124 | - anchors { |
125 | - bottom: parent.bottom |
126 | - left: parent.left |
127 | - right: parent.right |
128 | - } |
129 | - height: units.gu(6) |
130 | - clip: true |
131 | - UbuntuShape{ |
132 | - anchors { |
133 | - bottom: parent.bottom |
134 | - left: parent.left |
135 | - right: parent.right |
136 | - } |
137 | - height: recentShape.height |
138 | - radius: "medium" |
139 | - color: styleMusic.common.black |
140 | - opacity: 0.6 |
141 | - } |
142 | - } |
143 | - Label { |
144 | - id: albumArtist |
145 | - anchors.bottom: parent.bottom |
146 | - anchors.bottomMargin: units.gu(3) |
147 | - anchors.left: parent.left |
148 | - anchors.leftMargin: units.gu(1) |
149 | - anchors.right: parent.right |
150 | - anchors.rightMargin: units.gu(1) |
151 | - color: styleMusic.common.white |
152 | - elide: Text.ElideRight |
153 | - text: title |
154 | - fontSize: "small" |
155 | - font.weight: Font.DemiBold |
156 | - } |
157 | - Label { |
158 | - id: albumLabel |
159 | - anchors.left: parent.left |
160 | - anchors.leftMargin: units.gu(1) |
161 | - anchors.bottom: parent.bottom |
162 | - anchors.bottomMargin: units.gu(1) |
163 | - anchors.right: parent.right |
164 | - anchors.rightMargin: units.gu(1) |
165 | - color: styleMusic.common.white |
166 | - elide: Text.ElideRight |
167 | - text: title2 |
168 | - fontSize: "x-small" |
169 | - } |
170 | - MouseArea { |
171 | - anchors.fill: parent |
172 | - onClicked: { |
173 | - if (type === "playlist") { |
174 | - albumTracksModel.filterPlaylistTracks(key) |
175 | - } else { |
176 | - songsPage.album = title; |
177 | - } |
178 | - songsPage.genre = undefined; |
179 | - |
180 | - songsPage.line1 = title2 |
181 | - songsPage.line2 = title |
182 | - songsPage.covers = recentItem.covers |
183 | - songsPage.isAlbum = (type === "album") |
184 | - songsPage.title = songsPage.isAlbum ? i18n.tr("Album") : i18n.tr("Playlist") |
185 | - |
186 | - mainPageStack.push(songsPage) |
187 | - } |
188 | - |
189 | - // TODO: If http://pad.lv/1354753 is fixed to expose whether the Shape should appear pressed, update this as well. |
190 | - onPressedChanged: recentShape.pressed = pressed |
191 | - } |
192 | - } |
193 | - } |
194 | - } |
195 | - |
196 | - ListItem.ThinDivider { |
197 | - id: genreDivider |
198 | - anchors.top: mainView.hasRecent ? recentlist.bottom : parent.top |
199 | - visible: genrelist.count > 1 |
200 | - } |
201 | - ListItem.Standard { |
202 | - id: genres |
203 | - anchors.top: genreDivider.bottom |
204 | - visible: genrelist.count > 1 |
205 | - Label { |
206 | - anchors { |
207 | - verticalCenter: parent.verticalCenter |
208 | - left: parent.left |
209 | - leftMargin: units.gu(2) |
210 | - } |
211 | - text: i18n.tr("Genres") |
212 | - color: styleMusic.common.music |
213 | - } |
214 | - } |
215 | - // TODO: add music genres. frequency of play? most tracks? |
216 | - ListView { |
217 | - id: genrelist |
218 | - width: parent.width |
219 | - anchors.top: genres.bottom |
220 | - anchors.topMargin: units.gu(1) |
221 | - spacing: units.gu(1) |
222 | - height: units.gu(18) |
223 | - visible: genrelist.count > 1 |
224 | - model: SortFilterModel { |
225 | - id: genresModelFilter |
226 | - model: GenresModel { |
227 | - id: genresModel |
228 | - store: musicStore |
229 | - } |
230 | - filter.property: "genre" |
231 | - filter.pattern: /\S+/ |
232 | - } |
233 | - |
234 | - delegate: genreDelegate |
235 | - header: Item { |
236 | - id: genreSpacer |
237 | - width: units.gu(1) |
238 | - } |
239 | - orientation: ListView.Horizontal |
240 | - |
241 | - Component { |
242 | - id: genreDelegate |
243 | - Item { |
244 | - id: genreItem |
245 | - objectName: "genreItemObject" |
246 | - height: genrelist.height - units.gu(1) |
247 | - width: height |
248 | - |
249 | - Repeater { |
250 | - id: albumGenreModelRepeater |
251 | - model: AlbumsModel { |
252 | - genre: model.genre |
253 | - store: musicStore |
254 | - } |
255 | - |
256 | - delegate: Item { |
257 | - property string art: model.art |
258 | - } |
259 | - property var covers: [] |
260 | - signal finished() |
261 | - |
262 | - onFinished: { |
263 | - genreShape.count = count |
264 | - genreShape.covers = covers |
265 | - } |
266 | - onItemAdded: { |
267 | - covers.push({art: item.art}); |
268 | - |
269 | - if (index === count - 1) { |
270 | - finished(); |
271 | - } |
272 | - } |
273 | - } |
274 | - |
275 | - SongsModel { |
276 | - id: songGenreModel |
277 | - genre: model.genre |
278 | - store: musicStore |
279 | - } |
280 | - |
281 | - CoverRow { |
282 | - id: genreShape |
283 | - anchors { |
284 | - top: parent.top |
285 | - left: parent.left |
286 | - verticalCenter: parent.verticalCenter |
287 | - } |
288 | - count: 0 |
289 | - size: genreItem.width |
290 | - covers: [] |
291 | - spacing: units.gu(2) |
292 | - } |
293 | - MouseArea { |
294 | - anchors.fill: parent |
295 | - onClicked: { |
296 | - songsPage.album = undefined |
297 | - songsPage.covers = genreShape.covers |
298 | - songsPage.genre = model.genre |
299 | - songsPage.isAlbum = true |
300 | - songsPage.line1 = i18n.tr("Genre") |
301 | - songsPage.line2 = model.genre |
302 | - songsPage.title = i18n.tr("Genre") |
303 | - |
304 | - mainPageStack.push(songsPage) |
305 | - } |
306 | - |
307 | - // TODO: If http://pad.lv/1354753 is fixed to expose whether the Shape should appear pressed, update this as well. |
308 | - onPressedChanged: genreShape.pressed = pressed |
309 | - } |
310 | - Item { // Background so can see text in current state |
311 | - id: genreBg |
312 | - anchors { |
313 | - bottom: parent.bottom |
314 | - left: parent.left |
315 | - right: parent.right |
316 | - } |
317 | - height: units.gu(5.5) |
318 | - clip: true |
319 | - UbuntuShape{ |
320 | - anchors { |
321 | - bottom: parent.bottom |
322 | - left: parent.left |
323 | - right: parent.right |
324 | - } |
325 | - height: genreShape.height |
326 | - radius: "medium" |
327 | - color: styleMusic.common.black |
328 | - opacity: 0.6 |
329 | - } |
330 | - } |
331 | - Label { |
332 | - id: genreLabel |
333 | - anchors.bottom: parent.bottom |
334 | - anchors.bottomMargin: units.gu(1) |
335 | - anchors.left: parent.left |
336 | - anchors.leftMargin: units.gu(1) |
337 | - anchors.right: parent.right |
338 | - anchors.rightMargin: units.gu(1) |
339 | - color: styleMusic.common.white |
340 | - elide: Text.ElideRight |
341 | - text: model.genre |
342 | - fontSize: "small" |
343 | - font.weight: Font.DemiBold |
344 | - } |
345 | - Label { |
346 | - id: genreTotal |
347 | - anchors.bottom: parent.bottom |
348 | - anchors.bottomMargin: units.gu(3) |
349 | - anchors.left: parent.left |
350 | - anchors.leftMargin: units.gu(1) |
351 | - anchors.right: parent.right |
352 | - anchors.rightMargin: units.gu(1) |
353 | - color: styleMusic.common.white |
354 | - elide: Text.ElideRight |
355 | - text: i18n.tr("%1 song", "%1 songs", songGenreModel.rowCount).arg(songGenreModel.rowCount) |
356 | - fontSize: "x-small" |
357 | - } |
358 | - } |
359 | - } |
360 | - } |
361 | - |
362 | - ListItem.ThinDivider { |
363 | - id: albumsDivider |
364 | - anchors.top: genrelist.visible |
365 | - ? genrelist.bottom |
366 | - : (mainView.hasRecent ? recentlist.bottom : parent.top) |
367 | - } |
368 | - ListItem.Standard { |
369 | - id: albums |
370 | - Label { |
371 | - anchors { |
372 | - verticalCenter: parent.verticalCenter |
373 | - left: parent.left |
374 | - leftMargin: units.gu(2) |
375 | - } |
376 | - text: i18n.tr("Albums") |
377 | - color: styleMusic.common.music |
378 | - } |
379 | - anchors.top: albumsDivider.bottom |
380 | - } |
381 | - |
382 | - ListView { |
383 | - id: albumlist |
384 | - width: parent.width |
385 | - anchors.top: albums.bottom |
386 | - anchors.topMargin: units.gu(1) |
387 | - spacing: units.gu(1) |
388 | - height: units.gu(18) |
389 | - model: SortFilterModel { |
390 | - id: albumsModelFilter |
391 | - property alias rowCount: albumsModel.rowCount |
392 | - model: AlbumsModel { |
393 | - id: albumsModel |
394 | - store: musicStore |
395 | - } |
396 | - sort.property: "title" |
397 | - sort.order: Qt.AscendingOrder |
398 | - } |
399 | - delegate: albumDelegate |
400 | - header: Item { |
401 | - id: albumSpacer |
402 | - width: units.gu(1) |
403 | - } |
404 | - orientation: ListView.Horizontal |
405 | - |
406 | - Component { |
407 | - id: albumDelegate |
408 | - Item { |
409 | - property string artist: model.artist |
410 | - property string album: model.title |
411 | - property var covers: [{art: model.art}] |
412 | - |
413 | - id: albumItem |
414 | - objectName: "albumItemObject" |
415 | - height: albumlist.height - units.gu(1) |
416 | - width: height |
417 | - CoverRow { |
418 | - id: albumShape |
419 | - anchors { |
420 | - top: parent.top |
421 | - left: parent.left |
422 | - verticalCenter: parent.verticalCenter |
423 | - } |
424 | - count: albumItem.covers.length |
425 | - size: albumItem.width |
426 | - covers: albumItem.covers |
427 | - spacing: units.gu(2) |
428 | - } |
429 | - MouseArea { |
430 | - anchors.fill: parent |
431 | - onClicked: { |
432 | - songsPage.album = album |
433 | - songsPage.covers = covers |
434 | - songsPage.genre = undefined |
435 | - songsPage.isAlbum = true |
436 | - songsPage.line1 = artist |
437 | - songsPage.line2 = album |
438 | - songsPage.title = i18n.tr("Album") |
439 | - |
440 | - mainPageStack.push(songsPage) |
441 | - } |
442 | - |
443 | - // TODO: If http://pad.lv/1354753 is fixed to expose whether the Shape should appear pressed, update this as well. |
444 | - onPressedChanged: albumShape.pressed = pressed |
445 | - } |
446 | - Item { // Background so can see text in current state |
447 | - id: albumBg |
448 | - anchors { |
449 | - bottom: parent.bottom |
450 | - left: parent.left |
451 | - right: parent.right |
452 | - } |
453 | - height: units.gu(6) |
454 | - clip: true |
455 | - UbuntuShape{ |
456 | - anchors { |
457 | - bottom: parent.bottom |
458 | - left: parent.left |
459 | - right: parent.right |
460 | - } |
461 | - height: albumShape.height |
462 | - radius: "medium" |
463 | - color: styleMusic.common.black |
464 | - opacity: 0.6 |
465 | - } |
466 | - } |
467 | - Label { |
468 | - id: albumLabel |
469 | - anchors.bottom: parent.bottom |
470 | - anchors.bottomMargin: units.gu(1) |
471 | - anchors.left: parent.left |
472 | - anchors.leftMargin: units.gu(1) |
473 | - anchors.right: parent.right |
474 | - anchors.rightMargin: units.gu(1) |
475 | - color: styleMusic.common.white |
476 | - elide: Text.ElideRight |
477 | - text: artist |
478 | - fontSize: "x-small" |
479 | - } |
480 | - Label { |
481 | - id: albumLabel2 |
482 | - anchors.bottom: parent.bottom |
483 | - anchors.bottomMargin: units.gu(3) |
484 | - anchors.left: parent.left |
485 | - anchors.leftMargin: units.gu(1) |
486 | - anchors.right: parent.right |
487 | - anchors.rightMargin: units.gu(1) |
488 | - color: styleMusic.common.white |
489 | - elide: Text.ElideRight |
490 | - text: album |
491 | - fontSize: "small" |
492 | - font.weight: Font.DemiBold |
493 | - } |
494 | - } |
495 | + |
496 | + CardView { |
497 | + id: recentCardView |
498 | + model: recentModel.model |
499 | + delegate: Card { |
500 | + id: albumCard |
501 | + coverSources: model.type === "playlist" ? Playlists.getPlaylistCovers(title) : (model.art !== undefined ? [{art: model.art}] : [{author: model.title2, album: model.title}]) |
502 | + objectName: "albumsPageGridItem" + index |
503 | + primaryText: model.title |
504 | + secondaryText: model.title2 !== "Playlist" ? model.title2 : i18n.tr("Playlist") |
505 | + |
506 | + onClicked: { |
507 | + if (type === "playlist") { |
508 | + albumTracksModel.filterPlaylistTracks(model.key) |
509 | + } else { |
510 | + songsPage.album = title; |
511 | + } |
512 | + songsPage.genre = undefined; |
513 | + |
514 | + songsPage.line1 = secondaryText |
515 | + songsPage.line2 = primaryText |
516 | + songsPage.covers = coverSources |
517 | + songsPage.isAlbum = (type === "album") |
518 | + songsPage.title = songsPage.isAlbum ? i18n.tr("Album") : i18n.tr("Playlist") |
519 | + |
520 | + mainPageStack.push(songsPage) |
521 | } |
522 | } |
523 | } |
524 | |
525 | === modified file 'common/SongsPage.qml' |
526 | --- common/SongsPage.qml 2014-10-18 03:49:51 +0000 |
527 | +++ common/SongsPage.qml 2014-10-20 18:24:24 +0000 |
528 | @@ -121,11 +121,9 @@ |
529 | |
530 | if (isAlbum && songStackPage.line1 !== i18n.tr("Genre")) { |
531 | Library.addRecent(songStackPage.line2, songStackPage.line1, songStackPage.covers[0], songStackPage.line2, "album") |
532 | - mainView.hasRecent = true |
533 | recentModel.filterRecent() |
534 | } else if (songStackPage.line1 === i18n.tr("Playlist")) { |
535 | Library.addRecent(songStackPage.line2, "Playlist", songStackPage.covers[0], songStackPage.line2, "playlist") |
536 | - mainView.hasRecent = true |
537 | recentModel.filterRecent() |
538 | } |
539 | } |
540 | @@ -161,11 +159,9 @@ |
541 | |
542 | if (isAlbum && songStackPage.line1 !== i18n.tr("Genre")) { |
543 | Library.addRecent(songStackPage.line2, songStackPage.line1, songStackPage.covers[0], songStackPage.line2, "album") |
544 | - mainView.hasRecent = true |
545 | recentModel.filterRecent() |
546 | } else if (songStackPage.line1 === i18n.tr("Playlist")) { |
547 | Library.addRecent(songStackPage.line2, "Playlist", songStackPage.covers[0], songStackPage.line2, "playlist") |
548 | - mainView.hasRecent = true |
549 | recentModel.filterRecent() |
550 | } |
551 | } |
552 | @@ -266,11 +262,9 @@ |
553 | |
554 | if (isAlbum && songStackPage.line1 !== i18n.tr("Genre")) { |
555 | Library.addRecent(songStackPage.line2, songStackPage.line1, model.art, songStackPage.line2, "album") |
556 | - mainView.hasRecent = true |
557 | recentModel.filterRecent() |
558 | } else if (songStackPage.line1 === i18n.tr("Playlist")) { |
559 | Library.addRecent(songStackPage.line2, "Playlist", songStackPage.covers[0], songStackPage.line2, "playlist") |
560 | - mainView.hasRecent = true |
561 | recentModel.filterRecent() |
562 | } |
563 | } |
564 | @@ -413,7 +407,6 @@ |
565 | |
566 | if (Library.recentContainsPlaylist(dialogRemovePlaylist.oldPlaylistName)) { |
567 | Library.recentRemovePlaylist(dialogRemovePlaylist.oldPlaylistName) |
568 | - mainView.hasRecent = !Library.isRecentEmpty() |
569 | recentModel.filterRecent() |
570 | } |
571 | |
572 | |
573 | === modified file 'music-app.qml' |
574 | --- music-app.qml 2014-10-16 22:12:01 +0000 |
575 | +++ music-app.qml 2014-10-20 18:24:24 +0000 |
576 | @@ -211,7 +211,6 @@ |
577 | |
578 | // Add album to recent list |
579 | Library.addRecent(songsAlbumArtistModel.album, songsAlbumArtistModel.artist, songsAlbumArtistModel.art, songsAlbumArtistModel.album, "album") |
580 | - mainView.hasRecent = true |
581 | recentModel.filterRecent() |
582 | } |
583 | |
584 | @@ -576,7 +575,9 @@ |
585 | // TODO: Switch tabs back and forth to get the background color in the |
586 | // header to work properly. |
587 | tabs.selectedTabIndex = 1 |
588 | - tabs.selectedTabIndex = 0 |
589 | + |
590 | + // goto Recent if there are items otherwise go to Albums |
591 | + tabs.selectedTabIndex = Library.isRecentEmpty() ? 2 : 0 |
592 | |
593 | // Run post load |
594 | tabs.ensurePopulated(tabs.selectedTab); |
595 | @@ -589,7 +590,6 @@ |
596 | // VARIABLES |
597 | property string musicName: i18n.tr("Music") |
598 | property string appVersion: '1.2' |
599 | - property bool hasRecent: !Library.isRecentEmpty() |
600 | property bool scrobble: false |
601 | property string lastfmusername |
602 | property string lastfmpassword |
603 | |
604 | === modified file 'po/com.ubuntu.music.pot' |
605 | --- po/com.ubuntu.music.pot 2014-10-14 15:46:07 +0000 |
606 | +++ po/com.ubuntu.music.pot 2014-10-20 18:24:24 +0000 |
607 | @@ -8,7 +8,7 @@ |
608 | msgstr "" |
609 | "Project-Id-Version: music-app\n" |
610 | "Report-Msgid-Bugs-To: \n" |
611 | -"POT-Creation-Date: 2014-10-14 16:45+0100\n" |
612 | +"POT-Creation-Date: 2014-10-20 15:09+0100\n" |
613 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
614 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
615 | "Language-Team: LANGUAGE <LL@li.org>\n" |
616 | @@ -54,12 +54,11 @@ |
617 | msgid "You forgot to set your username and/or password" |
618 | msgstr "" |
619 | |
620 | -#: ../MusicAlbums.qml:29 ../MusicStart.qml:392 |
621 | +#: ../MusicAlbums.qml:29 |
622 | msgid "Albums" |
623 | msgstr "" |
624 | |
625 | -#: ../MusicAlbums.qml:57 ../MusicStart.qml:200 ../MusicStart.qml:454 |
626 | -#: ../common/AlbumsPage.qml:146 |
627 | +#: ../MusicAlbums.qml:57 ../MusicStart.qml:71 ../common/AlbumsPage.qml:155 |
628 | msgid "Album" |
629 | msgstr "" |
630 | |
631 | @@ -85,21 +84,19 @@ |
632 | msgid "Playlists" |
633 | msgstr "" |
634 | |
635 | -#: ../MusicPlaylists.qml:61 ../MusicStart.qml:371 |
636 | -#: ../MusicaddtoPlaylist.qml:105 ../common/SongsPage.qml:220 |
637 | -#: ../common/SongsPage.qml:221 |
638 | +#: ../MusicPlaylists.qml:61 ../MusicaddtoPlaylist.qml:105 |
639 | +#: ../common/SongsPage.qml:228 ../common/SongsPage.qml:229 |
640 | #, qt-format |
641 | msgid "%1 song" |
642 | msgid_plural "%1 songs" |
643 | msgstr[0] "" |
644 | msgstr[1] "" |
645 | |
646 | -#: ../MusicPlaylists.qml:66 ../MusicPlaylists.qml:70 ../MusicStart.qml:118 |
647 | -#: ../MusicStart.qml:200 ../common/SongsPage.qml:47 |
648 | -#: ../common/SongsPage.qml:126 ../common/SongsPage.qml:166 |
649 | -#: ../common/SongsPage.qml:176 ../common/SongsPage.qml:204 |
650 | -#: ../common/SongsPage.qml:239 ../common/SongsPage.qml:241 |
651 | -#: ../common/SongsPage.qml:259 |
652 | +#: ../MusicPlaylists.qml:66 ../MusicPlaylists.qml:70 ../MusicStart.qml:57 |
653 | +#: ../MusicStart.qml:71 ../common/SongsPage.qml:47 ../common/SongsPage.qml:125 |
654 | +#: ../common/SongsPage.qml:163 ../common/SongsPage.qml:172 |
655 | +#: ../common/SongsPage.qml:208 ../common/SongsPage.qml:247 |
656 | +#: ../common/SongsPage.qml:249 ../common/SongsPage.qml:266 |
657 | msgid "Playlist" |
658 | msgstr "" |
659 | |
660 | @@ -194,30 +191,10 @@ |
661 | msgid "Clean everything!" |
662 | msgstr "" |
663 | |
664 | -#: ../MusicStart.qml:35 ../music-app.qml:576 ../music-app.qml:1141 |
665 | -#: com.ubuntu.music_music.desktop.in.in.h:1 |
666 | -msgid "Music" |
667 | -msgstr "" |
668 | - |
669 | -#: ../MusicStart.qml:75 |
670 | +#: ../MusicStart.qml:35 |
671 | msgid "Recent" |
672 | msgstr "" |
673 | |
674 | -#: ../MusicStart.qml:103 |
675 | -msgid "Clear History" |
676 | -msgstr "" |
677 | - |
678 | -#: ../MusicStart.qml:227 |
679 | -msgid "Genres" |
680 | -msgstr "" |
681 | - |
682 | -#: ../MusicStart.qml:316 ../MusicStart.qml:318 ../common/SongsPage.qml:122 |
683 | -#: ../common/SongsPage.qml:162 ../common/SongsPage.qml:177 |
684 | -#: ../common/SongsPage.qml:205 ../common/SongsPage.qml:220 |
685 | -#: ../common/SongsPage.qml:255 |
686 | -msgid "Genre" |
687 | -msgstr "" |
688 | - |
689 | #: ../MusicToolbar.qml:150 |
690 | msgid "Tap to shuffle music" |
691 | msgstr "" |
692 | @@ -238,22 +215,22 @@ |
693 | msgid "Shuffle" |
694 | msgstr "" |
695 | |
696 | -#: ../common/AlbumsPage.qml:72 ../common/SongsPage.qml:144 |
697 | +#: ../common/AlbumsPage.qml:72 ../common/SongsPage.qml:142 |
698 | msgid "Queue all" |
699 | msgstr "" |
700 | |
701 | -#: ../common/AlbumsPage.qml:83 ../common/SongsPage.qml:155 |
702 | +#: ../common/AlbumsPage.qml:83 ../common/SongsPage.qml:153 |
703 | msgid "Play all" |
704 | msgstr "" |
705 | |
706 | -#: ../common/AlbumsPage.qml:115 |
707 | +#: ../common/AlbumsPage.qml:124 |
708 | #, qt-format |
709 | msgid "%1 album" |
710 | msgid_plural "%1 albums" |
711 | msgstr[0] "" |
712 | msgstr[1] "" |
713 | |
714 | -#: ../common/ListItemActions/AddToPlaylist.qml:25 ../music-app.qml:891 |
715 | +#: ../common/ListItemActions/AddToPlaylist.qml:25 ../music-app.qml:905 |
716 | msgid "Add to playlist" |
717 | msgstr "" |
718 | |
719 | @@ -261,7 +238,7 @@ |
720 | msgid "Add to Queue" |
721 | msgstr "" |
722 | |
723 | -#: ../common/ListItemActions/Remove.qml:27 ../common/SongsPage.qml:389 |
724 | +#: ../common/ListItemActions/Remove.qml:27 ../common/SongsPage.qml:400 |
725 | msgid "Remove" |
726 | msgstr "" |
727 | |
728 | @@ -269,38 +246,44 @@ |
729 | msgid "Loading..." |
730 | msgstr "" |
731 | |
732 | +#: ../common/SongsPage.qml:122 ../common/SongsPage.qml:160 |
733 | +#: ../common/SongsPage.qml:173 ../common/SongsPage.qml:209 |
734 | +#: ../common/SongsPage.qml:228 ../common/SongsPage.qml:263 |
735 | +msgid "Genre" |
736 | +msgstr "" |
737 | + |
738 | #. TRANSLATORS: this is a title of a dialog with a prompt to rename a playlist |
739 | -#: ../common/SongsPage.qml:327 |
740 | +#: ../common/SongsPage.qml:333 |
741 | msgid "Change name" |
742 | msgstr "" |
743 | |
744 | -#: ../common/SongsPage.qml:328 |
745 | +#: ../common/SongsPage.qml:334 |
746 | msgid "Enter the new name of the playlist." |
747 | msgstr "" |
748 | |
749 | -#: ../common/SongsPage.qml:345 |
750 | +#: ../common/SongsPage.qml:351 |
751 | msgid "Change" |
752 | msgstr "" |
753 | |
754 | -#: ../common/SongsPage.qml:361 ../music-app.qml:945 |
755 | +#: ../common/SongsPage.qml:372 ../music-app.qml:959 |
756 | msgid "Playlist already exists" |
757 | msgstr "" |
758 | |
759 | -#: ../common/SongsPage.qml:365 ../music-app.qml:950 |
760 | +#: ../common/SongsPage.qml:376 ../music-app.qml:964 |
761 | msgid "Please type in a name." |
762 | msgstr "" |
763 | |
764 | -#: ../common/SongsPage.qml:370 ../common/SongsPage.qml:403 |
765 | -#: ../music-app.qml:486 ../music-app.qml:956 |
766 | +#: ../common/SongsPage.qml:381 ../common/SongsPage.qml:420 |
767 | +#: ../music-app.qml:499 ../music-app.qml:970 |
768 | msgid "Cancel" |
769 | msgstr "" |
770 | |
771 | #. TRANSLATORS: this is a title of a dialog with a prompt to delete a playlist |
772 | -#: ../common/SongsPage.qml:383 |
773 | +#: ../common/SongsPage.qml:394 |
774 | msgid "Are you sure?" |
775 | msgstr "" |
776 | |
777 | -#: ../common/SongsPage.qml:384 |
778 | +#: ../common/SongsPage.qml:395 |
779 | msgid "This will delete your playlist." |
780 | msgstr "" |
781 | |
782 | @@ -373,74 +356,79 @@ |
783 | msgstr "" |
784 | |
785 | #. TRANSLATORS: This string represents that the target destination filepath does not start with ~/Music/Imported/ |
786 | -#: ../music-app.qml:331 |
787 | +#: ../music-app.qml:342 |
788 | msgid "Filepath must start with" |
789 | msgstr "" |
790 | |
791 | #. TRANSLATORS: This string represents that a blank filepath destination has been used |
792 | -#: ../music-app.qml:357 |
793 | +#: ../music-app.qml:368 |
794 | msgid "Filepath must be a file" |
795 | msgstr "" |
796 | |
797 | #. TRANSLATORS: This string represents that there was failure moving the file to the target destination |
798 | -#: ../music-app.qml:363 |
799 | +#: ../music-app.qml:374 |
800 | msgid "Failed to move file" |
801 | msgstr "" |
802 | |
803 | -#: ../music-app.qml:440 |
804 | +#: ../music-app.qml:453 |
805 | msgid "Waiting for file(s)..." |
806 | msgstr "" |
807 | |
808 | -#: ../music-app.qml:459 |
809 | +#: ../music-app.qml:472 |
810 | msgid "OK" |
811 | msgstr "" |
812 | |
813 | -#: ../music-app.qml:472 |
814 | +#: ../music-app.qml:485 |
815 | msgid "Imported file not found" |
816 | msgstr "" |
817 | |
818 | -#: ../music-app.qml:476 |
819 | +#: ../music-app.qml:489 |
820 | msgid "Wait" |
821 | msgstr "" |
822 | |
823 | #. TRANSLATORS: this refers to a number of songs greater than one. The actual number will be prepended to the string automatically (plural forms are not yet fully supported in usermetrics, the library that displays that string) |
824 | -#: ../music-app.qml:497 |
825 | +#: ../music-app.qml:510 |
826 | msgid "songs played today" |
827 | msgstr "" |
828 | |
829 | -#: ../music-app.qml:498 |
830 | +#: ../music-app.qml:511 |
831 | msgid "No songs played today" |
832 | msgstr "" |
833 | |
834 | -#: ../music-app.qml:599 |
835 | +#: ../music-app.qml:591 ../music-app.qml:1155 |
836 | +#: com.ubuntu.music_music.desktop.in.in.h:1 |
837 | +msgid "Music" |
838 | +msgstr "" |
839 | + |
840 | +#: ../music-app.qml:613 |
841 | msgid "Debug: " |
842 | msgstr "" |
843 | |
844 | -#: ../music-app.qml:877 |
845 | +#: ../music-app.qml:891 |
846 | msgid "Add to queue" |
847 | msgstr "" |
848 | |
849 | -#: ../music-app.qml:914 |
850 | +#: ../music-app.qml:928 |
851 | msgid "New Playlist" |
852 | msgstr "" |
853 | |
854 | -#: ../music-app.qml:915 |
855 | +#: ../music-app.qml:929 |
856 | msgid "Name your playlist." |
857 | msgstr "" |
858 | |
859 | -#: ../music-app.qml:919 |
860 | +#: ../music-app.qml:933 |
861 | msgid "Name" |
862 | msgstr "" |
863 | |
864 | -#: ../music-app.qml:929 |
865 | +#: ../music-app.qml:943 |
866 | msgid "Create" |
867 | msgstr "" |
868 | |
869 | -#: ../music-app.qml:1167 |
870 | +#: ../music-app.qml:1181 |
871 | msgid "No music found" |
872 | msgstr "" |
873 | |
874 | -#: ../music-app.qml:1174 |
875 | +#: ../music-app.qml:1188 |
876 | msgid "Please import music" |
877 | msgstr "" |
878 |
PASSED: Continuous integration, rev:672 91.189. 93.70:8080/ job/music- app-remix- ci/101/ 91.189. 93.70:8080/ job/generic- mediumtests- utopic- python3/ 1007 91.189. 93.70:8080/ job/generic- mediumtests- utopic- python3/ 1007/artifact/ work/output/ *zip*/output. zip 91.189. 93.70:8080/ job/music- app-remix- utopic- amd64-ci/ 101
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: 91.189. 93.70:8080/ job/music- app-remix- ci/101/ rebuild
http://