-
-
Notifications
You must be signed in to change notification settings - Fork 235
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
UI for the music player #399
Conversation
layouts/default.vue
Outdated
<v-footer v-if="false" app> | ||
<music-player /> | ||
</v-footer> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This needs a higher z-index, otherwise, home sections overlay ontop of it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a value of 5 works well, and it does not overlay on the nav draw
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do agree, especially when narrower screens are tablets or phones having dedicated volume buttons. But I think that's what the second screenshot show, doesn't it? |
yeah that's right. The second screenshot in the original is a phone. My screenshot is a desktop window at about 50% width |
Oh yeah you're right, my bad. I don't know if totally hiding is a great idea, maybe only letting the icon and show a vertical slide above when hovering? |
3113e69
to
8a53ebc
Compare
Alright, so this evolved a bit, with the recent merge of the playback manager, and now has a basic Shaka-based audio player (basically a copy of VideoPlayer, but with an It also adds a few niceties, like an itemHelper mixin, containing a Still no queue button, fullscreen, shuffle or repeat, since that's for Preview Release 2, probably. |
8a53ebc
to
bb208c0
Compare
components/AudioControls.vue
Outdated
<v-slider | ||
:value="currentPosition" | ||
hide-details | ||
min="0" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
min="0" | |
:min="0" |
This shouldn't be necessary anyway
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The component accepts number | string
, so this isn't needed.
@MrTimscampi After a rebase this is good to go imo. I made some quick small improvements to the slider, so it updates more smoothly (right now it makes a huge jump). I also added a nice label with the selected time and now the bar doesn't act like crazy when clicked or moved: If you want I can make a commit before your rebase so we can get this changes here or I can make a PR with cumulative improvements later, whatever you prefer :) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is an empty file LikeButton.vue
that can be removed
components/AudioControls.vue
Outdated
:to="`/item/${getCurrentItem.AlbumId}`" | ||
>{{ getCurrentItem.Name }}</nuxt-link | ||
> | ||
<v-btn class="d-none d-md-inline-flex" icon> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<v-btn class="d-none d-md-inline-flex" icon> | |
<v-btn class="d-none d-md-inline-flex" icon disabled> |
components/AudioControls.vue
Outdated
class="text-truncate link" | ||
:to="`/item/${getCurrentItem.AlbumId}`" | ||
>{{ getCurrentItem.Name }}</nuxt-link | ||
> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
class="text-truncate link" | |
:to="`/item/${getCurrentItem.AlbumId}`" | |
>{{ getCurrentItem.Name }}</nuxt-link | |
> | |
class="text-truncate link" | |
:to="`/item/${getCurrentItem.AlbumId}`" | |
> | |
{{ getCurrentItem.Name }} | |
</nuxt-link> |
components/AudioControls.vue
Outdated
<nuxt-link | ||
tag="span" | ||
class="text--secondary text-caption text-truncate mt-md-n2 link" | ||
:to="`/artist/${getCurrentItem.AlbumArtists[0].Id}`" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't this making the assumption that there is an album artist.
In the case where there isn't, won't this produce an error
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I always have an album artist, even for albums from solo artists.
components/AudioPlayer.vue
Outdated
<template> | ||
<audio | ||
ref="audioPlayer" | ||
:poster="poster" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:poster="poster" |
There is nowhere to show the poster, so this is unneeded.
components/AudioPlayer.vue
Outdated
poster(): string { | ||
return this.getImageUrlForElement(ImageType.Backdrop, { | ||
itemId: | ||
this.getCurrentItem?.ParentBackdropItemId || | ||
this.getCurrentItem?.SeriesId || | ||
this.getCurrentItem?.Id | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
poster(): string { | |
return this.getImageUrlForElement(ImageType.Backdrop, { | |
itemId: | |
this.getCurrentItem?.ParentBackdropItemId || | |
this.getCurrentItem?.SeriesId || | |
this.getCurrentItem?.Id | |
}); | |
} |
components/TrackList.vue
Outdated
@@ -38,7 +41,13 @@ | |||
</td> | |||
<td style="width: 3em" class="pr-0 pl-0 text-center"> | |||
<v-btn icon> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<v-btn icon> | |
<v-btn icon disabled> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@neopc10 We are planning to have this kind of screen for the fuill screen button: While the queue button will navigate to the current queue. @camc314 That's z-index stuff with the navigation drawer. Afaik it's fixed on master, but this branch needs to be rebased. @KristupasSavickas I've seen this happen with videos too, so it's not specific to this branch. Definitely needs to be investigated, though. |
I really like what Tidal does here with their UX seems to borrow at least a bit from that. Spotify doesn't seem to give two craps about albums in general and I think that's a missed opportunity on their end. I think the Vue client would really benefit from having the album linked in addition to the song title and album artist. as posted above. Tidal actually has a "playing from " link instead of album and I think that's a really nice touch that would be applicable here in the future. Tidal also has a fantastic "whole window" player UI, which I don't think is being considered for this round of PRs, but certainly deserves serious consideration for the Vue client: the album cover, player, and metadata on the left 50% of the screen and the queue on the right 50%. On Tidal's "whole window" UI there's also a button that leads to a "fullscreen" UI that I would argue is inferior to the Spotify one @MrTim linked above. Clearly the fullscreen button is placeholding for the Spotify-like fullscreen view. Is there an intention to do a whole window player UI as well? I would argue that the absolute sweet spot for flow in this client would be "play music -> minibar appears -> click anything that's not a button on the minibar to navigate to the tidal-like "whole window" player -> click fullscreen button there to get to a spotify-like fullscreen UI. I think making the seekbar take up only a fraction of the minibar as opposed to the entire width of the screen is a downgrade from what jf-web has. Having that more granular control I think is useful. I see that Spotify chose to do that though and it certainly works with their fullscreen view. I'm bringing this up here and now only because the PR is just slightly less of a placeholder than it might have been an hour ago. |
@hamburglar2160 All this discussion belongs to #238, please keep this one on topic with this specific feature. This is also a first round design. Home Header's first PR was really basic and it has gotten better after a few PRs. After all, this whole client is a Work in Progress. |
Indeed, please keep this on topic. PRs are mainly for implementation discussions, not brainstorming future features. We have discussion threads for every major feature specifically for gathering ideas and discussing said features and what we want to do with them. Also, @hamburglar2160 , please avoid tagging people unrelated to the project. It was probably done accidentally, but it's quite a rude thing to do in general. |
c36b0b9
to
eac1b8a
Compare
Codecov Report
@@ Coverage Diff @@
## master #399 +/- ##
=========================================
- Coverage 0.67% 0.62% -0.05%
=========================================
Files 74 77 +3
Lines 1932 2073 +141
Branches 273 294 +21
=========================================
Hits 13 13
- Misses 1918 2059 +141
Partials 1 1
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor stuff
eac1b8a
to
c63ca26
Compare
c63ca26
to
71d91c4
Compare
Kudos, SonarCloud Quality Gate passed!
|
This adds a working music UI and a basic audio player using Shaka as a backend (to be replaced with Howler or something else in the future).