From bfff79301d4e2e26d1732e390261b109e2d2b23f Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 28 Jun 2019 09:59:57 +0200 Subject: [PATCH 1/3] Fix #867: Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter --- api/config/settings/common.py | 3 +++ api/funkwhale_api/subsonic/views.py | 14 ++++++++---- api/tests/subsonic/test_views.py | 35 ++++++++++++++++++++++++----- changes/changelog.d/867.enhancement | 1 + 4 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 changes/changelog.d/867.enhancement diff --git a/api/config/settings/common.py b/api/config/settings/common.py index ab060b448..654b58b40 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -658,3 +658,6 @@ RSA_KEY_SIZE = 2048 CREATE_IMAGE_THUMBNAILS = env.bool("CREATE_IMAGE_THUMBNAILS", default=True) # we rotate actor keys at most every two days by default ACTOR_KEY_ROTATION_DELAY = env.int("ACTOR_KEY_ROTATION_DELAY", default=3600 * 48) +SUBSONIC_DEFAULT_TRANSCODING_FORMAT = ( + env("SUBSONIC_DEFAULT_TRANSCODING_FORMAT", default="mp3") or None +) diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 88d7ece7c..52f37c870 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -247,10 +247,6 @@ class SubsonicViewSet(viewsets.GenericViewSet): if not upload: return response.Response(status=404) - format = data.get("format", "raw") - if format == "raw": - format = None - max_bitrate = data.get("maxBitRate") try: max_bitrate = min(max(int(max_bitrate), 0), 320) or None @@ -259,6 +255,16 @@ class SubsonicViewSet(viewsets.GenericViewSet): if max_bitrate: max_bitrate = max_bitrate * 1000 + + format = data.get("format", "raw") or None + if max_bitrate and not format: + # specific bitrate requested, but no format specified + # so we use a default one, cf #867. This helps with clients + # that don't send the format parameter, such as DSub. + format = settings.SUBSONIC_DEFAULT_TRANSCODING_FORMAT + elif format == "raw": + format = None + return music_views.handle_serve( upload=upload, user=request.user, diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index 73f968ff4..cde07ac53 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -261,23 +261,48 @@ def test_stream_format(format, expected, logged_in_api_client, factories, mocker @pytest.mark.parametrize( - "max_bitrate,expected", [(0, None), (192, 192000), (2000, 320000)] + "max_bitrate,format,default_transcoding_format,expected_bitrate,expected_format", + [ + # no max bitrate, no format, so no transcoding should happen + (0, "", "ogg", None, None), + # same using "raw" format + (0, "raw", "ogg", None, None), + # specified bitrate, but no format, so fallback to default transcoding format + (192, "", "ogg", 192000, "ogg"), + # specified bitrate, but over limit + (2000, "", "ogg", 320000, "ogg"), + # specified format, we use that one + (192, "opus", "ogg", 192000, "opus"), + # No default transcoding format set and no format requested + (192, "", None, 192000, None), + ], ) -def test_stream_bitrate(max_bitrate, expected, logged_in_api_client, factories, mocker): +def test_stream_transcode( + max_bitrate, + format, + default_transcoding_format, + expected_bitrate, + expected_format, + logged_in_api_client, + factories, + mocker, + settings, +): + settings.SUBSONIC_DEFAULT_TRANSCODING_FORMAT = default_transcoding_format url = reverse("api:subsonic-stream") mocked_serve = mocker.patch.object( music_views, "handle_serve", return_value=Response() ) upload = factories["music.Upload"](playable=True) response = logged_in_api_client.get( - url, {"id": upload.track.pk, "maxBitRate": max_bitrate} + url, {"id": upload.track.pk, "maxBitRate": max_bitrate, "format": format} ) mocked_serve.assert_called_once_with( upload=upload, user=logged_in_api_client.user, - format=None, - max_bitrate=expected, + format=expected_format, + max_bitrate=expected_bitrate, proxy_media=True, ) assert response.status_code == 200 diff --git a/changes/changelog.d/867.enhancement b/changes/changelog.d/867.enhancement new file mode 100644 index 000000000..ed889184d --- /dev/null +++ b/changes/changelog.d/867.enhancement @@ -0,0 +1 @@ +Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) From fa85f92389f73a7047ca5533a3f37ba1f809b9fd Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 28 Jun 2019 10:24:31 +0200 Subject: [PATCH 2/3] Add reviewers to the list of contributors --- scripts/get-contributions-stats.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/scripts/get-contributions-stats.py b/scripts/get-contributions-stats.py index bc6d1b3bf..6680e434b 100644 --- a/scripts/get-contributions-stats.py +++ b/scripts/get-contributions-stats.py @@ -1,5 +1,6 @@ import argparse import requests +import os GITLAB_URL = "https://dev.funkwhale.audio" GITLAB_PROJECT_ID = 17 @@ -82,6 +83,14 @@ def get_translations_stats(translations): return stats +def get_group_usernames(group): + url = GITLAB_URL + "/api/v4/groups/{}/members".format(group) + response = requests.get(url, headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]}) + response.raise_for_status() + data = response.json() + return [r["name"] for r in data] + + def main(): parser = argparse.ArgumentParser() parser.add_argument("ref_name") @@ -90,9 +99,15 @@ def main(): since = get_tag_date(args.last_tag) commits = get_commits(args.ref_name, since) commits_stats = get_commit_stats(commits) - + groups = [(588, "funkwhale/reviewers-python"), (589, "funkwhale/reviewers-front")] + reviewers = [] + for id, _ in groups: + reviewers += get_group_usernames(id) + print("\nReviewers:\n") + for reviewer in reviewers: + print(reviewer) commiter_names = commits_stats["commiters"].keys() - print("Commiters:") + print("\nCommiters:\n") for commiter in sorted(commits_stats["commiters"].keys(), key=lambda v: v.upper()): print(commiter) translations = get_translations(since) @@ -100,7 +115,7 @@ def main(): translators_ids = sorted(translations_stats["translators"].keys()) # There is no way to query user/author info via weblate API and we need the names… print( - "Execute the following SQL query on the weblate server to get the translators names:" + "\nExecute the following SQL query on the weblate server to get the translators names:" ) print("$ weblate dbshell") print( From 8f3a8243ead95d0fe2befc533ac828ed227e4dbc Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Fri, 28 Jun 2019 10:24:59 +0200 Subject: [PATCH 3/3] Version bump and changelog for 0.19.1 --- CHANGELOG | 49 +++++++++++++++++++++++++++++ api/funkwhale_api/__init__.py | 2 +- changes/changelog.d/122.enhancement | 1 - changes/changelog.d/368.enhancement | 1 - changes/changelog.d/419.enhancement | 1 - changes/changelog.d/708.enhancement | 1 - changes/changelog.d/807.enhancement | 1 - changes/changelog.d/814.enhancement | 1 - changes/changelog.d/832.enhancement | 1 - changes/changelog.d/833.bugfix | 1 - changes/changelog.d/835.bugfix | 1 - changes/changelog.d/838.bugfix | 1 - changes/changelog.d/847.bugfix | 1 - changes/changelog.d/848.bugfix | 1 - changes/changelog.d/849.bugfix | 1 - changes/changelog.d/850.bugfix | 1 - changes/changelog.d/851.bugfix | 1 - changes/changelog.d/855.bugfix | 1 - changes/changelog.d/857.bugfix | 1 - changes/changelog.d/864.enhancement | 1 - changes/changelog.d/867.enhancement | 1 - changes/changelog.d/868.enhancement | 1 - changes/changelog.d/869.bugfix | 1 - 23 files changed, 50 insertions(+), 22 deletions(-) delete mode 100644 changes/changelog.d/122.enhancement delete mode 100644 changes/changelog.d/368.enhancement delete mode 100644 changes/changelog.d/419.enhancement delete mode 100644 changes/changelog.d/708.enhancement delete mode 100644 changes/changelog.d/807.enhancement delete mode 100644 changes/changelog.d/814.enhancement delete mode 100644 changes/changelog.d/832.enhancement delete mode 100644 changes/changelog.d/833.bugfix delete mode 100644 changes/changelog.d/835.bugfix delete mode 100644 changes/changelog.d/838.bugfix delete mode 100644 changes/changelog.d/847.bugfix delete mode 100644 changes/changelog.d/848.bugfix delete mode 100644 changes/changelog.d/849.bugfix delete mode 100644 changes/changelog.d/850.bugfix delete mode 100644 changes/changelog.d/851.bugfix delete mode 100644 changes/changelog.d/855.bugfix delete mode 100644 changes/changelog.d/857.bugfix delete mode 100644 changes/changelog.d/864.enhancement delete mode 100644 changes/changelog.d/867.enhancement delete mode 100644 changes/changelog.d/868.enhancement delete mode 100644 changes/changelog.d/869.bugfix diff --git a/CHANGELOG b/CHANGELOG index f36ebea3b..768b53c38 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,55 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog. .. towncrier +0.19.1 (2018-06-28) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/index.html + +Enhancements: + +- The currently playing track is now highlighted with an orange play icon (#832) +- Support for importing files with no album tag (#122) +- Redirect from / to /library when user is logged in (#864) +- Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) +- Added button to search for objects on Discogs (#368) +- Added copy-to-clipboard button with Subsonic password input (#814) +- Added opus to the list of supported mimetypes and extensions (#868) +- Aligned search headers with search results in the sidebar (#708) +- Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) +- Favorites radio will not be visible if the user does not have any favorites (#419) + + +Bugfixes: + +- Ensure empty but optional fields in file metadata don't error during import (#850) +- Fix broken upload for specific files when using S3 storage (#857) +- Fixed broken translation on home and track detail page (#833) +- Fixed broken user admin for users with non-digit or letters in their username (#869) +- Fixed invalid file extension for transcoded tracks (#848) +- Fixed issue with French translation for "Start radio" (#849) +- Fixed issue with player changing height when hovering over the volume slider (#838) +- Fixed secondary menus truncated on narrow screens (#855) +- Fixed wrong og:image url when using S3 storage (#851) +- Hide pod statistics on about page if those are disabled (#835) +- Use ASCII filename before upload to S3 to avoid playback issues (#847) + + +Contributors to this release (commiters and reviewers): + +- Ciarán Ainsworth +- Creak +- ealgase +- Eliot Berriot +- Esteban +- Freyja Wildes +- hellekin +- Johannes H. +- Mehdi +- Reg + + 0.19.0 (2019-05-16) ------------------- diff --git a/api/funkwhale_api/__init__.py b/api/funkwhale_api/__init__.py index 903b9e39f..7805b7646 100644 --- a/api/funkwhale_api/__init__.py +++ b/api/funkwhale_api/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -__version__ = "0.19.0" +__version__ = "0.19.1" __version_info__ = tuple( [ int(num) if num.isdigit() else num diff --git a/changes/changelog.d/122.enhancement b/changes/changelog.d/122.enhancement deleted file mode 100644 index 2776824c7..000000000 --- a/changes/changelog.d/122.enhancement +++ /dev/null @@ -1 +0,0 @@ -Support for importing files with no album tag (#122) diff --git a/changes/changelog.d/368.enhancement b/changes/changelog.d/368.enhancement deleted file mode 100644 index 7e8f78c0a..000000000 --- a/changes/changelog.d/368.enhancement +++ /dev/null @@ -1 +0,0 @@ -Added button to search for objects on Discogs (#368) diff --git a/changes/changelog.d/419.enhancement b/changes/changelog.d/419.enhancement deleted file mode 100644 index f4716b53e..000000000 --- a/changes/changelog.d/419.enhancement +++ /dev/null @@ -1 +0,0 @@ -Favorites radio will not be visible if the user does not have any favorites (#419) \ No newline at end of file diff --git a/changes/changelog.d/708.enhancement b/changes/changelog.d/708.enhancement deleted file mode 100644 index f3217e5a9..000000000 --- a/changes/changelog.d/708.enhancement +++ /dev/null @@ -1 +0,0 @@ -Aligned search headers with search results in the sidebar (#708) \ No newline at end of file diff --git a/changes/changelog.d/807.enhancement b/changes/changelog.d/807.enhancement deleted file mode 100644 index bab8f9647..000000000 --- a/changes/changelog.d/807.enhancement +++ /dev/null @@ -1 +0,0 @@ -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/changes/changelog.d/814.enhancement b/changes/changelog.d/814.enhancement deleted file mode 100644 index c93b1983c..000000000 --- a/changes/changelog.d/814.enhancement +++ /dev/null @@ -1 +0,0 @@ -Added copy-to-clipboard button with Subsonic password input (#814) diff --git a/changes/changelog.d/832.enhancement b/changes/changelog.d/832.enhancement deleted file mode 100644 index 1a270b88e..000000000 --- a/changes/changelog.d/832.enhancement +++ /dev/null @@ -1 +0,0 @@ -The currently playing track is now highlighted with an orange play icon (#832) \ No newline at end of file diff --git a/changes/changelog.d/833.bugfix b/changes/changelog.d/833.bugfix deleted file mode 100644 index 06ce086f5..000000000 --- a/changes/changelog.d/833.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed broken translation on home and track detail page (#833) diff --git a/changes/changelog.d/835.bugfix b/changes/changelog.d/835.bugfix deleted file mode 100644 index 1a9921ee7..000000000 --- a/changes/changelog.d/835.bugfix +++ /dev/null @@ -1 +0,0 @@ -Hide pod statistics on about page if those are disabled (#835) diff --git a/changes/changelog.d/838.bugfix b/changes/changelog.d/838.bugfix deleted file mode 100644 index 339489756..000000000 --- a/changes/changelog.d/838.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed issue with player changing height when hovering over the volume slider (#838) diff --git a/changes/changelog.d/847.bugfix b/changes/changelog.d/847.bugfix deleted file mode 100644 index d15646721..000000000 --- a/changes/changelog.d/847.bugfix +++ /dev/null @@ -1 +0,0 @@ -Use ASCII filename before upload to S3 to avoid playback issues (#847) diff --git a/changes/changelog.d/848.bugfix b/changes/changelog.d/848.bugfix deleted file mode 100644 index 478a8d42c..000000000 --- a/changes/changelog.d/848.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed invalid file extension for transcoded tracks (#848) diff --git a/changes/changelog.d/849.bugfix b/changes/changelog.d/849.bugfix deleted file mode 100644 index 61f1c2a2e..000000000 --- a/changes/changelog.d/849.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed issue with French translation for "Start radio" (#849) diff --git a/changes/changelog.d/850.bugfix b/changes/changelog.d/850.bugfix deleted file mode 100644 index 0e26ce773..000000000 --- a/changes/changelog.d/850.bugfix +++ /dev/null @@ -1 +0,0 @@ -Ensure empty but optional fields in file metadata don't error during import (#850) diff --git a/changes/changelog.d/851.bugfix b/changes/changelog.d/851.bugfix deleted file mode 100644 index e6866b3e1..000000000 --- a/changes/changelog.d/851.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed wrong og:image url when using S3 storage (#851) diff --git a/changes/changelog.d/855.bugfix b/changes/changelog.d/855.bugfix deleted file mode 100644 index 171865ed7..000000000 --- a/changes/changelog.d/855.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed secondary menus truncated on narrow screens (#855) diff --git a/changes/changelog.d/857.bugfix b/changes/changelog.d/857.bugfix deleted file mode 100644 index 5d525e3d9..000000000 --- a/changes/changelog.d/857.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix broken upload for specific files when using S3 storage (#857) diff --git a/changes/changelog.d/864.enhancement b/changes/changelog.d/864.enhancement deleted file mode 100644 index f903ac850..000000000 --- a/changes/changelog.d/864.enhancement +++ /dev/null @@ -1 +0,0 @@ -Redirect from / to /library when user is logged in (#864) diff --git a/changes/changelog.d/867.enhancement b/changes/changelog.d/867.enhancement deleted file mode 100644 index ed889184d..000000000 --- a/changes/changelog.d/867.enhancement +++ /dev/null @@ -1 +0,0 @@ -Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) diff --git a/changes/changelog.d/868.enhancement b/changes/changelog.d/868.enhancement deleted file mode 100644 index 13fc39530..000000000 --- a/changes/changelog.d/868.enhancement +++ /dev/null @@ -1 +0,0 @@ -Added opus to the list of supported mimetypes and extensions (#868) diff --git a/changes/changelog.d/869.bugfix b/changes/changelog.d/869.bugfix deleted file mode 100644 index 7d56f3175..000000000 --- a/changes/changelog.d/869.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed broken user admin for users with non-digit or letters in their username (#869)