559 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			559 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| Changelog
 | ||
| =========
 | ||
| 
 | ||
| .. towncrier
 | ||
| 
 | ||
| 0.10 (Unreleased)
 | ||
| -----------------
 | ||
| 
 | ||
| 
 | ||
| In-place import
 | ||
| ^^^^^^^^^^^^^^^
 | ||
| 
 | ||
| This release includes in-place imports for the CLI import. This means you can
 | ||
| load gigabytes of music into funkwhale without worrying about about Funkwhale
 | ||
| copying those music files in its internal storage and eating your disk space.
 | ||
| 
 | ||
| This new feature is documented <here> and require additional configuration
 | ||
| to ensure funkwhale and your webserver can serve those files properly.
 | ||
| 
 | ||
| **Non-docker users:**
 | ||
| 
 | ||
| Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following
 | ||
| block to your nginx configuration::
 | ||
| 
 | ||
|     location /_protected/music {
 | ||
|         internal;
 | ||
|         alias   /srv/funkwhale/data/music;
 | ||
|     }
 | ||
| 
 | ||
| And the following to your .env file::
 | ||
| 
 | ||
|     MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music
 | ||
| 
 | ||
| **Docker users:**
 | ||
| 
 | ||
| Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following
 | ||
| block to your nginx configuration::
 | ||
| 
 | ||
|     location /_protected/music {
 | ||
|         internal;
 | ||
|         alias   /srv/funkwhale/data/music;
 | ||
|     }
 | ||
| 
 | ||
| Assuming you have the following volume directive in your ``docker-compose.yml``
 | ||
| (it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add
 | ||
| the following to your .env file::
 | ||
| 
 | ||
|     MUSIC_DIRECTORY_PATH=/music
 | ||
|     MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music
 | ||
| 
 | ||
| 
 | ||
| 0.9.1 (2018-04-17)
 | ||
| ------------------
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Allow null values for musicbrainz_id in Audio ActivityPub representation
 | ||
| - Fixed broken permission check on library scanning and too aggressive page
 | ||
|   validation
 | ||
| 
 | ||
| 
 | ||
| 0.9 (2018-04-17)
 | ||
| ----------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Add internationalization support (#5)
 | ||
| - Can now follow and import music from remote libraries (#136, #137)
 | ||
| 
 | ||
| 
 | ||
| Enhancements:
 | ||
| 
 | ||
| - Added a i18n-extract yarn script to extract strings to PO files (#162)
 | ||
| - User admin now includes signup and last login dates (#148)
 | ||
| - We now use a proper user agent including instance version and url during
 | ||
|   outgoing requests
 | ||
| 
 | ||
| 
 | ||
| Federation is here!
 | ||
| ^^^^^^^^^^^^^^^^^^^
 | ||
| 
 | ||
| This is for real this time, and includes:
 | ||
| 
 | ||
| - Following other Funkwhale libraries
 | ||
| - Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time)
 | ||
| - Searching accross federated catalogs
 | ||
| 
 | ||
| Note that by default, federation is opt-in, on a per-instance basis:
 | ||
| instances will request access to your catalog, and you can accept or refuse
 | ||
| those requests. You can also revoke the access at any time.
 | ||
| 
 | ||
| Documentation was updated with relevant instructions to use and benefit
 | ||
| from this new feature: https://docs.funkwhale.audio/federation.html
 | ||
| 
 | ||
| Preparing internationalization
 | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | ||
| 
 | ||
| Funkwhale's front-end as always been english-only, and this is a barrier
 | ||
| to new users. The work make Funkwhale's interface translatable was started
 | ||
| in this release by Baptiste. Although nothing is translated yet,
 | ||
| this release includes behind the stage changes that will make it possible in
 | ||
| the near future.
 | ||
| 
 | ||
| Many thank to Baptiste for the hard work and for figuring out a proper solution
 | ||
| to this difficult problem.
 | ||
| 
 | ||
| Upgrade path
 | ||
| ^^^^^^^^^^^^
 | ||
| 
 | ||
| In addition to the usual instructions from
 | ||
| https://docs.funkwhale.audio/upgrading.html, non-docker users will have
 | ||
| to setup an additional systemd unit file for recurrent tasks.
 | ||
| 
 | ||
| This was forgotten in the deployment documentation, but recurrent tasks,
 | ||
| managed by the celery beat process, will be needed more and more in subsequent
 | ||
| releases. Right now, we'll be using to clear the cache for federated music files
 | ||
| and keep disk usage to a minimum.
 | ||
| 
 | ||
| In the future, they will also be needed to refetch music metadata or federated
 | ||
| information periodically.
 | ||
| 
 | ||
| Celery beat can be enabled easily::
 | ||
| 
 | ||
|     curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://code.eliotberriot.com/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service"
 | ||
|     # Also edit /etc/systemd/system/funkwhale.target
 | ||
|     # and ensure the Wants= line contains the following:
 | ||
|     # Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service
 | ||
|     nano /etc/systemd/system/funkwhale.target
 | ||
|     # reload configuration
 | ||
|     systemctl daemon-reload
 | ||
| 
 | ||
| Docker users already have celerybeat enabled.
 | ||
| 
 | ||
| 
 | ||
| 0.8 (2018-04-02)
 | ||
| ----------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Add a detail page for radios (#64)
 | ||
| - Implemented page title binding (#1)
 | ||
| - Previous Track button restart playback after 3 seconds (#146)
 | ||
| 
 | ||
| 
 | ||
| Enhancements:
 | ||
| 
 | ||
| - Added credits to Francis Gading for the logotype (#101)
 | ||
| - API endpoint for fetching instance activity and updated timeline to use this
 | ||
|   new endpoint (#141)
 | ||
| - Better error messages in case of missing environment variables (#140)
 | ||
| - Implemented a @test@yourfunkwhaledomain bot to ensure federation works
 | ||
|   properly. Send it "/ping" and it will answer back :)
 | ||
| - Queue shuffle now apply only to tracks after the current one (#97)
 | ||
| - Removed player from queue tab and consistently show current track in queue
 | ||
|   (#131)
 | ||
| - We now restrict some usernames from being used during signup (#139)
 | ||
| 
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Better error handling during file import (#120)
 | ||
| - Better handling of utf-8 filenames during file import (#138)
 | ||
| - Converted favicon from .ico to .png (#130)
 | ||
| - Upgraded to Python 3.6 to fix weird but harmless weakref error on django task
 | ||
|   (#121)
 | ||
| 
 | ||
| 
 | ||
| Documentation:
 | ||
| 
 | ||
| - Documented the upgrade process (#127)
 | ||
| 
 | ||
| 
 | ||
| Preparing for federation
 | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^
 | ||
| 
 | ||
| Federation of music libraries is one of the most asked feature.
 | ||
| While there is still a lot of work to do, this version includes
 | ||
| the foundation that will enable funkwhale servers to communicate
 | ||
| between each others, and with other federated software, such as
 | ||
| Mastodon.
 | ||
| 
 | ||
| Funkwhale will use ActivityPub as it's federation protocol.
 | ||
| 
 | ||
| In order to prepare for federation (see #136 and #137), new API endpoints
 | ||
| have been added under /federation and /.well-known/webfinger.
 | ||
| 
 | ||
| For these endpoints to work, you will need to update your nginx configuration,
 | ||
| and add the following snippets::
 | ||
| 
 | ||
|     location /federation/ {
 | ||
|         include /etc/nginx/funkwhale_proxy.conf;
 | ||
|         proxy_pass   http://funkwhale-api/federation/;
 | ||
|     }
 | ||
| 
 | ||
|     location /.well-known/webfinger {
 | ||
|         include /etc/nginx/funkwhale_proxy.conf;
 | ||
|         proxy_pass   http://funkwhale-api/.well-known/webfinger;
 | ||
|     }
 | ||
| 
 | ||
| This will ensure federation endpoints will be reachable in the future.
 | ||
| You can of course skip this part if you know you will not federate your instance.
 | ||
| 
 | ||
| A new ``FEDERATION_ENABLED`` env var have also been added to control whether
 | ||
| federation is enabled or not on the application side. This settings defaults
 | ||
| to True, which should have no consequences at the moment, since actual
 | ||
| federation is not implemented and the only available endpoints are for
 | ||
| testing purposes.
 | ||
| 
 | ||
| Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation
 | ||
| on the application side.
 | ||
| 
 | ||
| To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain,
 | ||
| and sending it "/ping", for example, via Mastodon, should trigger
 | ||
| a response.
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 0.7 (2018-03-21)
 | ||
| ----------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Can now filter artists and albums with no listenable tracks (#114)
 | ||
| - Improve the style of the sidebar to make it easier to understand which tab is
 | ||
|   selected (#118)
 | ||
| - On artist page, albums are not sorted by release date, if any (#116)
 | ||
| - Playlists are here \o/ :tada: (#3, #93, #94)
 | ||
| - Use django-cacheops to cache common ORM requests (#117)
 | ||
| 
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Fixed broken import request admin (#115)
 | ||
| - Fixed forced redirection to login event with
 | ||
|   API_AUTHENTICATION_REQUIRED=False (#119)
 | ||
| - Fixed position not being reseted properly when playing the same track
 | ||
|   multiple times in a row
 | ||
| - Fixed synchronized start/stop radio buttons for all custom radios (#103)
 | ||
| - Fixed typo and missing icon on homepage (#96)
 | ||
| 
 | ||
| 
 | ||
| Documentation:
 | ||
| 
 | ||
| - Up-to-date and complete development and contribution instructions in
 | ||
|   README.rst (#123)
 | ||
| 
 | ||
| 
 | ||
| 0.6.1 (2018-03-06)
 | ||
| ------------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Can now skip acoustid on file import with the --no-acoustid flag (#111)
 | ||
| 
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Added missing batch id in output during import (#112)
 | ||
| - Added some feedback on the play button (#100)
 | ||
| - Smarter pagination which takes a fixed size (#84)
 | ||
| 
 | ||
| 
 | ||
| Other:
 | ||
| 
 | ||
| - Completely removed django-cachalot from the codebase (#110). You can safely
 | ||
|   remove the CACHALOT_ENABLED setting from your .env file
 | ||
| 
 | ||
| 
 | ||
| 0.6 (2018-03-04)
 | ||
| ----------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Basic activity stream for listening and favorites (#23)
 | ||
| - Switched to django-channels and daphne for serving HTTP and websocket (#34)
 | ||
| 
 | ||
| Upgrades notes
 | ||
| **************
 | ||
| 
 | ||
| This version contains breaking changes in the way funkwhale is deployed,
 | ||
| please read the notes carefully.
 | ||
| 
 | ||
| Instance timeline
 | ||
| ^^^^^^^^^^^^^^^^^
 | ||
| 
 | ||
| A new "Activity" page is now available from the sidebar, where you can
 | ||
| browse your instance activity. At the moment, this includes other users
 | ||
| favorites and listening, but more activity types will be implemented in the
 | ||
| future.
 | ||
| 
 | ||
| Internally, we implemented those events by following the Activity Stream
 | ||
| specification, which will help us to be compatible with other networks
 | ||
| in the long-term.
 | ||
| 
 | ||
| A new settings page has been added to control the visibility of your activity.
 | ||
| By default, your activity will be browsable by anyone on your instance,
 | ||
| but you can switch to a full private mode where nothing is shared.
 | ||
| 
 | ||
| The setting form is available in your profile.
 | ||
| 
 | ||
| Switch from gunicorn to daphne
 | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | ||
| 
 | ||
| This release include an important change in the way we serve the HTTP API.
 | ||
| To prepare for new realtime features and enable websocket support in Funkwhale,
 | ||
| we are now using django-channels and daphne to serve HTTP and websocket traffic.
 | ||
| 
 | ||
| This replaces gunicorn and the switch should be easy assuming you
 | ||
| follow the upgrade process described bellow.
 | ||
| 
 | ||
| If you are using docker, please remove the command instruction inside the
 | ||
| api service, as the up-to-date command is now included directly in the image
 | ||
| as the default entry point:
 | ||
| 
 | ||
| .. code-block:: yaml
 | ||
| 
 | ||
|     api:
 | ||
|       restart: unless-stopped
 | ||
|       image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest}
 | ||
|       command: ./compose/django/gunicorn.sh  # You can remove this line
 | ||
| 
 | ||
| On non docker setups, you'll have to update the [Service] block of your
 | ||
| funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn.
 | ||
| 
 | ||
| The new configuration should be similar to this:
 | ||
| 
 | ||
| .. code-block:: ini
 | ||
| 
 | ||
|     [Service]
 | ||
|     User=funkwhale
 | ||
|     # adapt this depending on the path of your funkwhale installation
 | ||
|     WorkingDirectory=/srv/funkwhale/api
 | ||
|     EnvironmentFile=/srv/funkwhale/config/.env
 | ||
|     ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application
 | ||
| 
 | ||
| Ensure you update funkwhale's dependencies as usual to install the required
 | ||
| packages.
 | ||
| 
 | ||
| On both docker and non-docker setup, you'll also have to update your nginx
 | ||
| configuration for websocket support. Ensure you have the following blocks
 | ||
| included in your virtualhost file:
 | ||
| 
 | ||
| .. code-block:: txt
 | ||
| 
 | ||
|     map $http_upgrade $connection_upgrade {
 | ||
|         default upgrade;
 | ||
|         ''      close;
 | ||
|     }
 | ||
| 
 | ||
|     server {
 | ||
|         ...
 | ||
|         proxy_http_version 1.1;
 | ||
|         proxy_set_header Upgrade $http_upgrade;
 | ||
|         proxy_set_header Connection $connection_upgrade;
 | ||
|     }
 | ||
| 
 | ||
| Remember to reload your nginx server after the edit.
 | ||
| 
 | ||
| 
 | ||
| 0.5.4 (2018-02-28)
 | ||
| ------------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Now stop running radio when clearing queue (#98)
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Fixed queue skipping tracks (#91)
 | ||
| - Now loop properly on queue when we only have one track (#95)
 | ||
| 
 | ||
| 
 | ||
| 0.5.3 (2018-02-27)
 | ||
| ------------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Added admin interface for radios, track files, favorites and import requests (#80)
 | ||
| - Added basic instance stats on /about (#82)
 | ||
| - Search now unaccent letters for queries like "The Dø" or "Björk" yielding more results (#81)
 | ||
| 
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Always use username in sidebar (#89)
 | ||
| - Click event outside of player icons (#83)
 | ||
| - Fixed broken import because of missing transaction
 | ||
| - Now always load next radio track on last queue track ended (#87)
 | ||
| - Now exclude tracks without file from radio candidates (#88)
 | ||
| - skip to next track properly on 40X errors (#86)
 | ||
| 
 | ||
| 
 | ||
| Other:
 | ||
| 
 | ||
| - Switched to towncrier for changelog management and compilation
 | ||
| 
 | ||
| 
 | ||
| 0.5.2 (2018-02-26)
 | ||
| ------------------
 | ||
| 
 | ||
| - Fixed broken file import due to wrong url (#73)
 | ||
| - More accurate mimetype detection
 | ||
| - Fixed really small size on small screens
 | ||
| - Added masonry layout for artists, requests and radios (#68)
 | ||
| - We now have a favicon!
 | ||
| - Fixed truncated play icon (#65)
 | ||
| 
 | ||
| 
 | ||
| 0.5.1 (2018-02-24)
 | ||
| ------------------
 | ||
| 
 | ||
| - Front: Fixed broken ajax call on radio builder (#69)
 | ||
| - Front: Shuffle now restart next track from beginning (#70)
 | ||
| - Front: volume slider should now have the same style everywhere (#72)
 | ||
| 
 | ||
| 
 | ||
| 0.5 (2018-02-24)
 | ||
| ----------------
 | ||
| 
 | ||
| - Front: Now reset player colors when track has no cover (#46)
 | ||
| - Front: play button now disabled for unplayable tracks
 | ||
| - API: You can now enable or disable registration on the fly, via a preference (#58)
 | ||
| - Front: can now signup via the web interface (#35)
 | ||
| - Front: Fixed broken redirection on login
 | ||
| - Front: Fixed broken error handling on settings and login form
 | ||
| 
 | ||
| About page:
 | ||
| 
 | ||
| There is a brand new about page on instances (/about), and instance
 | ||
| owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/).
 | ||
| 
 | ||
| Transcoding:
 | ||
| 
 | ||
| Basic transcoding is now available to/from the following formats : ogg and mp3.
 | ||
| 
 | ||
| *This is still an alpha feature at the moment, please report any bug.*
 | ||
| 
 | ||
| This relies internally on FFMPEG and can put some load on your server.
 | ||
| It's definitely recommended you setup some caching for the transcoded files
 | ||
| at your webserver level. Check the the exemple nginx file at deploy/nginx.conf
 | ||
| for an implementation.
 | ||
| 
 | ||
| On the frontend, usage of transcoding should be transparent in the player.
 | ||
| 
 | ||
| Music Requests:
 | ||
| 
 | ||
| This release includes a new feature, music requests, which allows users
 | ||
| to request music they'd like to see imported.
 | ||
| Admins can browse those requests and mark them as completed when
 | ||
| an import is made.
 | ||
| 
 | ||
| 0.4 (2018-02-18)
 | ||
| ----------------
 | ||
| 
 | ||
| - Front: ambiant colors in player based on current track cover (#59)
 | ||
| - Front: simplified front dev setup thanks to webpack proxy (#59)
 | ||
| - Front: added some unittests for the store (#55)
 | ||
| - Front: fixed broken login redirection when 401
 | ||
| - Front: Removed autoplay on page reload
 | ||
| - API: Added a /instance/settings endpoint
 | ||
| - Front: load /instance/settings on page load
 | ||
| - Added settings to report JS and Python error to a Sentry instance
 | ||
|   This is disabled by default, but feel free to enable it if you want
 | ||
|   to help us by sending your error reports :) (#8)
 | ||
| 
 | ||
| 
 | ||
| 0.3.5 (2018-01-07)
 | ||
| ------------------
 | ||
| 
 | ||
| - Smarter BACKEND_URL in frontend
 | ||
| 
 | ||
| 
 | ||
| 0.3.4 (2018-01-07)
 | ||
| ------------------
 | ||
| 
 | ||
| - Fixed wrong URL construction in ajax call
 | ||
| 
 | ||
| 
 | ||
| 0.3.3 (2018-01-07)
 | ||
| ------------------
 | ||
| 
 | ||
| - Users can now create their own dynamic radios (#51)
 | ||
| 
 | ||
| 
 | ||
| 0.3.2
 | ||
| ------------------
 | ||
| 
 | ||
| - Fixed an issue in the main dockerfile
 | ||
| 
 | ||
| 
 | ||
| 0.3.1
 | ||
| ------------------
 | ||
| 
 | ||
| - Revamped all import logic, everything is more tested and consistend
 | ||
| - Can now use Acoustid in file imports to automatically grab metadata from musicbrainz
 | ||
| - Brand new file import wizard
 | ||
| 
 | ||
| 
 | ||
| 0.2.7
 | ||
| ------------------
 | ||
| 
 | ||
| - Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track
 | ||
|   as a favorite (#53)
 | ||
| - Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53)
 | ||
| - Player: Added looping controls and shortcuts (#52)
 | ||
| - Player: Added shuffling controls and shortcuts (#52)
 | ||
| - Favorites: can now modify the ordering of track list (#50)
 | ||
| - Library: can now search/reorder results on artist browsing view (#50)
 | ||
| - Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files
 | ||
| - Fixed #56: invalidate tokens on password change, also added change password form
 | ||
| - Fixed #57: now refresh jwt token on page refresh
 | ||
| - removed ugly dividers in batch import list
 | ||
| - Fixed a few padding issues
 | ||
| - Now persist/restore queue/radio/player state automatically
 | ||
| - Removed old broken imports
 | ||
| - Now force tests paths
 | ||
| - Fixed #54: Now use pytest everywhere \o/
 | ||
| - Now use vuex to manage state for favorites
 | ||
| - Now use vuex to manage state for authentication
 | ||
| - Now use vuex to manage state for player/queue/radios
 | ||
| 
 | ||
| 
 | ||
| 0.2.6 (2017-12-15)
 | ||
| ------------------
 | ||
| 
 | ||
| - Fixed broken Dockerfile
 | ||
| 
 | ||
| 
 | ||
| 0.2.5 (2017-12-15)
 | ||
| ------------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Import: can now specify search template when querying import sources (#45)
 | ||
| - Login form: now redirect to previous page after login (#2)
 | ||
| - 404: a decent 404 template, at least (#48)
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Player: better handling of errors when fetching the audio file (#46)
 | ||
| - Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49)
 | ||
| 
 | ||
| Tech:
 | ||
| 
 | ||
| - Django 2 compatibility, lot of packages upgrades (#47)
 | ||
| 
 | ||
| 
 | ||
| 0.2.4 (2017-12-14)
 | ||
| ------------------
 | ||
| 
 | ||
| Features:
 | ||
| 
 | ||
| - Models: now store relese group mbid on Album model (#7)
 | ||
| - Models: now bind import job to track files (#44)
 | ||
| 
 | ||
| Bugfixes:
 | ||
| 
 | ||
| - Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43)
 |