Merge lp:~vthompson/music-app/remix-now-playing-main-view-blue-slider into lp:music-app/trusty

Proposed by Victor Thompson
Status: Superseded
Proposed branch: lp:~vthompson/music-app/remix-now-playing-main-view-blue-slider
Merge into: lp:music-app/trusty
Diff against target: 2624 lines (+896/-771) (has conflicts)
17 files modified
MusicArtists.qml (+3/-2)
MusicNowPlaying.qml (+311/-21)
MusicPlaylists.qml (+3/-2)
MusicSettings.qml (+0/-11)
MusicToolbar.qml (+173/-364)
MusicTracks.qml (+3/-2)
MusicaddtoPlaylist.qml (+0/-1)
Player.qml (+5/-1)
Style.qml (+2/-2)
common/AlbumsPage.qml (+0/-2)
common/BlurredBackground.qml (+11/-9)
common/MusicPage.qml (+4/-0)
common/MusicRow.qml (+5/-3)
common/SongsPage.qml (+137/-120)
music-app.qml (+15/-25)
po/com.ubuntu.music.pot (+69/-59)
po/pt_BR.po (+155/-147)
Text conflict in po/pt_BR.po
To merge this branch: bzr merge lp:~vthompson/music-app/remix-now-playing-main-view-blue-slider
Reviewer Review Type Date Requested Status
Music App Developers Pending
Review via email: mp+237169@code.launchpad.net

This proposal has been superseded by a proposal from 2014-10-04.

Commit message

* Make the Ubuntu Slider leftColor UbuntuColors.blue

Description of the change

This change makes the Ubuntu Slider leftColor UbuntuColors.blue for use in the Now Playing full view.

To post a comment you must log in.

Unmerged revisions

666. By Victor Thompson

* Make the Ubuntu Slider leftColor UbuntuColors.blue

665. By Victor Thompson

fix update

664. By Victor Thompson

update

663. By Victor Thompson

Small tweaks and a toolbar hack

662. By Victor Thompson

Merge of remix

661. By Victor Thompson

Update per comments

660. By Victor Thompson

Default to the listview view for now

659. By Victor Thompson

Initial Now Playing toggle

658. By Victor Thompson

Clean slate

657. By Victor Thompson

Fit items into view

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'MusicArtists.qml'
2--- MusicArtists.qml 2014-09-20 15:41:33 +0000
3+++ MusicArtists.qml 2014-10-04 17:07:09 +0000
4@@ -38,8 +38,9 @@
5
6 ListView {
7 id: artistlist
8- anchors.fill: parent
9- anchors.bottomMargin: musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
10+ anchors {
11+ fill: parent
12+ }
13 model: ArtistsModel {
14 id: artistsModel
15 albumArtists: true
16
17=== modified file 'MusicNowPlaying.qml'
18--- MusicNowPlaying.qml 2014-09-20 15:41:33 +0000
19+++ MusicNowPlaying.qml 2014-10-04 17:07:09 +0000
20@@ -17,7 +17,6 @@
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24-
25 import QtMultimedia 5.0
26 import QtQuick 2.3
27 import QtQuick.LocalStorage 2.0
28@@ -32,20 +31,27 @@
29 objectName: "nowPlayingPage"
30 title: i18n.tr("Now Playing")
31 visible: false
32+ onVisibleChanged: {
33+ if (!visible) {
34+ // Reset the isListView property
35+ // TODO: In the future this will default to false
36+ isListView = true
37+ }
38+ }
39
40 property int ensureVisibleIndex: 0 // ensure first index is visible at startup
41-
42- Rectangle {
43- anchors.fill: parent
44- color: styleMusic.nowPlaying.backgroundColor
45- opacity: 0.75 // change later
46- MouseArea { // Block events to lower layers
47- anchors.fill: parent
48- }
49- }
50-
51- Component.onCompleted: {
52- onToolbarShownChanged.connect(jumpToCurrent)
53+ property bool isListView: true
54+
55+ head {
56+ actions: [
57+ Action {
58+ objectName: "toggleView"
59+ iconName: "media-playlist"
60+ onTriggered: {
61+ isListView = !isListView
62+ }
63+ }
64+ ]
65 }
66
67 Connections {
68@@ -77,14 +83,302 @@
69
70 function positionAt(index) {
71 queuelist.positionViewAtIndex(index, ListView.Beginning);
72- queuelist.contentY -= header.height;
73+ }
74+
75+ Rectangle {
76+ id: fullview
77+ visible: !isListView
78+ anchors.fill: parent
79+ color: "transparent"
80+ clip: true
81+
82+ BlurredBackground {
83+ id: blurredBackground
84+ anchors.top: parent.top
85+ anchors.topMargin: mainView.header.height
86+ height: units.gu(27)
87+ art: albumImage.source
88+
89+ Image {
90+ id: albumImage
91+ anchors.centerIn: parent
92+ width: units.gu(18)
93+ height: width
94+ smooth: true
95+ source: player.currentMetaArt === "" ?
96+ decodeURIComponent("image://albumart/artist=" +
97+ player.currentMetaArtist +
98+ "&album=" + player.currentMetaAlbum)
99+ : player.currentMetaArt
100+ }
101+ }
102+
103+ /* Full toolbar */
104+ Item {
105+ id: musicToolbarFullContainer
106+ anchors.top: blurredBackground.bottom
107+ anchors.topMargin: units.gu(4)
108+ width: blurredBackground.width
109+
110+ /* Column for labels in wideAspect */
111+ Column {
112+ id: nowPlayingWideAspectLabels
113+ spacing: units.gu(1)
114+ anchors {
115+ left: parent.left
116+ leftMargin: units.gu(2)
117+ right: parent.right
118+ rightMargin: units.gu(2)
119+ }
120+
121+ /* Title of track */
122+ Label {
123+ id: nowPlayingWideAspectTitle
124+ anchors {
125+ left: parent.left
126+ leftMargin: units.gu(1)
127+ right: parent.right
128+ rightMargin: units.gu(1)
129+ }
130+ color: styleMusic.playerControls.labelColor
131+ elide: Text.ElideRight
132+ fontSize: "x-large"
133+ objectName: "playercontroltitle"
134+ text: trackQueue.model.count === 0 ? "" : player.currentMetaTitle === "" ? player.currentMetaFile : player.currentMetaTitle
135+ }
136+
137+ /* Artist of track */
138+ Label {
139+ id: nowPlayingWideAspectArtist
140+ anchors {
141+ left: parent.left
142+ leftMargin: units.gu(1)
143+ right: parent.right
144+ rightMargin: units.gu(1)
145+ }
146+ color: styleMusic.nowPlaying.labelSecondaryColor
147+ elide: Text.ElideRight
148+ fontSize: "small"
149+ text: trackQueue.model.count === 0 ? "" : player.currentMetaArtist
150+ }
151+ }
152+
153+ /* Progress bar component */
154+ MouseArea {
155+ id: musicToolbarFullProgressContainer
156+ anchors.left: parent.left
157+ anchors.leftMargin: units.gu(3)
158+ anchors.right: parent.right
159+ anchors.rightMargin: units.gu(3)
160+ anchors.top: nowPlayingWideAspectLabels.bottom
161+ anchors.topMargin: units.gu(3)
162+ height: units.gu(3)
163+ width: parent.width
164+
165+ /* Position label */
166+ Label {
167+ id: musicToolbarFullPositionLabel
168+ anchors.top: progressSliderMusic.bottom
169+ anchors.topMargin: units.gu(-2)
170+ anchors.left: parent.left
171+ color: styleMusic.nowPlaying.labelSecondaryColor
172+ fontSize: "small"
173+ height: parent.height
174+ horizontalAlignment: Text.AlignHCenter
175+ text: durationToString(player.position)
176+ verticalAlignment: Text.AlignVCenter
177+ width: units.gu(3)
178+ }
179+
180+ Slider {
181+ id: progressSliderMusic
182+ anchors.left: parent.left
183+ anchors.right: parent.right
184+ function formatValue(v) { return durationToString(v) }
185+
186+ property bool seeking: false
187+
188+ onSeekingChanged: {
189+ if (seeking === false) {
190+ musicToolbarFullPositionLabel.text = durationToString(player.position)
191+ }
192+ }
193+
194+ Component.onCompleted: {
195+ Theme.palette.selected.foreground = UbuntuColors.blue
196+ }
197+
198+ onPressedChanged: {
199+ seeking = pressed
200+ if (!pressed) {
201+ player.seek(value)
202+ }
203+ }
204+
205+ Connections {
206+ target: player
207+ onDurationChanged: {
208+ musicToolbarFullDurationLabel.text = durationToString(player.duration)
209+ progressSliderMusic.maximumValue = player.duration
210+ }
211+ onPositionChanged: {
212+ if (progressSliderMusic.seeking === false) {
213+ progressSliderMusic.value = player.position
214+ musicToolbarFullPositionLabel.text = durationToString(player.position)
215+ musicToolbarFullDurationLabel.text = durationToString(player.duration)
216+ }
217+ }
218+ onStopped: {
219+ musicToolbarFullPositionLabel.text = durationToString(0);
220+ musicToolbarFullDurationLabel.text = durationToString(0);
221+ }
222+ }
223+ }
224+
225+ /* Duration label */
226+ Label {
227+ id: musicToolbarFullDurationLabel
228+ anchors.top: progressSliderMusic.bottom
229+ anchors.topMargin: units.gu(-2)
230+ anchors.right: parent.right
231+ color: styleMusic.nowPlaying.labelSecondaryColor
232+ fontSize: "small"
233+ height: parent.height
234+ horizontalAlignment: Text.AlignHCenter
235+ text: durationToString(player.duration)
236+ verticalAlignment: Text.AlignVCenter
237+ width: units.gu(3)
238+ }
239+ }
240+
241+ /* Repeat button */
242+ MouseArea {
243+ id: nowPlayingRepeatButton
244+ objectName: "repeatShape"
245+ anchors.right: nowPlayingPreviousButton.left
246+ anchors.rightMargin: units.gu(1)
247+ anchors.verticalCenter: nowPlayingPlayButton.verticalCenter
248+ height: units.gu(6)
249+ opacity: player.repeat && !emptyPage.noMusic ? 1 : .4
250+ width: height
251+ onClicked: player.repeat = !player.repeat
252+
253+ Icon {
254+ id: repeatIcon
255+ height: units.gu(3)
256+ width: height
257+ anchors.verticalCenter: parent.verticalCenter
258+ anchors.horizontalCenter: parent.horizontalCenter
259+ color: "white"
260+ name: "media-playlist-repeat"
261+ opacity: player.repeat && !emptyPage.noMusic ? 1 : .4
262+ }
263+ }
264+
265+ /* Previous button */
266+ MouseArea {
267+ id: nowPlayingPreviousButton
268+ anchors.right: nowPlayingPlayButton.left
269+ anchors.rightMargin: units.gu(1)
270+ anchors.verticalCenter: nowPlayingPlayButton.verticalCenter
271+ height: units.gu(6)
272+ objectName: "previousShape"
273+ opacity: trackQueue.model.count === 0 ? .4 : 1
274+ width: height
275+ onClicked: player.previousSong()
276+
277+ Icon {
278+ id: nowPlayingPreviousIndicator
279+ height: units.gu(3)
280+ width: height
281+ anchors.verticalCenter: parent.verticalCenter
282+ anchors.horizontalCenter: parent.horizontalCenter
283+ color: "white"
284+ name: "media-skip-backward"
285+ opacity: 1
286+ }
287+ }
288+
289+ /* Play/Pause button */
290+ MouseArea {
291+ id: nowPlayingPlayButton
292+ anchors.horizontalCenter: parent.horizontalCenter
293+ anchors.top: musicToolbarFullProgressContainer.bottom
294+ anchors.topMargin: units.gu(2)
295+ height: units.gu(12)
296+ objectName: "playShape"
297+ width: height
298+ onClicked: player.toggle()
299+
300+ Icon {
301+ id: nowPlayingPlayIndicator
302+ height: units.gu(6)
303+ width: height
304+ anchors.verticalCenter: parent.verticalCenter
305+ anchors.horizontalCenter: parent.horizontalCenter
306+ opacity: emptyPage.noMusic ? .4 : 1
307+ color: "white"
308+ name: player.playbackState === MediaPlayer.PlayingState ? "media-playback-pause" : "media-playback-start"
309+ }
310+ }
311+
312+ /* Next button */
313+ MouseArea {
314+ id: nowPlayingNextButton
315+ anchors.left: nowPlayingPlayButton.right
316+ anchors.leftMargin: units.gu(1)
317+ anchors.verticalCenter: nowPlayingPlayButton.verticalCenter
318+ height: units.gu(6)
319+ objectName: "forwardShape"
320+ opacity: trackQueue.model.count === 0 ? .4 : 1
321+ width: height
322+ onClicked: player.nextSong()
323+
324+ Icon {
325+ id: nowPlayingNextIndicator
326+ height: units.gu(3)
327+ width: height
328+ anchors.verticalCenter: parent.verticalCenter
329+ anchors.horizontalCenter: parent.horizontalCenter
330+ color: "white"
331+ name: "media-skip-forward"
332+ opacity: 1
333+ }
334+ }
335+
336+ /* Shuffle button */
337+ MouseArea {
338+ id: nowPlayingShuffleButton
339+ objectName: "shuffleShape"
340+ anchors.left: nowPlayingNextButton.right
341+ anchors.leftMargin: units.gu(1)
342+ anchors.verticalCenter: nowPlayingPlayButton.verticalCenter
343+ height: units.gu(6)
344+ opacity: player.shuffle && !emptyPage.noMusic ? 1 : .4
345+ width: height
346+ onClicked: player.shuffle = !player.shuffle
347+
348+ Icon {
349+ id: shuffleIcon
350+ height: units.gu(3)
351+ width: height
352+ anchors.verticalCenter: parent.verticalCenter
353+ anchors.horizontalCenter: parent.horizontalCenter
354+ color: "white"
355+ name: "media-playlist-shuffle"
356+ opacity: player.shuffle && !emptyPage.noMusic ? 1 : .4
357+ }
358+ }
359+ }
360 }
361
362 ListView {
363 id: queuelist
364+ visible: isListView
365 objectName: "nowPlayingQueueList"
366- anchors.fill: parent
367- anchors.bottomMargin: musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
368+ anchors {
369+ fill: parent
370+ }
371 delegate: queueDelegate
372 model: trackQueue.model
373 highlightFollowsCurrentItem: false
374@@ -117,10 +411,6 @@
375 customdebug("Queue: Now has: " + queuelist.count + " tracks")
376 }
377
378- onMovementStarted: {
379- musicToolbar.hideToolbar();
380- }
381-
382 Component {
383 id: queueDelegate
384 ListItemWithActions {
385@@ -218,7 +508,7 @@
386 ? queuelist.currentHeight
387 : mainView.width - (trackImage.anchors.leftMargin * 2))
388 : queuelist.normalHeight) - units.gu(2)
389- covers: [{art: model.art}]
390+ covers: [{art: model.art, album: model.album, author: model.author}]
391
392 spacing: units.gu(2)
393
394
395=== modified file 'MusicPlaylists.qml'
396--- MusicPlaylists.qml 2014-09-20 10:50:45 +0000
397+++ MusicPlaylists.qml 2014-10-04 17:07:09 +0000
398@@ -116,8 +116,9 @@
399 ListView {
400 id: playlistslist
401 objectName: "playlistsListView"
402- anchors.fill: parent
403- anchors.bottomMargin: musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
404+ anchors {
405+ fill: parent
406+ }
407 model: playlistModel.model
408 delegate: playlistDelegate
409 onCountChanged: {
410
411=== modified file 'MusicSettings.qml'
412--- MusicSettings.qml 2014-09-20 10:50:45 +0000
413+++ MusicSettings.qml 2014-10-04 17:07:09 +0000
414@@ -30,17 +30,6 @@
415 title: i18n.tr("Settings")
416 contentsHeight: parent.height;
417
418- onVisibleChanged: {
419- if (visible === true)
420- {
421- musicToolbar.disableToolbar()
422- }
423- else
424- {
425- musicToolbar.enableToolbar()
426- }
427- }
428-
429 onCancelClicked: PopupUtils.close(musicSettings)
430 onConfirmClicked: {
431 PopupUtils.close(musicSettings)
432
433=== modified file 'MusicToolbar.qml'
434--- MusicToolbar.qml 2014-09-23 20:45:41 +0000
435+++ MusicToolbar.qml 2014-10-04 17:07:09 +0000
436@@ -43,7 +43,6 @@
437 property int transitionDuration: 100
438
439 property alias currentHeight: musicToolbarPanel.height
440- property alias minimizedHeight: musicToolbarPanel.minimizedHeight
441 property alias expandedHeight: musicToolbarPanel.expandedHeight
442 property alias fullHeight: musicToolbarPanel.fullHeight
443 property alias mouseAreaOffset: musicToolbarPanel.hintSize
444@@ -72,22 +71,6 @@
445
446 /* Helper functions */
447
448- // Disable the toolbar for this page/view (eg a dialog)
449- function disableToolbar()
450- {
451- cachedStates.push(state);
452- musicToolbarPanel.state = "hidden";
453- }
454-
455- // Enable the toolbar (run when closing a page that disabled it)
456- function enableToolbar()
457- {
458- if (cachedStates.length > 0)
459- {
460- musicToolbarPanel.state = cachedStates.pop();
461- }
462- }
463-
464 // Back button has been pressed, jump up pageStack or back to parent page
465 function goBack()
466 {
467@@ -98,18 +81,6 @@
468 else if (mainPageStack !== null && mainPageStack.depth > 1) {
469 mainPageStack.pop(currentPage)
470 }
471-
472- startAutohideTimer()
473- }
474-
475- // Hide the toolbar
476- function hideToolbar()
477- {
478- if (!wideAspect) {
479- musicToolbarPanel.close();
480- }
481-
482- toolbarAutoHideTimer.stop(); // cancel any autohide
483 }
484
485 // Remove sheet as it has been closed
486@@ -135,32 +106,6 @@
487 currentSheet.push(sheet)
488 }
489
490- // Show the toolbar
491- function showToolbar()
492- {
493- startAutohideTimer(); // always attempt to autohide toolbar
494-
495- if (!musicToolbarPanel.opened) {
496- musicToolbarPanel.open();
497- }
498- }
499-
500- // Start the autohidetimer
501- function startAutohideTimer()
502- {
503- toolbarAutoHideTimer.restart();
504- }
505-
506- Connections {
507- target: mainView
508- onWideAspectChanged: {
509- // Force toolbar to show if in wideAspect
510- if (wideAspect && !opened) {
511- showToolbar();
512- }
513- }
514- }
515-
516 Panel {
517 id: musicToolbarPanel
518 anchors {
519@@ -168,32 +113,25 @@
520 right: parent.right
521 bottom: parent.bottom
522 }
523- height: currentMode === "full" ? fullHeight : expandedHeight
524- locked: wideAspect
525-
526- __closeOnContentsClicks: false // TODO: fix bug 1295720
527-
528+ // TODO: this will be removed when the toolbar is redone
529+ height: currentMode === "hidden" ? 0 : (currentMode === "full" ? fullHeight : expandedHeight)
530+ locked: true
531+ opened: true
532+
533+ // TODO: this will be removed when the toolbar is redone
534 // The current mode of the controls
535- property string currentMode: wideAspect || (currentPage === nowPlaying)
536- ? "full" : "expanded"
537+ property string currentMode: !nowPlaying.isListView && currentPage === nowPlaying
538+ ? "hidden" : (wideAspect || currentPage === nowPlaying
539+ ? "full" : "expanded")
540
541 // Properties for the different heights
542- property int minimizedHeight: units.gu(0.5)
543- property int expandedHeight: units.gu(8)
544+ property int expandedHeight: units.gu(7.25)
545 property int fullHeight: units.gu(11)
546
547 onCurrentModeChanged: {
548 musicToolbarFullProgressMouseArea.enabled = currentMode === "full"
549 }
550
551- onOpenedChanged: {
552- onToolbarShownChanged(opened, currentPage, currentTab);
553-
554- if (opened) {
555- startAutohideTimer();
556- }
557- }
558-
559 /* Full toolbar */
560 Rectangle {
561 id: musicToolbarFullContainer
562@@ -717,8 +655,10 @@
563
564 Rectangle {
565 id: musicToolbarPlayerControls
566- anchors.fill: parent
567- color: styleMusic.playerControls.backgroundColor
568+ anchors {
569+ fill: parent
570+ }
571+ color: "#000"
572 state: trackQueue.model.count === 0 ? "disabled" : "enabled"
573 states: [
574 State {
575@@ -745,39 +685,55 @@
576 }
577 ]
578
579+ /* Disabled (empty state) controls */
580 Rectangle {
581 id: disabledPlayerControlsGroup
582- anchors.fill: parent
583+ anchors {
584+ bottom: playerControlsProgressBar.top
585+ left: parent.left
586+ right: parent.right
587+ top: parent.top
588+ }
589 color: "transparent"
590- visible: trackQueue.model.count === 0
591
592 Label {
593 id: noSongsInQueueLabel
594 anchors {
595 left: parent.left
596+ leftMargin: units.gu(2)
597 right: disabledPlayerControlsPlayButton.left
598- margins: units.gu(1)
599- top: parent.top
600+ rightMargin: units.gu(2)
601+ verticalCenter: parent.verticalCenter
602 }
603 color: styleMusic.playerControls.labelColor
604- text: i18n.tr("Tap play to shuffle music")
605+ text: i18n.tr("Tap to shuffle music")
606 fontSize: "large"
607 wrapMode: Text.WordWrap
608 maximumLineCount: 2
609 }
610
611- Rectangle {
612+ /* Play/Pause button */
613+ Icon {
614 id: disabledPlayerControlsPlayButton
615- anchors.right: parent.right
616- anchors.rightMargin: units.gu(1)
617- anchors.verticalCenter: parent.verticalCenter
618- antialiasing: true
619- color: "#444"
620- height: units.gu(7)
621- radius: height / 2
622+ anchors {
623+ right: parent.right
624+ rightMargin: units.gu(3)
625+ verticalCenter: parent.verticalCenter
626+ }
627+ color: "#FFF"
628+ height: units.gu(2.5)
629+ name: player.playbackState === MediaPlayer.PlayingState ?
630+ "media-playback-pause" : "media-playback-start"
631+ objectName: "disabledSmallPlayShape"
632 width: height
633+ }
634
635- function trigger() {
636+ /* Click to shuffle music */
637+ MouseArea {
638+ anchors {
639+ fill: parent
640+ }
641+ onClicked: {
642 if (emptyPage.noMusic) {
643 return;
644 }
645@@ -789,230 +745,65 @@
646 player.toggle();
647 }
648 }
649-
650- // draws the outer shadow/highlight
651- Rectangle {
652- id: disabledSourceOutter
653- anchors { fill: parent; margins: -units.gu(0.1) }
654- radius: (width / 2)
655- antialiasing: true
656- gradient: Gradient {
657- GradientStop { position: 0.0; color: "black" }
658- GradientStop { position: 0.5; color: "transparent" }
659- GradientStop { position: 1.0; color: UbuntuColors.warmGrey }
660- }
661-
662- Rectangle {
663- anchors.verticalCenter: parent.verticalCenter
664- anchors.horizontalCenter: parent.horizontalCenter
665- antialiasing: true
666- color: "#444"
667- height: playerControlsPlayButton.height - units.gu(.1)
668- radius: height / 2
669- width: height
670-
671- Rectangle {
672- id: disabledPlayerControlsPlayInnerCircle
673- anchors.horizontalCenter: parent.horizontalCenter
674- anchors.verticalCenter: parent.verticalCenter
675- antialiasing: true
676- height: units.gu(4.5)
677- radius: height / 2
678- width: height
679- color: styleMusic.toolbar.fullInnerPlayCircleColor
680-
681- // draws the inner shadow/highlight
682- Rectangle {
683- id: disabledSourceInner
684- anchors { fill: parent; margins: -units.gu(0.1) }
685- radius: (width / 2)
686- antialiasing: true
687- gradient: Gradient {
688- GradientStop { position: 0.0; color: UbuntuColors.warmGrey }
689- GradientStop { position: 0.5; color: "transparent" }
690- GradientStop { position: 1.0; color: "black" }
691- }
692-
693- Rectangle {
694- anchors.verticalCenter: parent.verticalCenter
695- anchors.horizontalCenter: parent.horizontalCenter
696- antialiasing: true
697- height: playerControlsPlayInnerCircle.height - units.gu(.1)
698- radius: height / 2
699- width: height
700- color: styleMusic.toolbar.fullInnerPlayCircleColor
701-
702- Image {
703- id: disabledPlayIndicator
704- height: units.gu(4)
705- width: height
706- anchors.horizontalCenter: parent.horizontalCenter
707- anchors.verticalCenter: parent.verticalCenter
708- opacity: emptyPage.noMusic ? .4 : 1
709- source: player.playbackState === MediaPlayer.PlayingState ?
710- Qt.resolvedUrl("images/media-playback-pause.svg") : Qt.resolvedUrl("images/media-playback-start.svg")
711- }
712- }
713- }
714- }
715- }
716- }
717 }
718 }
719
720+ /* Enabled (queue > 0) controls */
721 Rectangle {
722 id: enabledPlayerControlsGroup
723- anchors.fill: parent
724+ anchors {
725+ bottom: playerControlsProgressBar.top
726+ left: parent.left
727+ right: parent.right
728+ top: parent.top
729+ }
730 color: "transparent"
731- visible: trackQueue.model.count !== 0
732-
733- /* Settings button */
734- // TODO: Enable settings when it is practical
735- /* Rectangle {
736- id: playerControlsSettings
737- anchors.right: parent.right
738- anchors.verticalCenter: parent.verticalCenter
739- width: units.gu(6)
740- height: width
741- color: "transparent"
742-
743- Image {
744- anchors.horizontalCenter: parent.horizontalCenter
745- anchors.verticalCenter: parent.verticalCenter
746- height: units.gu(3)
747- source: Qt.resolvedUrl("images/settings.png")
748- width: height
749- }
750-
751- MouseArea {
752- anchors.fill: parent
753- onClicked: {
754- console.debug('Debug: Show settings')
755- PopupUtils.open(Qt.resolvedUrl("MusicSettings.qml"), mainView,
756- {
757- title: i18n.tr("Settings")
758- } )
759- }
760- }
761- } */
762-
763- /* Play/Pause button TODO: image and colours needs updating */
764- Rectangle {
765- id: playerControlsPlayButton
766- anchors.right: parent.right
767- anchors.rightMargin: units.gu(1)
768- anchors.verticalCenter: parent.verticalCenter
769- antialiasing: true
770- color: "#444"
771- height: units.gu(7)
772- objectName: "smallPlayShape"
773- radius: height / 2
774- width: height
775-
776- function trigger() {
777- if (emptyPage.noMusic) {
778- return;
779- }
780-
781- if (trackQueue.model.count === 0) {
782- playRandomSong();
783- }
784- else {
785- player.toggle();
786- }
787- }
788-
789- // draws the outer shadow/highlight
790- Rectangle {
791- id: sourceOutter
792- anchors { fill: parent; margins: -units.gu(0.1) }
793- radius: (width / 2)
794- antialiasing: true
795- gradient: Gradient {
796- GradientStop { position: 0.0; color: "black" }
797- GradientStop { position: 0.5; color: "transparent" }
798- GradientStop { position: 1.0; color: UbuntuColors.warmGrey }
799- }
800-
801- Rectangle {
802- anchors.verticalCenter: parent.verticalCenter
803- anchors.horizontalCenter: parent.horizontalCenter
804- antialiasing: true
805- color: "#444"
806- height: playerControlsPlayButton.height - units.gu(.1)
807- radius: height / 2
808- width: height
809-
810- Rectangle {
811- id: playerControlsPlayInnerCircle
812- anchors.horizontalCenter: parent.horizontalCenter
813- anchors.verticalCenter: parent.verticalCenter
814- antialiasing: true
815- height: units.gu(4.5)
816- radius: height / 2
817- width: height
818- color: styleMusic.toolbar.fullInnerPlayCircleColor
819-
820- // draws the inner shadow/highlight
821- Rectangle {
822- id: sourceInner
823- anchors { fill: parent; margins: -units.gu(0.1) }
824- radius: (width / 2)
825- antialiasing: true
826- gradient: Gradient {
827- GradientStop { position: 0.0; color: UbuntuColors.warmGrey }
828- GradientStop { position: 0.5; color: "transparent" }
829- GradientStop { position: 1.0; color: "black" }
830- }
831-
832- Rectangle {
833- anchors.verticalCenter: parent.verticalCenter
834- anchors.horizontalCenter: parent.horizontalCenter
835- antialiasing: true
836- height: playerControlsPlayInnerCircle.height - units.gu(.1)
837- radius: height / 2
838- width: height
839- color: styleMusic.toolbar.fullInnerPlayCircleColor
840-
841- Image {
842- id: playindicator
843- height: units.gu(4)
844- width: height
845- anchors.horizontalCenter: parent.horizontalCenter
846- anchors.verticalCenter: parent.verticalCenter
847- opacity: emptyPage.noMusic ? .4 : 1
848- source: player.playbackState === MediaPlayer.PlayingState ?
849- Qt.resolvedUrl("images/media-playback-pause.svg") : Qt.resolvedUrl("images/media-playback-start.svg")
850- }
851- }
852- }
853- }
854+
855+ /* Album art in player controls */
856+ Image {
857+ id: playerControlsImage
858+ anchors {
859+ bottom: parent.bottom
860+ left: parent.left
861+ top: parent.top
862+ }
863+ smooth: true
864+ source: player.currentMetaArt === "" ?
865+ decodeURIComponent("image://albumart/artist=" +
866+ player.currentMetaArtist +
867+ "&album=" + player.currentMetaAlbum)
868+ : player.currentMetaArt
869+ width: parent.height
870+
871+ onStatusChanged: {
872+ if (status === Image.Error) {
873+ source = Qt.resolvedUrl("../images/music-app-cover@30.png")
874 }
875 }
876 }
877
878- /* Container holding the labels for the toolbar */
879- Rectangle {
880- id: playerControlLabelContainer
881- anchors.bottom: parent.bottom
882- anchors.left: parent.left
883- anchors.right: playerControlsPlayButton.left
884- anchors.top: parent.top
885- color: "transparent"
886+ /* Column of meta labels */
887+ Column {
888+ id: playerControlsLabels
889+ anchors {
890+ left: playerControlsImage.right
891+ leftMargin: units.gu(1.5)
892+ right: playerControlsPlayButton.left
893+ rightMargin: units.gu(1)
894+ verticalCenter: parent.verticalCenter
895+ }
896
897 /* Title of track */
898 Label {
899 id: playerControlsTitle
900- anchors.left: parent.left
901- anchors.leftMargin: units.gu(1)
902- anchors.right: parent.right
903- anchors.rightMargin: units.gu(1)
904- anchors.top: parent.top
905- anchors.topMargin: units.gu(1)
906- color: styleMusic.playerControls.labelColor
907+ anchors {
908+ left: parent.left
909+ right: parent.right
910+ }
911+ color: "#FFF"
912 elide: Text.ElideRight
913- fontSize: "medium"
914- objectName: "playercontroltitle"
915+ fontSize: "small"
916+ font.weight: Font.DemiBold
917 text: player.currentMetaTitle === ""
918 ? player.source : player.currentMetaTitle
919 }
920@@ -1020,72 +811,103 @@
921 /* Artist of track */
922 Label {
923 id: playerControlsArtist
924- anchors.left: parent.left
925- anchors.leftMargin: units.gu(1)
926- anchors.right: parent.right
927- anchors.rightMargin: units.gu(1)
928- anchors.top: playerControlsTitle.bottom
929- color: styleMusic.playerControls.labelColor
930+ anchors {
931+ left: parent.left
932+ right: parent.right
933+ }
934+ color: "#FFF"
935 elide: Text.ElideRight
936 fontSize: "small"
937+ opacity: 0.4
938 text: player.currentMetaArtist
939 }
940-
941- /* Album of track */
942- Label {
943- id: playerControlsAlbum
944- anchors.left: parent.left
945- anchors.leftMargin: units.gu(1)
946- anchors.right: parent.right
947- anchors.rightMargin: units.gu(1)
948- anchors.top: playerControlsArtist.bottom
949- color: styleMusic.playerControls.labelColor
950- elide: Text.ElideRight
951- fontSize: "small"
952- text: player.currentMetaAlbum
953- }
954- }
955-
956+ }
957+
958+ /* Play/Pause button */
959+ Icon {
960+ id: playerControlsPlayButton
961+ anchors {
962+ right: parent.right
963+ rightMargin: units.gu(3)
964+ verticalCenter: parent.verticalCenter
965+ }
966+ color: "#FFF"
967+ height: units.gu(2.5)
968+ name: player.playbackState === MediaPlayer.PlayingState ?
969+ "media-playback-pause" : "media-playback-start"
970+ objectName: "smallPlayShape"
971+ width: height
972+ }
973+
974+ MouseArea {
975+ anchors {
976+ bottom: parent.bottom
977+ horizontalCenter: playerControlsPlayButton.horizontalCenter
978+ top: parent.top
979+ }
980+ onClicked: player.toggle()
981+ width: units.gu(8)
982+
983+ Rectangle {
984+ anchors {
985+ fill: parent
986+ }
987+ color: "#FFF"
988+ opacity: parent.pressed ? 0.1 : 0
989+
990+ Behavior on opacity {
991+ UbuntuNumberAnimation {
992+ duration: UbuntuAnimation.FastDuration
993+ }
994+ }
995+ }
996+ }
997+
998+ /* Mouse area to jump to now playing */
999 Rectangle {
1000- anchors.fill: playerControlLabelContainer
1001+ anchors {
1002+ bottom: parent.bottom
1003+ left: parent.left
1004+ right: playerControlsLabels.right
1005+ top: parent.top
1006+ }
1007 color: "transparent"
1008 function trigger() {
1009 tabs.pushNowPlaying();
1010 }
1011 }
1012 }
1013- }
1014- }
1015-
1016- /* Object which provides the progress bar when toolbar is minimized */
1017- Rectangle {
1018- id: musicToolbarSmallProgressBackground
1019- anchors {
1020- bottom: parent.top
1021- left: parent.left
1022- right: parent.right
1023- }
1024- color: styleMusic.common.black
1025- height: musicToolbarPanel.minimizedHeight
1026- visible: (!musicToolbarPanel.animating &&
1027- !musicToolbarPanel.opened)
1028- || musicToolbarPanel.currentMode == "expanded"
1029-
1030- Rectangle {
1031- id: musicToolbarSmallProgressHint
1032- anchors.left: parent.left
1033- anchors.top: parent.top
1034- color: styleMusic.nowPlaying.progressForegroundColor
1035- height: parent.height
1036- width: 0
1037-
1038- Connections {
1039- target: player
1040- onPositionChanged: {
1041- musicToolbarSmallProgressHint.width = (player.position / player.duration) * musicToolbarSmallProgressBackground.width
1042+
1043+ /* Object which provides the progress bar when toolbar is minimized */
1044+ Rectangle {
1045+ id: playerControlsProgressBar
1046+ anchors {
1047+ bottom: parent.bottom
1048+ left: parent.left
1049+ right: parent.right
1050 }
1051- onStopped: {
1052- musicToolbarSmallProgressHint.width = 0;
1053+ color: styleMusic.common.black
1054+ height: units.gu(0.25)
1055+
1056+ Rectangle {
1057+ id: playerControlsProgressBarHint
1058+ anchors {
1059+ left: parent.left
1060+ top: parent.top
1061+ }
1062+ color: UbuntuColors.blue
1063+ height: parent.height
1064+ width: 0
1065+
1066+ Connections {
1067+ target: player
1068+ onPositionChanged: {
1069+ playerControlsProgressBarHint.width = (player.position / player.duration) * playerControlsProgressBar.width
1070+ }
1071+ onStopped: {
1072+ playerControlsProgressBarHint.width = 0;
1073+ }
1074+ }
1075 }
1076 }
1077 }
1078@@ -1123,19 +945,6 @@
1079 musicToolbarFullProgressBarContainer.seeking = false;
1080 }
1081 }
1082-
1083- // Timer for autohide
1084- Timer {
1085- id: toolbarAutoHideTimer
1086- interval: 5000
1087- repeat: false
1088- running: false
1089- onTriggered: {
1090- if (currentPage !== nowPlaying) { // don't autohide on now playing
1091- hideToolbar();
1092- }
1093- }
1094- }
1095 }
1096 }
1097
1098
1099=== modified file 'MusicTracks.qml'
1100--- MusicTracks.qml 2014-09-20 15:41:33 +0000
1101+++ MusicTracks.qml 2014-10-04 17:07:09 +0000
1102@@ -36,8 +36,9 @@
1103
1104 ListView {
1105 id: tracklist
1106- anchors.fill: parent
1107- anchors.bottomMargin: musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
1108+ anchors {
1109+ fill: parent
1110+ }
1111 highlightFollowsCurrentItem: false
1112 objectName: "trackstab-listview"
1113 model: SortFilterModel {
1114
1115=== modified file 'MusicaddtoPlaylist.qml'
1116--- MusicaddtoPlaylist.qml 2014-09-20 10:50:45 +0000
1117+++ MusicaddtoPlaylist.qml 2014-10-04 17:07:09 +0000
1118@@ -65,7 +65,6 @@
1119 ListView {
1120 id: addtoPlaylistView
1121 anchors {
1122- bottomMargin: musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
1123 fill: parent
1124 }
1125 clip: true
1126
1127=== modified file 'Player.qml'
1128--- Player.qml 2014-09-20 15:41:33 +0000
1129+++ Player.qml 2014-10-04 17:07:09 +0000
1130@@ -187,7 +187,11 @@
1131 else {
1132 var obj = trackQueue.model.get(player.currentIndex);
1133 currentMetaAlbum = obj.album;
1134- currentMetaArt = obj.art;
1135+
1136+ if (obj.art !== undefined) { // FIXME: protect against not art property in playlists
1137+ currentMetaArt = obj.art;
1138+ }
1139+
1140 currentMetaArtist = obj.author;
1141 currentMetaFile = obj.filename;
1142 currentMetaTitle = obj.title;
1143
1144=== modified file 'Style.qml'
1145--- Style.qml 2014-09-20 10:50:45 +0000
1146+++ Style.qml 2014-10-04 17:07:09 +0000
1147@@ -34,8 +34,8 @@
1148 property QtObject common: QtObject {
1149 property color black: "#000000";
1150 property color white: "#FFFFFF";
1151- property color music: "#333333";
1152- property color subtitle: "#666666";
1153+ property color music: "#FFFFFF";
1154+ property color subtitle: "#999999";
1155 property color expandedColor: "#000000";
1156 property int albumSize: units.gu(10);
1157 property int itemHeight: units.gu(12);
1158
1159=== modified file 'common/AlbumsPage.qml'
1160--- common/AlbumsPage.qml 2014-09-20 15:41:33 +0000
1161+++ common/AlbumsPage.qml 2014-10-04 17:07:09 +0000
1162@@ -28,7 +28,6 @@
1163
1164 MusicPage {
1165 id: albumStackPage
1166- anchors.bottomMargin: units.gu(.5)
1167 objectName: "albumsArtistPage"
1168 visible: false
1169
1170@@ -38,7 +37,6 @@
1171 ListView {
1172 id: albumtrackslist
1173 anchors {
1174- bottomMargin: wideAspect ? musicToolbar.fullHeight : musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
1175 fill: parent
1176 }
1177 delegate: albumTracksDelegate
1178
1179=== modified file 'common/BlurredBackground.qml'
1180--- common/BlurredBackground.qml 2014-09-20 15:41:33 +0000
1181+++ common/BlurredBackground.qml 2014-10-04 17:07:09 +0000
1182@@ -23,8 +23,14 @@
1183
1184 // Blurred background
1185 Rectangle {
1186- anchors.fill: parent
1187- property string art: player.currentMetaFile === "" ? Qt.resolvedUrl("../images/music-app-cover@30.png") : player.currentMetaArt
1188+ width: parent.width
1189+ property string art // : player.currentMetaFile === "" ? Qt.resolvedUrl("../images/music-app-cover@30.png") : player.currentMetaArt
1190+
1191+ // dark layer
1192+ Rectangle {
1193+ anchors.fill: parent
1194+ color: "black"
1195+ }
1196
1197 // the album art
1198 Image {
1199@@ -32,7 +38,8 @@
1200 anchors.horizontalCenter: parent.horizontalCenter
1201 anchors.verticalCenter: parent.verticalCenter
1202 source: art // this has to be fixed for the default cover art to work - cant find in this dir
1203- height: Math.max(parent.height, parent.width)
1204+ fillMode: Image.PreserveAspectCrop
1205+ height: parent.height
1206 width: Math.max(parent.height, parent.width)
1207 visible: false
1208 onStatusChanged: {
1209@@ -47,12 +54,7 @@
1210 anchors.fill: backgroundImage
1211 source: backgroundImage
1212 radius: units.dp(42)
1213- }
1214- // transparent white layer
1215- Rectangle {
1216- anchors.fill: parent
1217- color: "white"
1218- opacity: 0.7
1219+ opacity: 0.2
1220 }
1221 onArtChanged: {
1222 // TODO: This is a work around for LP:1261078 and LP:1306845. Ideally,
1223
1224=== modified file 'common/MusicPage.qml'
1225--- common/MusicPage.qml 2014-08-20 17:35:52 +0000
1226+++ common/MusicPage.qml 2014-10-04 17:07:09 +0000
1227@@ -23,6 +23,10 @@
1228 // generic page for music, could be useful for bottomedge implementation
1229 Page {
1230 id: thisPage
1231+ anchors {
1232+ bottomMargin: musicToolbar.currentHeight
1233+ fill: parent
1234+ }
1235
1236 onVisibleChanged: {
1237 if (visible) {
1238
1239=== modified file 'common/MusicRow.qml'
1240--- common/MusicRow.qml 2014-09-20 10:50:45 +0000
1241+++ common/MusicRow.qml 2014-10-04 17:07:09 +0000
1242@@ -24,12 +24,13 @@
1243 Row {
1244 anchors {
1245 left: parent.left
1246- leftMargin: units.gu(1)
1247+ leftMargin: units.gu(2)
1248 right: parent.right
1249- rightMargin: units.gu(1)
1250+ rightMargin: units.gu(2)
1251 }
1252
1253 property alias covers: coverRow.covers
1254+ property bool showCovers: true
1255 property alias pressed: coverRow.pressed
1256 property alias column: columnComponent.sourceComponent
1257
1258@@ -37,6 +38,7 @@
1259
1260 CoverRow {
1261 id: coverRow
1262+ visible: showCovers
1263 anchors {
1264 top: parent.top
1265 topMargin: units.gu(1)
1266@@ -50,7 +52,7 @@
1267 id: columnComponent
1268 anchors {
1269 top: parent.top
1270- topMargin: units.gu(2)
1271+ topMargin: units.gu(1)
1272 }
1273 width: parent.width - coverRow.width - parent.spacing
1274
1275
1276=== modified file 'common/SongsPage.qml'
1277--- common/SongsPage.qml 2014-09-20 15:41:33 +0000
1278+++ common/SongsPage.qml 2014-10-04 17:07:09 +0000
1279@@ -29,7 +29,6 @@
1280
1281 MusicPage {
1282 id: songStackPage
1283- anchors.bottomMargin: units.gu(.5)
1284 objectName: "songsPage"
1285 visible: false
1286
1287@@ -52,7 +51,6 @@
1288 ListView {
1289 id: albumtrackslist
1290 anchors {
1291- bottomMargin: wideAspect ? musicToolbar.fullHeight : musicToolbar.mouseAreaOffset + musicToolbar.minimizedHeight
1292 fill: parent
1293 }
1294 delegate: albumTracksDelegate
1295@@ -61,99 +59,161 @@
1296 width: parent.width
1297 header: ListItem.Standard {
1298 id: albumInfo
1299- height: units.gu(22)
1300-
1301- CoverRow {
1302+ height: albumArtist.visible ? units.gu(33) : units.gu(30)
1303+
1304+ BlurredBackground {
1305+ id: blurredBackground
1306+ height: parent.height
1307+ art: albumImage.source
1308+ }
1309+
1310+ Image {
1311 id: albumImage
1312 anchors {
1313 top: parent.top
1314 left: parent.left
1315- margins: units.gu(1)
1316+ topMargin: units.gu(3)
1317+ bottomMargin: units.gu(2)
1318+ leftMargin: units.gu(2)
1319+ rightMargin: units.gu(2)
1320 }
1321- count: songStackPage.covers.length
1322- size: units.gu(20)
1323- covers: songStackPage.covers
1324- spacing: units.gu(2)
1325+ width: units.gu(18)
1326+ height: width
1327+ smooth: true
1328+ source: covers.length > 0
1329+ ? (covers[0].art !== undefined
1330+ ? covers[0].art
1331+ : decodeURIComponent("image://albumart/artist=" + covers[0].author + "&album=" + covers[0].album))
1332+ : Qt.resolvedUrl("../images/music-app-cover@30.png")
1333 }
1334
1335 Label {
1336- id: albumArtist
1337- objectName: "songsPageHeaderAlbumArtist"
1338- wrapMode: Text.NoWrap
1339- maximumLineCount: 1
1340- fontSize: "small"
1341- color: styleMusic.common.subtitle
1342- anchors.left: albumImage.right
1343- anchors.leftMargin: units.gu(1)
1344- anchors.top: parent.top
1345- anchors.topMargin: units.gu(1.5)
1346- anchors.right: parent.right
1347- anchors.rightMargin: units.gu(1.5)
1348- elide: Text.ElideRight
1349- text: line1
1350- }
1351- Label {
1352 id: albumLabel
1353 wrapMode: Text.NoWrap
1354 maximumLineCount: 2
1355- fontSize: "medium"
1356+ fontSize: "x-large"
1357 color: styleMusic.common.music
1358- anchors.left: albumImage.right
1359- anchors.leftMargin: units.gu(1)
1360- anchors.top: albumArtist.bottom
1361- anchors.topMargin: units.gu(0.8)
1362- anchors.right: parent.right
1363- anchors.rightMargin: units.gu(1.5)
1364+ anchors {
1365+ top: albumImage.bottom
1366+ topMargin: units.gu(1)
1367+ left: albumImage.left
1368+ }
1369 elide: Text.ElideRight
1370 text: line2
1371 }
1372+
1373+ Label {
1374+ id: albumArtist
1375+ objectName: "songsPageHeaderAlbumArtist"
1376+ wrapMode: Text.NoWrap
1377+ maximumLineCount: 1
1378+ fontSize: "small"
1379+ color: styleMusic.common.subtitle
1380+ visible: text !== i18n.tr("Playlist") &&
1381+ text !== i18n.tr("Genre")
1382+ anchors {
1383+ top: albumLabel.bottom
1384+ topMargin: units.gu(0.75)
1385+ left: albumImage.left
1386+ }
1387+ elide: Text.ElideRight
1388+ text: line1
1389+ }
1390+
1391 Label {
1392 id: albumYear
1393 wrapMode: Text.NoWrap
1394 maximumLineCount: 1
1395- fontSize: "x-small"
1396+ fontSize: "small"
1397 color: styleMusic.common.subtitle
1398- anchors.left: albumImage.right
1399- anchors.leftMargin: units.gu(1)
1400- anchors.top: albumLabel.bottom
1401- anchors.topMargin: units.gu(2)
1402- anchors.right: parent.right
1403- anchors.rightMargin: units.gu(1.5)
1404+ anchors {
1405+ top: albumArtist.visible ? albumArtist.bottom
1406+ : albumLabel.bottom
1407+ topMargin: units.gu(1)
1408+ left: albumImage.left
1409+ }
1410 elide: Text.ElideRight
1411 text: isAlbum && line1 !== i18n.tr("Genre") ? year + " | " + i18n.tr("%1 song", "%1 songs", albumtrackslist.count).arg(albumtrackslist.count)
1412 : i18n.tr("%1 song", "%1 songs", albumtrackslist.count).arg(albumtrackslist.count)
1413
1414 }
1415
1416+ // Shuffle
1417+ Button {
1418+ id: shuffleRow
1419+ anchors {
1420+ bottom: queueAllRow.top
1421+ bottomMargin: units.gu(2)
1422+ left: albumImage.right
1423+ leftMargin: units.gu(2)
1424+ }
1425+ strokeColor: UbuntuColors.green
1426+ height: units.gu(4)
1427+ width: units.gu(15)
1428+ Text {
1429+ anchors {
1430+ centerIn: parent
1431+ }
1432+ color: "white"
1433+ text: i18n.tr("Shuffle")
1434+ }
1435+ MouseArea {
1436+ anchors.fill: parent
1437+ onClicked: {
1438+ shuffleModel(albumtrackslist.model) // play track
1439+
1440+ if (isAlbum && songStackPage.line1 !== i18n.tr("Genre")) {
1441+ Library.addRecent(songStackPage.line2, songStackPage.line1, songStackPage.covers[0], songStackPage.line2, "album")
1442+ mainView.hasRecent = true
1443+ recentModel.filterRecent()
1444+ } else if (songStackPage.line1 === i18n.tr("Playlist")) {
1445+ Library.addRecent(songStackPage.line2, "Playlist", songStackPage.covers[0], songStackPage.line2, "playlist")
1446+ mainView.hasRecent = true
1447+ recentModel.filterRecent()
1448+ }
1449+ }
1450+ }
1451+ }
1452+
1453+ // Queue
1454+ Button {
1455+ id: queueAllRow
1456+ anchors {
1457+ bottom: playRow.top
1458+ bottomMargin: units.gu(2)
1459+ left: albumImage.right
1460+ leftMargin: units.gu(2)
1461+ }
1462+ strokeColor: UbuntuColors.green
1463+ height: units.gu(4)
1464+ width: units.gu(15)
1465+ Text {
1466+ anchors {
1467+ centerIn: parent
1468+ }
1469+ color: "white"
1470+ text: i18n.tr("Queue all")
1471+ }
1472+ MouseArea {
1473+ anchors.fill: parent
1474+ onClicked: {
1475+ addQueueFromModel(albumtrackslist.model)
1476+ }
1477+ }
1478+ }
1479+
1480 // Play
1481- Rectangle {
1482+ Button {
1483 id: playRow
1484- anchors.top: albumYear.bottom
1485- anchors.topMargin: units.gu(1)
1486- anchors.left: albumImage.right
1487- anchors.leftMargin: units.gu(1)
1488- color: "transparent"
1489+ anchors {
1490+ bottom: albumImage.bottom
1491+ left: albumImage.right
1492+ leftMargin: units.gu(2)
1493+ }
1494+ color: UbuntuColors.green
1495 height: units.gu(4)
1496 width: units.gu(15)
1497- Icon {
1498- id: playTrack
1499- objectName: "songspage-playtrack"
1500- anchors.verticalCenter: parent.verticalCenter
1501- name: "media-playback-start"
1502- height: styleMusic.common.expandedItem
1503- width: styleMusic.common.expandedItem
1504- }
1505- Label {
1506- anchors.left: playTrack.right
1507- anchors.leftMargin: units.gu(0.5)
1508- anchors.verticalCenter: parent.verticalCenter
1509- fontSize: "small"
1510- color: styleMusic.common.subtitle
1511- width: parent.width - playTrack.width - units.gu(1)
1512- text: i18n.tr("Play all")
1513- wrapMode: Text.WordWrap
1514- maximumLineCount: 3
1515- }
1516+ text: i18n.tr("Play all")
1517 MouseArea {
1518 anchors.fill: parent
1519 onClicked: {
1520@@ -171,43 +231,6 @@
1521 }
1522 }
1523 }
1524-
1525- // Queue
1526- Rectangle {
1527- id: queueAllRow
1528- anchors.top: playRow.bottom
1529- anchors.topMargin: units.gu(1)
1530- anchors.left: albumImage.right
1531- anchors.leftMargin: units.gu(1)
1532- color: "transparent"
1533- height: units.gu(4)
1534- width: units.gu(15)
1535- Icon {
1536- id: queueAll
1537- objectName: "songspage-queue-all"
1538- anchors.verticalCenter: parent.verticalCenter
1539- name: "add"
1540- height: styleMusic.common.expandedItem
1541- width: styleMusic.common.expandedItem
1542- }
1543- Label {
1544- anchors.left: queueAll.right
1545- anchors.leftMargin: units.gu(0.5)
1546- anchors.verticalCenter: parent.verticalCenter
1547- fontSize: "small"
1548- color: styleMusic.common.subtitle
1549- width: parent.width - queueAll.width - units.gu(1)
1550- text: i18n.tr("Add to queue")
1551- wrapMode: Text.WordWrap
1552- maximumLineCount: 3
1553- }
1554- MouseArea {
1555- anchors.fill: parent
1556- onClicked: {
1557- addQueueFromModel(albumtrackslist.model)
1558- }
1559- }
1560- }
1561 }
1562
1563 Component {
1564@@ -219,7 +242,8 @@
1565 objectName: "songsPageListItem" + index
1566 iconFrame: false
1567 progression: false
1568- height: styleMusic.common.itemHeight
1569+ showDivider: false
1570+ height: units.gu(6)
1571
1572 leftSideAction: songStackPage.line1 === i18n.tr("Playlist")
1573 ? playlistRemoveAction.item : null
1574@@ -272,30 +296,23 @@
1575
1576 MusicRow {
1577 id: musicRow
1578- covers: model.art !== undefined ? [{art: model.art}] : [{author: model.author, album: model.album}]
1579+ covers: []
1580+ showCovers: false
1581 column: Column {
1582- spacing: units.gu(1)
1583+ Label {
1584+ id: trackTitle
1585+ color: styleMusic.common.music
1586+ fontSize: "small"
1587+ objectName: "songspage-tracktitle"
1588+ text: model.title
1589+ }
1590+
1591 Label {
1592 id: trackArtist
1593 color: styleMusic.common.subtitle
1594 fontSize: "x-small"
1595 text: model.author
1596 }
1597-
1598- Label {
1599- id: trackTitle
1600- color: styleMusic.common.subtitle
1601- fontSize: "medium"
1602- objectName: "songspage-tracktitle"
1603- text: model.title
1604- }
1605-
1606- Label {
1607- id: trackAlbum
1608- color: styleMusic.common.subtitle
1609- fontSize: "xx-small"
1610- text: model.album
1611- }
1612 }
1613 }
1614
1615
1616=== modified file 'music-app.qml'
1617--- music-app.qml 2014-09-23 15:59:28 +0000
1618+++ music-app.qml 2014-10-04 17:07:09 +0000
1619@@ -40,18 +40,13 @@
1620 id: mainView
1621 useDeprecatedToolbar: false
1622
1623- // Use toolbar color for header
1624- headerColor: styleMusic.toolbar.fullBackgroundColor
1625- backgroundColor: styleMusic.toolbar.fullBackgroundColor
1626+ backgroundColor: "#1e1e23"
1627+ headerColor: "#1e1e23"
1628
1629 // Global keyboard shortcuts
1630 focus: true
1631 Keys.onPressed: {
1632- if (event.key === Qt.Key_Alt) {
1633- // On alt key press show toolbar and start autohide timer
1634- musicToolbar.showToolbar();
1635- }
1636- else if(event.key === Qt.Key_Escape) {
1637+ if(event.key === Qt.Key_Escape) {
1638 musicToolbar.goBack(); // Esc Go back
1639 }
1640 else if(event.modifiers === Qt.AltModifier) {
1641@@ -96,11 +91,9 @@
1642 case Qt.Key_J: // Ctrl+J Jump to playing song
1643 nowPlaying.visible = true;
1644 nowPlaying.positionAt(player.currentIndex);
1645- musicToolbar.showToolbar();
1646 break;
1647 case Qt.Key_N: // Ctrl+N Show now playing
1648 nowPlaying.visible = true;
1649- musicToolbar.showToolbar();
1650 break;
1651 case Qt.Key_P: // Ctrl+P Toggle playing state
1652 player.toggle();
1653@@ -577,12 +570,6 @@
1654 if (args.values.url) {
1655 uriHandler.process(args.values.url, true);
1656 }
1657-
1658- // Show toolbar and start timer if there is music
1659- if (!emptyPage.noMusic) {
1660- musicToolbar.showToolbar();
1661- musicToolbar.startAutohideTimer();
1662- }
1663 }
1664
1665 // VARIABLES
1666@@ -598,7 +585,6 @@
1667 property bool selectedAlbum: false
1668
1669 signal listItemSwiping(int i)
1670- signal onToolbarShownChanged(bool shown, var currentPage, var currentTab)
1671
1672 property bool wideAspect: width >= units.gu(70) && loadedUI
1673 property bool loadedUI: false // property to detect if the UI has finished
1674@@ -680,8 +666,6 @@
1675 // Show the Now Playing page and make sure the track is visible
1676 tabs.pushNowPlaying();
1677 nowPlaying.ensureVisibleIndex = index;
1678-
1679- musicToolbar.showToolbar();
1680 }
1681 else {
1682 player.source = file;
1683@@ -699,8 +683,6 @@
1684 // Show the Now Playing page and make sure the track is visible
1685 tabs.pushNowPlaying();
1686 nowPlaying.ensureVisibleIndex = index;
1687-
1688- musicToolbar.showToolbar();
1689 }
1690
1691 function playRandomSong(shuffle)
1692@@ -716,6 +698,17 @@
1693 trackClicked(allSongsModel, index, true)
1694 }
1695
1696+ function shuffleModel(model)
1697+ {
1698+ var now = new Date();
1699+ var seed = now.getSeconds();
1700+ var index = Math.floor(model.count * Math.random(seed));
1701+
1702+ player.shuffle = true;
1703+
1704+ trackClicked(model, index, true)
1705+ }
1706+
1707 // Load mediascanner store
1708 MediaStore {
1709 id: musicStore
1710@@ -867,10 +860,6 @@
1711 id: searchSheet
1712 }
1713
1714- // Blurred background
1715- BlurredBackground {
1716- }
1717-
1718 // Popover for tracks, queue and add to playlist, for example
1719 Component {
1720 id: trackPopoverComponent
1721@@ -973,6 +962,7 @@
1722
1723 MusicToolbar {
1724 id: musicToolbar
1725+ visible: nowPlaying.isListView || !nowPlaying.visible
1726 objectName: "musicToolbarObject"
1727 z: 200 // put on top of everything else
1728 }
1729
1730=== modified file 'po/com.ubuntu.music.pot'
1731--- po/com.ubuntu.music.pot 2014-09-23 12:44:36 +0000
1732+++ po/com.ubuntu.music.pot 2014-10-04 17:07:09 +0000
1733@@ -8,7 +8,7 @@
1734 msgstr ""
1735 "Project-Id-Version: music-app\n"
1736 "Report-Msgid-Bugs-To: \n"
1737-"POT-Creation-Date: 2014-09-23 13:43+0100\n"
1738+"POT-Creation-Date: 2014-10-02 20:40-0500\n"
1739 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1740 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1741 "Language-Team: LANGUAGE <LL@li.org>\n"
1742@@ -76,7 +76,7 @@
1743
1744 #: ../MusicArtists.qml:113 ../MusicPlaylists.qml:180 ../MusicStart.qml:371
1745 #: ../MusicaddtoPlaylist.qml:106 ../common/AlbumsPage.qml:331
1746-#: ../common/SongsPage.qml:123 ../common/SongsPage.qml:124
1747+#: ../common/SongsPage.qml:138 ../common/SongsPage.qml:139
1748 #, qt-format
1749 msgid "%1 song"
1750 msgid_plural "%1 songs"
1751@@ -114,31 +114,32 @@
1752 msgid "Change"
1753 msgstr ""
1754
1755-#: ../MusicPlaylists.qml:96 ../music-app.qml:956
1756+#: ../MusicPlaylists.qml:96 ../music-app.qml:962
1757 msgid "Playlist already exists"
1758 msgstr ""
1759
1760-#: ../MusicPlaylists.qml:100 ../music-app.qml:961
1761+#: ../MusicPlaylists.qml:100 ../music-app.qml:967
1762 msgid "Please type in a name."
1763 msgstr ""
1764
1765-#: ../MusicPlaylists.qml:105 ../music-app.qml:493 ../music-app.qml:967
1766+#: ../MusicPlaylists.qml:105 ../music-app.qml:492 ../music-app.qml:973
1767 msgid "Cancel"
1768 msgstr ""
1769
1770 #: ../MusicPlaylists.qml:159 ../MusicPlaylists.qml:163 ../MusicStart.qml:118
1771-#: ../MusicStart.qml:200 ../common/SongsPage.qml:166
1772-#: ../common/SongsPage.qml:224 ../common/SongsPage.qml:226
1773-#: ../common/SongsPage.qml:244
1774+#: ../MusicStart.qml:200 ../common/SongsPage.qml:114
1775+#: ../common/SongsPage.qml:171 ../common/SongsPage.qml:228
1776+#: ../common/SongsPage.qml:250 ../common/SongsPage.qml:252
1777+#: ../common/SongsPage.qml:270
1778 msgid "Playlist"
1779 msgstr ""
1780
1781-#: ../MusicSearch.qml:44 ../MusicSearch.qml:75 ../MusicToolbar.qml:519
1782-#: ../music-app.qml:93 ../music-app.qml:141 ../music-app.qml:147
1783+#: ../MusicSearch.qml:44 ../MusicSearch.qml:75 ../MusicToolbar.qml:522
1784+#: ../music-app.qml:92 ../music-app.qml:140 ../music-app.qml:146
1785 msgid "Search"
1786 msgstr ""
1787
1788-#: ../MusicSettings.qml:30 ../music-app.qml:191
1789+#: ../MusicSettings.qml:30 ../music-app.qml:190
1790 msgid "Settings"
1791 msgstr ""
1792
1793@@ -224,7 +225,7 @@
1794 msgid "Clean everything!"
1795 msgstr ""
1796
1797-#: ../MusicStart.qml:35 ../music-app.qml:589 ../music-app.qml:1150
1798+#: ../MusicStart.qml:35 ../music-app.qml:588 ../music-app.qml:1156
1799 #: com.ubuntu.music_music.desktop.in.in.h:1
1800 msgid "Music"
1801 msgstr ""
1802@@ -241,13 +242,14 @@
1803 msgid "Genres"
1804 msgstr ""
1805
1806-#: ../MusicStart.qml:316 ../MusicStart.qml:318 ../common/SongsPage.qml:123
1807-#: ../common/SongsPage.qml:162 ../common/SongsPage.qml:240
1808+#: ../MusicStart.qml:316 ../MusicStart.qml:318 ../common/SongsPage.qml:115
1809+#: ../common/SongsPage.qml:138 ../common/SongsPage.qml:167
1810+#: ../common/SongsPage.qml:224 ../common/SongsPage.qml:266
1811 msgid "Genre"
1812 msgstr ""
1813
1814-#: ../MusicToolbar.qml:760
1815-msgid "Tap play to shuffle music"
1816+#: ../MusicToolbar.qml:767
1817+msgid "Tap to shuffle music"
1818 msgstr ""
1819
1820 #: ../MusicTracks.qml:35
1821@@ -259,16 +261,16 @@
1822 msgstr ""
1823
1824 #: ../common/AlbumsPage.qml:167 ../common/AlbumsPage.qml:360
1825-#: ../common/SongsPage.qml:153
1826+#: ../common/SongsPage.qml:218
1827 msgid "Play all"
1828 msgstr ""
1829
1830 #: ../common/AlbumsPage.qml:211 ../common/AlbumsPage.qml:400
1831-#: ../common/SongsPage.qml:200 ../music-app.qml:888
1832+#: ../music-app.qml:894
1833 msgid "Add to queue"
1834 msgstr ""
1835
1836-#: ../common/ListItemActions/AddToPlaylist.qml:25 ../music-app.qml:902
1837+#: ../common/ListItemActions/AddToPlaylist.qml:25 ../music-app.qml:908
1838 msgid "Add to playlist"
1839 msgstr ""
1840
1841@@ -294,6 +296,14 @@
1842 msgid "Loading..."
1843 msgstr ""
1844
1845+#: ../common/SongsPage.qml:160
1846+msgid "Shuffle"
1847+msgstr ""
1848+
1849+#: ../common/SongsPage.qml:197
1850+msgid "Queue all"
1851+msgstr ""
1852+
1853 #: ../common/SwipeDelete.qml:52 ../common/SwipeDelete.qml:88
1854 msgid "Clear"
1855 msgstr ""
1856@@ -306,127 +316,127 @@
1857 msgid "Unknown Artist"
1858 msgstr ""
1859
1860-#: ../music-app.qml:142
1861+#: ../music-app.qml:141
1862 msgid "Search Track"
1863 msgstr ""
1864
1865+#: ../music-app.qml:153
1866+msgid "Next"
1867+msgstr ""
1868+
1869 #: ../music-app.qml:154
1870-msgid "Next"
1871-msgstr ""
1872-
1873-#: ../music-app.qml:155
1874 msgid "Next Track"
1875 msgstr ""
1876
1877-#: ../music-app.qml:161
1878+#: ../music-app.qml:160
1879 msgid "Pause"
1880 msgstr ""
1881
1882-#: ../music-app.qml:161
1883+#: ../music-app.qml:160
1884 msgid "Play"
1885 msgstr ""
1886
1887-#: ../music-app.qml:163
1888+#: ../music-app.qml:162
1889 msgid "Pause Playback"
1890 msgstr ""
1891
1892-#: ../music-app.qml:163
1893+#: ../music-app.qml:162
1894 msgid "Continue or start playback"
1895 msgstr ""
1896
1897+#: ../music-app.qml:167
1898+msgid "Back"
1899+msgstr ""
1900+
1901 #: ../music-app.qml:168
1902-msgid "Back"
1903-msgstr ""
1904-
1905-#: ../music-app.qml:169
1906 msgid "Go back to last page"
1907 msgstr ""
1908
1909+#: ../music-app.qml:176
1910+msgid "Previous"
1911+msgstr ""
1912+
1913 #: ../music-app.qml:177
1914-msgid "Previous"
1915-msgstr ""
1916-
1917-#: ../music-app.qml:178
1918 msgid "Previous Track"
1919 msgstr ""
1920
1921+#: ../music-app.qml:182
1922+msgid "Stop"
1923+msgstr ""
1924+
1925 #: ../music-app.qml:183
1926-msgid "Stop"
1927-msgstr ""
1928-
1929-#: ../music-app.qml:184
1930 msgid "Stop Playback"
1931 msgstr ""
1932
1933-#: ../music-app.qml:192
1934+#: ../music-app.qml:191
1935 msgid "Music Settings"
1936 msgstr ""
1937
1938 #. TRANSLATORS: This string represents that the target destination filepath does not start with ~/Music/Imported/
1939-#: ../music-app.qml:338
1940+#: ../music-app.qml:337
1941 msgid "Filepath must start with"
1942 msgstr ""
1943
1944 #. TRANSLATORS: This string represents that a blank filepath destination has been used
1945-#: ../music-app.qml:364
1946+#: ../music-app.qml:363
1947 msgid "Filepath must be a file"
1948 msgstr ""
1949
1950 #. TRANSLATORS: This string represents that there was failure moving the file to the target destination
1951-#: ../music-app.qml:370
1952+#: ../music-app.qml:369
1953 msgid "Failed to move file"
1954 msgstr ""
1955
1956-#: ../music-app.qml:447
1957+#: ../music-app.qml:446
1958 msgid "Waiting for file(s)..."
1959 msgstr ""
1960
1961-#: ../music-app.qml:466
1962+#: ../music-app.qml:465
1963 msgid "OK"
1964 msgstr ""
1965
1966-#: ../music-app.qml:479
1967+#: ../music-app.qml:478
1968 msgid "Imported file not found"
1969 msgstr ""
1970
1971-#: ../music-app.qml:483
1972+#: ../music-app.qml:482
1973 msgid "Wait"
1974 msgstr ""
1975
1976 #. 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)
1977+#: ../music-app.qml:503
1978+msgid "songs played today"
1979+msgstr ""
1980+
1981 #: ../music-app.qml:504
1982-msgid "songs played today"
1983-msgstr ""
1984-
1985-#: ../music-app.qml:505
1986 msgid "No songs played today"
1987 msgstr ""
1988
1989-#: ../music-app.qml:613
1990+#: ../music-app.qml:612
1991 msgid "Debug: "
1992 msgstr ""
1993
1994-#: ../music-app.qml:925
1995+#: ../music-app.qml:931
1996 msgid "New Playlist"
1997 msgstr ""
1998
1999-#: ../music-app.qml:926
2000+#: ../music-app.qml:932
2001 msgid "Name your playlist."
2002 msgstr ""
2003
2004-#: ../music-app.qml:930
2005+#: ../music-app.qml:936
2006 msgid "Name"
2007 msgstr ""
2008
2009-#: ../music-app.qml:940
2010+#: ../music-app.qml:946
2011 msgid "Create"
2012 msgstr ""
2013
2014-#: ../music-app.qml:1176
2015+#: ../music-app.qml:1182
2016 msgid "No music found"
2017 msgstr ""
2018
2019-#: ../music-app.qml:1183
2020+#: ../music-app.qml:1189
2021 msgid "Please import music"
2022 msgstr ""
2023
2024
2025=== modified file 'po/pt_BR.po'
2026--- po/pt_BR.po 2014-10-01 06:25:24 +0000
2027+++ po/pt_BR.po 2014-10-04 17:07:09 +0000
2028@@ -1,78 +1,88 @@
2029 # Brazilian Portuguese translation for music-app
2030-# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
2031+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
2032 # This file is distributed under the same license as the music-app package.
2033-# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
2034+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
2035 #
2036 msgid ""
2037 msgstr ""
2038 "Project-Id-Version: music-app\n"
2039 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2040+<<<<<<< TREE
2041 "POT-Creation-Date: 2014-09-23 13:43+0100\n"
2042 "PO-Revision-Date: 2014-09-30 17:34+0000\n"
2043 "Last-Translator: Rafael Neri <Unknown>\n"
2044+=======
2045+"POT-Creation-Date: 2014-09-30 15:08+0100\n"
2046+"PO-Revision-Date: 2014-09-30 18:07+0000\n"
2047+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2048+>>>>>>> MERGE-SOURCE
2049 "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
2050 "MIME-Version: 1.0\n"
2051 "Content-Type: text/plain; charset=UTF-8\n"
2052 "Content-Transfer-Encoding: 8bit\n"
2053 "Plural-Forms: nplurals=2; plural=n > 1;\n"
2054+<<<<<<< TREE
2055 "X-Launchpad-Export-Date: 2014-10-01 06:25+0000\n"
2056+=======
2057+"X-Launchpad-Export-Date: 2014-10-03 06:28+0000\n"
2058+>>>>>>> MERGE-SOURCE
2059 "X-Generator: Launchpad (build 17196)\n"
2060
2061 #: ../LoginLastFM.qml:48 ../MusicSettings.qml:145 ../MusicSettings.qml:153
2062 msgid "Last.fm"
2063-msgstr "Last.fm"
2064+msgstr ""
2065
2066 #: ../LoginLastFM.qml:54
2067 msgid "Login to be able to scrobble."
2068-msgstr "Faça login para habilitar o scrobble."
2069+msgstr ""
2070
2071 #: ../LoginLastFM.qml:62
2072 msgid "Username"
2073-msgstr "Usuário"
2074+msgstr ""
2075
2076 #: ../LoginLastFM.qml:72
2077 msgid "Password"
2078-msgstr "Senha"
2079+msgstr ""
2080
2081 #: ../LoginLastFM.qml:94
2082 msgid "Login"
2083-msgstr "Login"
2084+msgstr ""
2085
2086 #: ../LoginLastFM.qml:101
2087 msgid "Trying to login..."
2088-msgstr "Tentando entrar..."
2089+msgstr ""
2090
2091 #: ../LoginLastFM.qml:115
2092 msgid "Login Successful"
2093-msgstr "Login realizado com sucesso"
2094+msgstr ""
2095
2096 #: ../LoginLastFM.qml:121
2097 msgid "Login Failed"
2098-msgstr "Falha no login"
2099+msgstr ""
2100
2101 #: ../LoginLastFM.qml:127
2102 msgid "You forgot to set your username and/or password"
2103-msgstr "Você esqueceu de definir seu usuário e/ou senha"
2104+msgstr ""
2105
2106 #: ../MusicAlbums.qml:35 ../MusicStart.qml:392
2107 msgid "Albums"
2108-msgstr "Álbuns"
2109+msgstr ""
2110
2111 #: ../MusicAlbums.qml:152 ../MusicStart.qml:200 ../MusicStart.qml:454
2112 #: ../common/AlbumsPage.qml:264
2113 msgid "Album"
2114-msgstr "Álbum"
2115+msgstr ""
2116
2117 #: ../MusicArtists.qml:37
2118 msgid "Artists"
2119-msgstr "Artistas"
2120+msgstr ""
2121
2122 #: ../MusicArtists.qml:107 ../common/AlbumsPage.qml:112
2123 #, qt-format
2124 msgid "%1 album"
2125 msgid_plural "%1 albums"
2126-msgstr[0] "%1 álbum"
2127-msgstr[1] "%1 álbuns"
2128+msgstr[0] ""
2129+msgstr[1] ""
2130
2131 #: ../MusicArtists.qml:113 ../MusicPlaylists.qml:180 ../MusicStart.qml:371
2132 #: ../MusicaddtoPlaylist.qml:106 ../common/AlbumsPage.qml:331
2133@@ -80,362 +90,360 @@
2134 #, qt-format
2135 msgid "%1 song"
2136 msgid_plural "%1 songs"
2137-msgstr[0] "%1 música"
2138-msgstr[1] "%1 músicas"
2139+msgstr[0] ""
2140+msgstr[1] ""
2141
2142 #: ../MusicArtists.qml:123
2143 msgid "Artist"
2144-msgstr "Artista"
2145+msgstr ""
2146
2147 #: ../MusicNowPlaying.qml:33
2148 msgid "Now Playing"
2149-msgstr "Reproduzindo agora"
2150+msgstr ""
2151
2152 #. TRANSLATORS: this is the name of the playlists page shown in the tab header.
2153 #. Remember to keep the translation short to fit the screen width
2154 #: ../MusicPlaylists.qml:38
2155 msgid "Playlists"
2156-msgstr "Listas de reprodução"
2157+msgstr ""
2158
2159 #: ../MusicPlaylists.qml:48 ../MusicaddtoPlaylist.qml:48
2160 msgid "New playlist"
2161-msgstr "Nova lista de reprodução"
2162+msgstr ""
2163
2164 #. TRANSLATORS: this is a title of a dialog with a prompt to rename a playlist
2165 #: ../MusicPlaylists.qml:64
2166 msgid "Change name"
2167-msgstr "Alterar nome"
2168+msgstr ""
2169
2170 #: ../MusicPlaylists.qml:65
2171 msgid "Enter the new name of the playlist."
2172-msgstr "Inserir o novo nome da lista de reprodução."
2173+msgstr ""
2174
2175 #: ../MusicPlaylists.qml:78
2176 msgid "Change"
2177-msgstr "Alterar"
2178+msgstr ""
2179
2180-#: ../MusicPlaylists.qml:96 ../music-app.qml:956
2181+#: ../MusicPlaylists.qml:96 ../music-app.qml:951
2182 msgid "Playlist already exists"
2183-msgstr "Lista de reprodução já existe"
2184+msgstr ""
2185
2186-#: ../MusicPlaylists.qml:100 ../music-app.qml:961
2187+#: ../MusicPlaylists.qml:100 ../music-app.qml:956
2188 msgid "Please type in a name."
2189-msgstr "Por favor, informe um nome."
2190+msgstr ""
2191
2192-#: ../MusicPlaylists.qml:105 ../music-app.qml:493 ../music-app.qml:967
2193+#: ../MusicPlaylists.qml:105 ../music-app.qml:492 ../music-app.qml:962
2194 msgid "Cancel"
2195-msgstr "Cancelar"
2196+msgstr ""
2197
2198 #: ../MusicPlaylists.qml:159 ../MusicPlaylists.qml:163 ../MusicStart.qml:118
2199 #: ../MusicStart.qml:200 ../common/SongsPage.qml:166
2200 #: ../common/SongsPage.qml:224 ../common/SongsPage.qml:226
2201 #: ../common/SongsPage.qml:244
2202 msgid "Playlist"
2203-msgstr "Lista de reprodução"
2204+msgstr ""
2205
2206-#: ../MusicSearch.qml:44 ../MusicSearch.qml:75 ../MusicToolbar.qml:519
2207-#: ../music-app.qml:93 ../music-app.qml:141 ../music-app.qml:147
2208+#: ../MusicSearch.qml:44 ../MusicSearch.qml:75 ../MusicToolbar.qml:522
2209+#: ../music-app.qml:92 ../music-app.qml:140 ../music-app.qml:146
2210 msgid "Search"
2211-msgstr "Pesquisar"
2212+msgstr ""
2213
2214-#: ../MusicSettings.qml:30 ../music-app.qml:191
2215+#: ../MusicSettings.qml:30 ../music-app.qml:190
2216 msgid "Settings"
2217-msgstr "Configurações"
2218+msgstr ""
2219
2220 #: ../MusicSettings.qml:81
2221 msgid "Equaliser"
2222-msgstr "Equalizador"
2223+msgstr ""
2224
2225 #: ../MusicSettings.qml:82
2226 msgid "Default"
2227-msgstr "Padrão"
2228+msgstr ""
2229
2230 #: ../MusicSettings.qml:83
2231 msgid "Acoustic"
2232-msgstr "Acústico"
2233+msgstr ""
2234
2235 #: ../MusicSettings.qml:84
2236 msgid "Classical"
2237-msgstr "Clássica"
2238+msgstr ""
2239
2240 #: ../MusicSettings.qml:85
2241 msgid "Electronic"
2242-msgstr "Eletrônica"
2243+msgstr ""
2244
2245 #: ../MusicSettings.qml:86
2246 msgid "Flat"
2247-msgstr "Flat"
2248+msgstr ""
2249
2250 #: ../MusicSettings.qml:87
2251 msgid "Hip Hop"
2252-msgstr "Hip Hop"
2253+msgstr ""
2254
2255 #: ../MusicSettings.qml:88
2256 msgid "Jazz"
2257-msgstr "Jazz"
2258+msgstr ""
2259
2260 #: ../MusicSettings.qml:89
2261 msgid "Metal"
2262-msgstr "Metal"
2263+msgstr ""
2264
2265 #: ../MusicSettings.qml:90
2266 msgid "Pop"
2267-msgstr "Pop"
2268+msgstr ""
2269
2270 #: ../MusicSettings.qml:91
2271 msgid "Rock"
2272-msgstr "Rock"
2273+msgstr ""
2274
2275 #: ../MusicSettings.qml:92
2276 msgid "Custom"
2277-msgstr "Personalizado"
2278+msgstr ""
2279
2280 #: ../MusicSettings.qml:112
2281 msgid ""
2282 "Snap to current song \n"
2283 "when opening toolbar"
2284 msgstr ""
2285-"Ajustar a música atual \n"
2286-"quando abrir a barra de ferramentas"
2287
2288 #: ../MusicSettings.qml:132
2289 msgid "Accounts"
2290-msgstr "Contas"
2291+msgstr ""
2292
2293 #: ../MusicSettings.qml:146
2294 msgid "Login to scrobble and import playlists"
2295-msgstr "Fazer login no scrobble e importar as listas de reprodução"
2296+msgstr ""
2297
2298 #: ../MusicSettings.qml:169
2299 msgid "Music Streaming"
2300-msgstr "Streaming de música"
2301+msgstr ""
2302
2303 #: ../MusicSettings.qml:179
2304 msgid "Ubuntu One"
2305-msgstr "Ubuntu One"
2306+msgstr ""
2307
2308 #: ../MusicSettings.qml:180
2309 msgid "Sign in to stream your cloud music"
2310-msgstr "Fazer login para transmitir suas músicas armazenadas em nuvem"
2311+msgstr ""
2312
2313 #: ../MusicSettings.qml:196
2314 msgid "Stream only on Wi-Fi"
2315-msgstr "Transmitir apenas através de Wi-Fi"
2316+msgstr ""
2317
2318 #: ../MusicSettings.qml:230
2319 msgid "Clean everything!"
2320-msgstr "Limpar tudo!"
2321+msgstr ""
2322
2323-#: ../MusicStart.qml:35 ../music-app.qml:589 ../music-app.qml:1150
2324+#: ../MusicStart.qml:35 ../music-app.qml:588 ../music-app.qml:1145
2325 #: com.ubuntu.music_music.desktop.in.in.h:1
2326 msgid "Music"
2327-msgstr "Música"
2328+msgstr ""
2329
2330 #: ../MusicStart.qml:75
2331 msgid "Recent"
2332-msgstr "Recente"
2333+msgstr ""
2334
2335 #: ../MusicStart.qml:103
2336 msgid "Clear History"
2337-msgstr "Limpar histórico"
2338+msgstr ""
2339
2340 #: ../MusicStart.qml:227
2341 msgid "Genres"
2342-msgstr "Gêneros"
2343+msgstr ""
2344
2345 #: ../MusicStart.qml:316 ../MusicStart.qml:318 ../common/SongsPage.qml:123
2346 #: ../common/SongsPage.qml:162 ../common/SongsPage.qml:240
2347 msgid "Genre"
2348-msgstr "Gênero"
2349+msgstr ""
2350
2351-#: ../MusicToolbar.qml:760
2352-msgid "Tap play to shuffle music"
2353-msgstr "Toque em reproduzir para embaralhar músicas"
2354+#: ../MusicToolbar.qml:767
2355+msgid "Tap to shuffle music"
2356+msgstr ""
2357
2358 #: ../MusicTracks.qml:35
2359 msgid "Songs"
2360-msgstr "Músicas"
2361+msgstr ""
2362
2363 #: ../MusicaddtoPlaylist.qml:41
2364 msgid "Select playlist"
2365-msgstr "Selecione uma lista de reprodução"
2366+msgstr ""
2367
2368 #: ../common/AlbumsPage.qml:167 ../common/AlbumsPage.qml:360
2369 #: ../common/SongsPage.qml:153
2370 msgid "Play all"
2371-msgstr "Tocar tudo"
2372+msgstr ""
2373
2374 #: ../common/AlbumsPage.qml:211 ../common/AlbumsPage.qml:400
2375-#: ../common/SongsPage.qml:200 ../music-app.qml:888
2376+#: ../common/SongsPage.qml:200 ../music-app.qml:883
2377 msgid "Add to queue"
2378-msgstr "Adicionar à fila"
2379+msgstr ""
2380
2381-#: ../common/ListItemActions/AddToPlaylist.qml:25 ../music-app.qml:902
2382+#: ../common/ListItemActions/AddToPlaylist.qml:25 ../music-app.qml:897
2383 msgid "Add to playlist"
2384-msgstr "Adicionar à lista de reprodução"
2385+msgstr ""
2386
2387 #: ../common/ListItemActions/AddToQueue.qml:25
2388 msgid "Add to Queue"
2389-msgstr "Adicionar à fila de reprodução"
2390+msgstr ""
2391
2392 #. TRANSLATORS: this refers to deleting a playlist
2393 #: ../common/ListItemActions/DeletePlaylist.qml:26
2394 msgid "Delete"
2395-msgstr "Apagar"
2396+msgstr ""
2397
2398 #. TRANSLATORS: this refers to editing a playlist
2399 #: ../common/ListItemActions/EditPlaylist.qml:26
2400 msgid "Edit"
2401-msgstr "Editar"
2402+msgstr ""
2403
2404 #: ../common/ListItemActions/Remove.qml:27
2405 msgid "Remove"
2406-msgstr "Remover"
2407+msgstr ""
2408
2409 #: ../common/LoadingSpinnerComponent.qml:47
2410 msgid "Loading..."
2411-msgstr "Carregando..."
2412+msgstr ""
2413
2414 #: ../common/SwipeDelete.qml:52 ../common/SwipeDelete.qml:88
2415 msgid "Clear"
2416-msgstr "Limpar"
2417+msgstr ""
2418
2419 #: ../meta-database.js:90 ../meta-database.js:92
2420 msgid "Unknown Album"
2421-msgstr "Álbum desconhecido"
2422+msgstr ""
2423
2424 #: ../meta-database.js:91
2425 msgid "Unknown Artist"
2426-msgstr "Artista desconhecido"
2427+msgstr ""
2428
2429-#: ../music-app.qml:142
2430+#: ../music-app.qml:141
2431 msgid "Search Track"
2432-msgstr "Pesquisar faixa"
2433+msgstr ""
2434+
2435+#: ../music-app.qml:153
2436+msgid "Next"
2437+msgstr ""
2438
2439 #: ../music-app.qml:154
2440-msgid "Next"
2441-msgstr "Próximo"
2442-
2443-#: ../music-app.qml:155
2444 msgid "Next Track"
2445-msgstr "Próxima faixa"
2446+msgstr ""
2447
2448-#: ../music-app.qml:161
2449+#: ../music-app.qml:160
2450 msgid "Pause"
2451-msgstr "Pausar"
2452+msgstr ""
2453
2454-#: ../music-app.qml:161
2455+#: ../music-app.qml:160
2456 msgid "Play"
2457-msgstr "Tocar"
2458+msgstr ""
2459
2460-#: ../music-app.qml:163
2461+#: ../music-app.qml:162
2462 msgid "Pause Playback"
2463-msgstr "Pausar Reprodução"
2464+msgstr ""
2465
2466-#: ../music-app.qml:163
2467+#: ../music-app.qml:162
2468 msgid "Continue or start playback"
2469-msgstr "Continuar ou iniciar reprodução"
2470+msgstr ""
2471+
2472+#: ../music-app.qml:167
2473+msgid "Back"
2474+msgstr ""
2475
2476 #: ../music-app.qml:168
2477-msgid "Back"
2478-msgstr "Voltar"
2479-
2480-#: ../music-app.qml:169
2481 msgid "Go back to last page"
2482-msgstr "Voltar para a última página"
2483+msgstr ""
2484+
2485+#: ../music-app.qml:176
2486+msgid "Previous"
2487+msgstr ""
2488
2489 #: ../music-app.qml:177
2490-msgid "Previous"
2491-msgstr "Anterior"
2492-
2493-#: ../music-app.qml:178
2494 msgid "Previous Track"
2495-msgstr "Faixa anterior"
2496+msgstr ""
2497+
2498+#: ../music-app.qml:182
2499+msgid "Stop"
2500+msgstr ""
2501
2502 #: ../music-app.qml:183
2503-msgid "Stop"
2504-msgstr "Parar"
2505-
2506-#: ../music-app.qml:184
2507 msgid "Stop Playback"
2508-msgstr "Parar reprodução"
2509+msgstr ""
2510
2511-#: ../music-app.qml:192
2512+#: ../music-app.qml:191
2513 msgid "Music Settings"
2514-msgstr "Configurações de Música"
2515+msgstr ""
2516
2517 #. TRANSLATORS: This string represents that the target destination filepath does not start with ~/Music/Imported/
2518-#: ../music-app.qml:338
2519+#: ../music-app.qml:337
2520 msgid "Filepath must start with"
2521 msgstr "O caminho do arquivo deve começar com"
2522
2523 #. TRANSLATORS: This string represents that a blank filepath destination has been used
2524-#: ../music-app.qml:364
2525+#: ../music-app.qml:363
2526 msgid "Filepath must be a file"
2527-msgstr "O caminho deve ser de um arquivo"
2528+msgstr ""
2529
2530 #. TRANSLATORS: This string represents that there was failure moving the file to the target destination
2531-#: ../music-app.qml:370
2532+#: ../music-app.qml:369
2533 msgid "Failed to move file"
2534-msgstr "Falhou ao mover arquivo"
2535+msgstr ""
2536
2537-#: ../music-app.qml:447
2538+#: ../music-app.qml:446
2539 msgid "Waiting for file(s)..."
2540 msgstr "Aguardando pelo(s) arquivo(s)"
2541
2542-#: ../music-app.qml:466
2543+#: ../music-app.qml:465
2544 msgid "OK"
2545-msgstr "OK"
2546+msgstr ""
2547
2548-#: ../music-app.qml:479
2549+#: ../music-app.qml:478
2550 msgid "Imported file not found"
2551-msgstr "O arquivo importado não foi encontrado"
2552+msgstr ""
2553
2554-#: ../music-app.qml:483
2555+#: ../music-app.qml:482
2556 msgid "Wait"
2557-msgstr "Aguardando"
2558+msgstr ""
2559
2560 #. 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)
2561+#: ../music-app.qml:503
2562+msgid "songs played today"
2563+msgstr ""
2564+
2565 #: ../music-app.qml:504
2566-msgid "songs played today"
2567-msgstr "músicas tocadas hoje"
2568-
2569-#: ../music-app.qml:505
2570 msgid "No songs played today"
2571-msgstr "Nenhuma música tocada hoje"
2572+msgstr ""
2573
2574-#: ../music-app.qml:613
2575+#: ../music-app.qml:612
2576 msgid "Debug: "
2577-msgstr "Debug: "
2578+msgstr ""
2579
2580-#: ../music-app.qml:925
2581+#: ../music-app.qml:920
2582 msgid "New Playlist"
2583-msgstr "Nova lista de reprodução"
2584+msgstr ""
2585
2586-#: ../music-app.qml:926
2587+#: ../music-app.qml:921
2588 msgid "Name your playlist."
2589-msgstr "Nomear sua lista de reprodução."
2590+msgstr ""
2591
2592-#: ../music-app.qml:930
2593+#: ../music-app.qml:925
2594 msgid "Name"
2595-msgstr "Nome"
2596+msgstr ""
2597
2598-#: ../music-app.qml:940
2599+#: ../music-app.qml:935
2600 msgid "Create"
2601-msgstr "Criar"
2602+msgstr ""
2603
2604-#: ../music-app.qml:1176
2605+#: ../music-app.qml:1171
2606 msgid "No music found"
2607-msgstr "Nenhuma música encontrada"
2608+msgstr ""
2609
2610-#: ../music-app.qml:1183
2611+#: ../music-app.qml:1178
2612 msgid "Please import music"
2613-msgstr "Por favor, importar músicas"
2614+msgstr ""
2615
2616 #: com.ubuntu.music_music.desktop.in.in.h:2
2617 msgid "A music application for Ubuntu"
2618-msgstr "Aplicativo de musica para o Ubuntu"
2619+msgstr ""
2620
2621 #: com.ubuntu.music_music.desktop.in.in.h:3
2622 msgid "music;songs;play;tracks;player;tunes;"
2623-msgstr "música;músicas;tocar;faixas;player;tons;"
2624+msgstr ""

Subscribers

People subscribed via source and target branches

to status/vote changes: