From 69d10461d6ee605d9d126686ae87f6ca5c4f181a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 24 Jun 2019 17:39:09 +0200 Subject: [PATCH 01/10] Resolve "Colorized 'play' button in front of the currently playing music" --- changes/changelog.d/832.enhancement | 1 + front/src/components/audio/album/Card.vue | 11 +++++++++-- front/src/components/audio/track/Row.vue | 12 +++++++++--- 3 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 changes/changelog.d/832.enhancement diff --git a/changes/changelog.d/832.enhancement b/changes/changelog.d/832.enhancement new file mode 100644 index 000000000..1a270b88e --- /dev/null +++ b/changes/changelog.d/832.enhancement @@ -0,0 +1 @@ +The currently playing track is now highlighted with an orange play icon (#832) \ No newline at end of file diff --git a/front/src/components/audio/album/Card.vue b/front/src/components/audio/album/Card.vue index bdc0dd6cb..db6e8de6b 100644 --- a/front/src/components/audio/album/Card.vue +++ b/front/src/components/audio/album/Card.vue @@ -20,7 +20,7 @@ - + @@ -57,6 +57,7 @@ From 3da6192ab3c809dc4ce88469c34b8e1694d8f311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 24 Jun 2019 13:30:56 +0200 Subject: [PATCH 02/10] Resolve "Hide favorites radios when user does not have any favorites" --- changes/changelog.d/419.enhancement | 1 + front/src/components/favorites/List.vue | 7 +++++-- front/src/components/library/Radios.vue | 10 ++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 changes/changelog.d/419.enhancement diff --git a/changes/changelog.d/419.enhancement b/changes/changelog.d/419.enhancement new file mode 100644 index 000000000..f4716b53e --- /dev/null +++ b/changes/changelog.d/419.enhancement @@ -0,0 +1 @@ +Favorites radio will not be visible if the user does not have any favorites (#419) \ No newline at end of file diff --git a/front/src/components/favorites/List.vue b/front/src/components/favorites/List.vue index d1bde0935..6402d417f 100644 --- a/front/src/components/favorites/List.vue +++ b/front/src/components/favorites/List.vue @@ -16,7 +16,7 @@ 1 favorite - +
@@ -115,7 +115,10 @@ export default { return { title: this.$pgettext('Head/Favorites/Title', 'Your Favorites') } - } + }, + hasFavorites () { + return this.$store.state.favorites.count > 0 + }, }, methods: { updateQueryString: function() { diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue index 9b2f7bf82..9f59db514 100644 --- a/front/src/components/library/Radios.vue +++ b/front/src/components/library/Radios.vue @@ -10,7 +10,7 @@ Instance radios
- +
@@ -144,7 +144,13 @@ export default { searchPlaceholder, title } - } + }, + isAuthenticated () { + return this.$store.state.auth.authenticated + }, + hasFavorites () { + return this.$store.state.favorites.count > 0 + }, }, methods: { updateQueryString: _.debounce(function() { From a05106437c87ac7f530500357a5b2785810c23f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 24 Jun 2019 11:32:20 +0200 Subject: [PATCH 03/10] Resolve "Align items vertically in search results" --- changes/changelog.d/708.enhancement | 1 + front/src/components/Sidebar.vue | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 changes/changelog.d/708.enhancement diff --git a/changes/changelog.d/708.enhancement b/changes/changelog.d/708.enhancement new file mode 100644 index 000000000..f3217e5a9 --- /dev/null +++ b/changes/changelog.d/708.enhancement @@ -0,0 +1 @@ +Aligned search headers with search results in the sidebar (#708) \ No newline at end of file diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index 8b183b215..0f2809064 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -466,6 +466,12 @@ $sidebar-color: #3d3e3f; border-radius: 0; } } + .ui.search .results { + vertical-align: middle; + } + .ui.search .name { + vertical-align: middle; + } } .ui.tiny.avatar.image { position: relative; From 79ced9514a2f6cb9b711110358b68ace021c0a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 24 Jun 2019 11:04:05 +0200 Subject: [PATCH 04/10] Resolve "Clicking on playlist name from PlaylistModal does nothing if current page is that playlist's page" --- changes/changelog.d/807.enhancement | 1 + front/src/components/playlists/PlaylistModal.vue | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/807.enhancement diff --git a/changes/changelog.d/807.enhancement b/changes/changelog.d/807.enhancement new file mode 100644 index 000000000..bab8f9647 --- /dev/null +++ b/changes/changelog.d/807.enhancement @@ -0,0 +1 @@ +Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) \ No newline at end of file diff --git a/front/src/components/playlists/PlaylistModal.vue b/front/src/components/playlists/PlaylistModal.vue index 44969afbf..97c5f0a1e 100644 --- a/front/src/components/playlists/PlaylistModal.vue +++ b/front/src/components/playlists/PlaylistModal.vue @@ -57,7 +57,7 @@ :to="{name: 'library.playlists.detail', params: {id: playlist.id }, query: {mode: 'edit'}}"> - {{ playlist.name }} + {{ playlist.name }} {{ playlist.tracks_count }} From 8308bc6a4dfba457cd4834592791f4f0ce13d58c Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 21 Jun 2019 10:14:20 +0200 Subject: [PATCH 05/10] Fix #864: Redirect from / to /library when user is logged in --- changes/changelog.d/864.enhancement | 1 + front/src/components/Home.vue | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 changes/changelog.d/864.enhancement diff --git a/changes/changelog.d/864.enhancement b/changes/changelog.d/864.enhancement new file mode 100644 index 000000000..f903ac850 --- /dev/null +++ b/changes/changelog.d/864.enhancement @@ -0,0 +1 @@ +Redirect from / to /library when user is logged in (#864) diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue index 9393d9b78..bbcc9a8f9 100644 --- a/front/src/components/Home.vue +++ b/front/src/components/Home.vue @@ -147,7 +147,19 @@ export default { let msg = this.$pgettext('Content/Home/List item/Verb', 'Get quality metadata about your music thanks to MusicBrainz') return this.$gettextInterpolate(msg, {url: this.musicbrainzUrl}) } + }, + watch: { + '$store.state.auth.authenticated': { + handler (v) { + if (v) { + console.log('Authenticated, redirecting to /library…') + this.$router.push('/library') + } + }, + immediate: true + } } + } From a1d01105a11adc337ab8bac0a13e50f8089fe44b Mon Sep 17 00:00:00 2001 From: Reg Date: Tue, 18 Jun 2019 22:52:57 +0200 Subject: [PATCH 06/10] Fixed typo refrence => reference --- api/funkwhale_api/music/management/commands/import_files.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/music/management/commands/import_files.py b/api/funkwhale_api/music/management/commands/import_files.py index 541b60886..33f8ed2d1 100644 --- a/api/funkwhale_api/music/management/commands/import_files.py +++ b/api/funkwhale_api/music/management/commands/import_files.py @@ -226,7 +226,7 @@ class Command(BaseCommand): urllib.parse.urlencode([("import", reference)]), ) self.stdout.write( - "For details, please refer to import refrence '{}' or URL {}".format( + "For details, please refer to import reference '{}' or URL {}".format( reference, import_url ) ) @@ -246,7 +246,7 @@ class Command(BaseCommand): self.stderr.write("- {}: {}".format(path, error)) self.stdout.write( - "For details, please refer to import refrence '{}' or URL {}".format( + "For details, please refer to import reference '{}' or URL {}".format( reference, import_url ) ) From fb855cd01689855fb1be936ff374ed347beb590c Mon Sep 17 00:00:00 2001 From: Ciaran Ainsworth Date: Sun, 16 Jun 2019 16:23:12 +0100 Subject: [PATCH 07/10] Added buttons to search for objects on Discogs --- changes/changelog.d/368.enhancement | 1 + front/src/components/library/AlbumBase.vue | 13 ++++++++++++- front/src/components/library/ArtistBase.vue | 10 ++++++++++ front/src/components/library/TrackBase.vue | 12 ++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/368.enhancement diff --git a/changes/changelog.d/368.enhancement b/changes/changelog.d/368.enhancement new file mode 100644 index 000000000..7e8f78c0a --- /dev/null +++ b/changes/changelog.d/368.enhancement @@ -0,0 +1 @@ +Added button to search for objects on Discogs (#368) diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue index 1f89bef88..2b3c978bc 100644 --- a/front/src/components/library/AlbumBase.vue +++ b/front/src/components/library/AlbumBase.vue @@ -61,7 +61,11 @@ View on MusicBrainz - + + Search on Discogs + + @@ -168,6 +172,13 @@ export default { return "https://musicbrainz.org/release/" + this.object.mbid } }, + discogsUrl() { + return ( + "https://discogs.com/search/?type=release&title=" + + encodeURI(this.object.title) + "&artist=" + + encodeURI(this.object.artist.name) + ) + }, headerStyle() { if (!this.object.cover.original) { return "" diff --git a/front/src/components/library/ArtistBase.vue b/front/src/components/library/ArtistBase.vue index 5da7370ba..3c21f603f 100644 --- a/front/src/components/library/ArtistBase.vue +++ b/front/src/components/library/ArtistBase.vue @@ -72,6 +72,10 @@ View on MusicBrainz + + + Search on Discogs + { diff --git a/front/src/components/library/TrackBase.vue b/front/src/components/library/TrackBase.vue index 4d396bd1a..4edd00c5d 100644 --- a/front/src/components/library/TrackBase.vue +++ b/front/src/components/library/TrackBase.vue @@ -76,6 +76,10 @@ View on MusicBrainz + + + Search on Discogs + Date: Wed, 26 Jun 2019 10:38:29 +0200 Subject: [PATCH 08/10] Resolve "Importing tracks without album fails" --- api/funkwhale_api/music/metadata.py | 8 ++++++-- api/tests/music/test_metadata.py | 28 ++++++++++++++++++++++++++++ changes/changelog.d/122.enhancement | 1 + 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 changes/changelog.d/122.enhancement diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py index 55044dbc7..f0ea67b1a 100644 --- a/api/funkwhale_api/music/metadata.py +++ b/api/funkwhale_api/music/metadata.py @@ -13,6 +13,8 @@ from rest_framework.compat import Mapping logger = logging.getLogger(__name__) NODEFAULT = object() +# default title used when imported tracks miss the `Album` tag, see #122 +UNKWOWN_ALBUM = "[Unknown Album]" class TagNotFound(KeyError): @@ -425,9 +427,11 @@ class AlbumField(serializers.Field): def to_internal_value(self, data): try: - title = data.get("album") + title = data.get("album") or "" except TagNotFound: - raise serializers.ValidationError("Missing album tag") + title = "" + + title = title.strip() or UNKWOWN_ALBUM final = { "title": title, "release_date": data.get("date", None), diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index 52c4e3026..539fa49a2 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -539,6 +539,34 @@ def test_serializer_album_artist_missing(): assert serializer.validated_data == expected +@pytest.mark.parametrize( + "data", + [ + # no album tag + {"title": "Track", "artist": "Artist"}, + # empty/null values + {"title": "Track", "artist": "Artist", "album": ""}, + {"title": "Track", "artist": "Artist", "album": " "}, + {"title": "Track", "artist": "Artist", "album": None}, + ], +) +def test_serializer_album_default_title_when_missing_or_empty(data): + expected = { + "title": "Track", + "artists": [{"name": "Artist", "mbid": None}], + "album": { + "title": metadata.UNKWOWN_ALBUM, + "mbid": None, + "release_date": None, + "artists": [], + }, + "cover_data": None, + } + serializer = metadata.TrackMetadataSerializer(data=metadata.FakeMetadata(data)) + assert serializer.is_valid(raise_exception=True) is True + assert serializer.validated_data == expected + + @pytest.mark.parametrize( "field_name", ["copyright", "license", "mbid", "position", "disc_number"] ) diff --git a/changes/changelog.d/122.enhancement b/changes/changelog.d/122.enhancement new file mode 100644 index 000000000..2776824c7 --- /dev/null +++ b/changes/changelog.d/122.enhancement @@ -0,0 +1 @@ +Support for importing files with no album tag (#122) From 95cd64582c2ff022c429c925df3489654dede1c5 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Thu, 27 Jun 2019 06:05:22 +0200 Subject: [PATCH 09/10] Fix #868: Added opus to the list of supported mimetypes and extensions --- api/funkwhale_api/music/utils.py | 1 + changes/changelog.d/868.enhancement | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/changelog.d/868.enhancement diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index 571bc4ddd..84f55dda7 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -31,6 +31,7 @@ def compute_status(jobs): AUDIO_EXTENSIONS_AND_MIMETYPE = [ ("ogg", "audio/ogg"), + ("opus", "audio/opus"), ("mp3", "audio/mpeg"), ("flac", "audio/x-flac"), ("flac", "audio/flac"), diff --git a/changes/changelog.d/868.enhancement b/changes/changelog.d/868.enhancement new file mode 100644 index 000000000..13fc39530 --- /dev/null +++ b/changes/changelog.d/868.enhancement @@ -0,0 +1 @@ +Added opus to the list of supported mimetypes and extensions (#868) From dc5db3a0c1a27b5c02c3a080b5bdc7618c6de5f8 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Thu, 27 Jun 2019 14:50:56 +0200 Subject: [PATCH 10/10] Fix #869: broken user admin for users with non-digit or letters in their username --- api/funkwhale_api/manage/serializers.py | 6 ++++++ api/funkwhale_api/manage/views.py | 2 +- changes/changelog.d/869.bugfix | 1 + front/src/components/manage/users/UsersTable.vue | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 changes/changelog.d/869.bugfix diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py index add9364e8..a9b19939d 100644 --- a/api/funkwhale_api/manage/serializers.py +++ b/api/funkwhale_api/manage/serializers.py @@ -44,12 +44,14 @@ class ManageUserSimpleSerializer(serializers.ModelSerializer): class ManageUserSerializer(serializers.ModelSerializer): permissions = PermissionsSerializer(source="*") upload_quota = serializers.IntegerField(allow_null=True) + actor = serializers.SerializerMethodField() class Meta: model = users_models.User fields = ( "id", "username", + "actor", "email", "name", "is_active", @@ -82,6 +84,10 @@ class ManageUserSerializer(serializers.ModelSerializer): ) return instance + def get_actor(self, obj): + if obj.actor: + return ManageBaseActorSerializer(obj.actor).data + class ManageInvitationSerializer(serializers.ModelSerializer): users = ManageUserSimpleSerializer(many=True, required=False) diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py index 83981116c..6e4edc888 100644 --- a/api/funkwhale_api/manage/views.py +++ b/api/funkwhale_api/manage/views.py @@ -291,7 +291,7 @@ class ManageUserViewSet( mixins.UpdateModelMixin, viewsets.GenericViewSet, ): - queryset = users_models.User.objects.all().order_by("-id") + queryset = users_models.User.objects.all().select_related("actor").order_by("-id") serializer_class = serializers.ManageUserSerializer filterset_class = filters.ManageUserFilterSet required_scope = "instance:users" diff --git a/changes/changelog.d/869.bugfix b/changes/changelog.d/869.bugfix new file mode 100644 index 000000000..7d56f3175 --- /dev/null +++ b/changes/changelog.d/869.bugfix @@ -0,0 +1 @@ +Fixed broken user admin for users with non-digit or letters in their username (#869) diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue index ee1d3110b..a508f5be9 100644 --- a/front/src/components/manage/users/UsersTable.vue +++ b/front/src/components/manage/users/UsersTable.vue @@ -45,7 +45,8 @@