funkwhale issueshttps://dev.funkwhale.audio/groups/funkwhale/-/issues2023-11-13T08:07:35Zhttps://dev.funkwhale.audio/funkwhale/ui/-/issues/36Add cursor pointer to active buttons2023-11-13T08:07:35ZCiarán Ainsworthsporiff@funkwhale.audioAdd cursor pointer to active buttonsWhen using the buttons in Funkwhale, the cursor doesn't automatically change to `pointer` since there is no directive in the component. We should add this for any non-disabled button to make sure it's visually clear that the entire butto...When using the buttons in Funkwhale, the cursor doesn't automatically change to `pointer` since there is no directive in the component. We should add this for any non-disabled button to make sure it's visually clear that the entire button is selectable.v0.2.3Ciarán Ainsworthsporiff@funkwhale.audioCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/ui/-/issues/35Add control for icon position on buttons2023-11-13T08:07:14ZCiarán Ainsworthsporiff@funkwhale.audioAdd control for icon position on buttonsCurrently, any button with an `icon` prop will display the icon to the left of the button text. For actions such as navigation, it's visually cleaner to have the icon on the right. This would help us to remain consistent with our current...Currently, any button with an `icon` prop will display the icon to the left of the button text. For actions such as navigation, it's visually cleaner to have the icon on the right. This would help us to remain consistent with our current button designs
We should add a prop to control the position of the icon, defaulting to `left` to maintain consistency.
![Screenshot_2023-11-12_at_16.13.18](/uploads/a9461f32e8d35349d46fabf3e401dd1e/Screenshot_2023-11-12_at_16.13.18.png)v0.2.3Ciarán Ainsworthsporiff@funkwhale.audioCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/ansible/-/issues/38funkwhale : reload nginx failing when using http only2023-11-09T13:39:24Ziameru1funkwhale : reload nginx failing when using http onlyI am running the following, reproducible with vagrant:
Vagrantfile:
```
Vagrant.configure("2") do |config|
config.vm.define "funkwhale"
config.vm.hostname = "funkwhale"
config.vm.box = "generic/debian12"
end
```
Playbook:
```
- h...I am running the following, reproducible with vagrant:
Vagrantfile:
```
Vagrant.configure("2") do |config|
config.vm.define "funkwhale"
config.vm.hostname = "funkwhale"
config.vm.box = "generic/debian12"
end
```
Playbook:
```
- hosts: funkwhale-servers
roles:
- role: funkwhale
funkwhale_hostname: funkwhale.local
funkwhale_letsencrypt_email: harri@krishna.com
funkwhale_protocol: http
funkwhale_letsencrypt_enabled: false
```
this yields the error:
```
RUNNING HANDLER [funkwhale : reload nginx] **************************************************************************************************************************************************************************
fatal: [vagrant@192.168.121.239]: FAILED! => {"changed": false, "msg": "Unable to reload service nginx: Job for nginx.service failed.\nSee \"systemctl status nginx.service\" and \"journalctl -xeu nginx.service\" for details.\n"}
```
It is probably because the `/etc/nginx/sites-enabled/funkwhale.local.conf` looks like this
note, I will omit the full server block for 443 as you get the point probably.
```
upstream funkwhale-api {
server 127.0.0.1:5000;
}
server {
listen 80;
listen [::]:80;
server_name funkwhale.local;
location /.well-known/ {
allow all;
include /etc/nginx/funkwhale_proxy.conf;
proxy_pass http://127.0.0.1:5000/.well-known/;
}
location / {
return 301 https://$host$request_uri;
}
}
# Required for websocket support.
map $http_upgrade $funkwhale_connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
charset utf-8;
server_name funkwhale.local;
ssl_certificate /etc/letsencrypt/live/funkwhale.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/funkwhale.local/privkey.pem;
### REST OF BLOCK OMITTED
```https://dev.funkwhale.audio/funkwhale/funkwhale-android/-/issues/111Can't log in to my local instance (HTTP, custom DNS entry)2023-11-07T03:57:34ZNathan SchepersCan't log in to my local instance (HTTP, custom DNS entry)**Describe the bug**
I have everything set up and can access my funkwhale instance from my browser and from my mobile's browser, but the funkwhale app will not connect.
**How to reproduce**
1. Open the app
2. Enter my host
3. Select c...**Describe the bug**
I have everything set up and can access my funkwhale instance from my browser and from my mobile's browser, but the funkwhale app will not connect.
**How to reproduce**
1. Open the app
2. Enter my host
3. Select cleartext (or don't, actually, same error)
4. Press Login
5. See 'Login Failed'
**Expected behavior**
Not sure - a u/p prompt?
**Actual behavior**
See screenshot
**Screenshots**
![error](/uploads/04dd88646d476a43ae3eb23ed9813e09/error.png)
**Environment details**
- Device: Pixel 4
- Android version: 12
- App version: Latest as of today (but not 'preview')
**Logs**
Didn't grab them (yet), maybe it's just something silly on my part.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2231Avoid troi duplicates (same track but different fw ids)2023-11-03T16:14:00ZpetitminionAvoid troi duplicates (same track but different fw ids)- duplicate mbid in fw db
- duplicate cache and fw db qs- duplicate mbid in fw db
- duplicate cache and fw db qshttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2215Custom logger does not work at all with Webkit and Blink based browsers2023-11-01T13:23:23ZJohann QueunietCustom logger does not work at all with Webkit and Blink based browsers<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue re...<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue respect our guidelines.
To ensure your bug report is as useful as possible, please try to stick
to the following structure. You can leave the parts text between `<!- ->`
markers untouched, they won't be displayed in your final message.
Please do not edit the following line, it's used for automatic classification
-->
## Steps to reproduce
1. Load any Funkwhale page on a Webkit or Blink-based browser
2. Frontend scripts crash almost immediately and the page remains stuck on "Loading Funkwhale".
## What happens?
Frontend does not work at all, on any URL
## What is expected?
Frontend works as expected
## Context
**Funkwhale version(s) affected**: 1.3.2
* Safari 17, Vivaldi 6.2 on macOS, Chrome 116 on Android
### Console errors
Vivaldi
```
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu
(anonymous) @ audio-context-constructor.js:11
(anonymous) @ audio-api.ts:7
useLogger.ts:49 Uncaught TypeError: Cannot read properties of undefined (reading 'startsWith')
at T$ (useLogger.ts:49:20)
at Object.warn (useLogger.ts:61:38)
at instance.ts:132:1
T$ @ useLogger.ts:49
(anonymous) @ useLogger.ts:61
(anonymous) @ instance.ts:132
```
Safari
```
[Error] TypeError: undefined is not an object (evaluating 'r.startsWith')
T$ (index-7553c8ab.js:28:82)
(anonymous function) (index-7553c8ab.js:28:279)
Module Code (index-7553c8ab.js:30:106957)
```
This behaviour is reproducible with any public 1.3.2 Funkwhale pod I could find and does not seem specific to my instance. 1.3.1 pods work as expected.
Frontend behaves mostly as expected on Firefox, but web player raises similar errors in useLogger.ts when trying to process various background events (switching to the next track, sending listening notifications, see #2214 )
![Screenshot_2023-09-04_at_07.33.56](/uploads/f4bbe32c404ccd98beec6d31c0dea8e8/Screenshot_2023-09-04_at_07.33.56.png)1.4.0Kasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2230Add authorization check for radio session track api v22023-10-25T15:45:28ZpetitminionAdd authorization check for radio session track api v2radio session track api v2 is too permissive, add permission checkradio session track api v2 is too permissive, add permission checkpetitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale-android/-/issues/142The app crashes a lot when in Favourite section2023-10-22T04:03:49ZSempronio RossiThe app crashes a lot when in Favourite sectionwhenever I get near my favourite tracks**Describe the bug**
The app crashes everytime I try to manage my favourite tracks.
**How to reproduce**
1. Open the app
2. Click on Favourite section
3. Remove a song from the list
4. The app cra...whenever I get near my favourite tracks**Describe the bug**
The app crashes everytime I try to manage my favourite tracks.
**How to reproduce**
1. Open the app
2. Click on Favourite section
3. Remove a song from the list
4. The app crashes
**Expected behavior**
I expect the song to be removed.
**Actual behavior**
The app crashes.
**Environment details**
- Xiaomi Redmi Note 7
- Android 12
- App version: 0.2.1-1
- If public Funkwhale instance, its URL: funkwhale.it
**Logs**
```
--------- beginning of main
05-01 10:32:47.519 5705 9762 I HttpUpstream: get() - url: /api/v1/artists/?playable=true&ordering=name&page_size=50&page=6&scope=all
05-01 10:32:47.521 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:47.532 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:49.053 5705 9762 I HttpUpstream: get() - url: /api/v1/artists/?playable=true&ordering=name&page_size=50&page=7&scope=all
05-01 10:32:49.055 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:49.070 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:50.613 5705 9762 I HttpUpstream: get() - url: /api/v1/artists/?playable=true&ordering=name&page_size=50&page=8&scope=all
05-01 10:32:50.614 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:50.627 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:53.233 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:32:53.235 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:53.251 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:54.013 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=2&scope=all
05-01 10:32:54.015 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:54.023 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:54.852 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:32:54.854 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:54.869 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:32:56.145 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=3&scope=all
05-01 10:32:56.148 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:56.159 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:56.351 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=2&scope=all
05-01 10:32:56.352 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:56.367 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:32:57.036 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=4&scope=all
05-01 10:32:57.037 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:57.051 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:57.472 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=3&scope=all
05-01 10:32:57.474 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:57.485 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:32:57.854 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=5&scope=all
05-01 10:32:57.856 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:57.870 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:58.544 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=4&scope=all
05-01 10:32:58.545 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:58.556 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:32:58.589 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=6&scope=all
05-01 10:32:58.590 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:58.609 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:32:59.285 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=5&scope=all
05-01 10:32:59.286 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:32:59.298 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:00.107 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=6&scope=all
05-01 10:33:00.109 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:00.119 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:05.212 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:05.233 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:05.336 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:05.338 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:05.352 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:07.079 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:07.098 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:07.181 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:07.185 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:07.200 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:08.129 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:08.151 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:08.239 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:08.241 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:08.256 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:08.979 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:08.998 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:09.080 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:09.082 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:09.105 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:09.748 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:09.754 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:09.835 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:09.836 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:09.852 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:10.547 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:10.556 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:10.639 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:10.640 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:10.645 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:11.297 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:11.319 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:11.391 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:11.392 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:11.401 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:12.081 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:12.100 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:12.172 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:12.173 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:12.181 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:13.531 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:13.550 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:15.331 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:15.352 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:15.517 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:15.519 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:15.532 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:15.592 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:15.594 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:15.605 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:33:16.652 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:16.662 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:16.749 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:16.753 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:16.769 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:33:18.557 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:33:18.559 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:18.573 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:19.513 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=2&scope=all
05-01 10:33:19.514 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:19.526 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:20.344 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=3&scope=all
05-01 10:33:20.346 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:20.361 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:21.221 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=4&scope=all
05-01 10:33:21.222 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:21.237 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:21.992 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=5&scope=all
05-01 10:33:21.993 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:22.006 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:22.620 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=6&scope=all
05-01 10:33:22.622 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:22.632 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:23.934 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:23.954 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:24.076 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:24.077 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:24.090 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:24.951 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:24.967 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:25.043 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:25.045 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:25.060 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:25.851 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:25.869 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:25.982 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:25.983 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:25.997 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:26.705 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:26.723 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:26.792 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:26.793 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:26.802 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:27.518 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:27.538 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:27.647 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:27.649 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:27.667 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:28.302 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:28.319 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:28.397 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:28.397 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:28.408 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:29.002 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:29.021 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:29.112 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:29.114 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:29.131 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:29.706 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:29.724 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:29.833 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:29.834 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:29.849 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:30.486 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:30.504 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:30.596 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:30.597 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:30.607 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:31.286 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:31.307 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:31.600 5705 9763 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:31.602 5705 9763 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:31.615 5705 9763 I Request.authorize(): Accesstoken not renewed
05-01 10:33:32.153 5705 5705 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:32.168 5705 5705 I Request.authorize(): Accesstoken not renewed
05-01 10:33:34.695 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:33:34.697 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:34.713 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:39.251 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=2&scope=all
05-01 10:33:39.252 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:39.264 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:40.118 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=3&scope=all
05-01 10:33:40.119 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:40.131 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:40.828 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=4&scope=all
05-01 10:33:40.829 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:40.837 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:41.693 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=5&scope=all
05-01 10:33:41.695 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:41.705 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:42.386 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=6&scope=all
05-01 10:33:42.388 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:42.399 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:42.881 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:33:42.882 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:42.892 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:43.776 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=2&scope=all
05-01 10:33:43.777 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:43.788 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:44.736 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=3&scope=all
05-01 10:33:44.737 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:44.750 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:47.253 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:33:47.254 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:47.269 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:47.447 5705 9762 I HttpUpstream: get() - url: /api/v1/favorites/tracks/all/?playable=true&page_size=50&page=1&scope=all
05-01 10:33:47.449 5705 9762 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:47.458 5705 9762 I Request.authorize(): Accesstoken not renewed
05-01 10:33:47.658 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=4&scope=all
05-01 10:33:47.659 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:47.669 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:47.782 5705 5716 I o.funkwhale.ff: Background concurrent copying GC freed 128595(6108KB) AllocSpace objects, 113(8432KB) LOS objects, 66% free, 15MB/46MB, paused 741us,1.252ms total 118.896ms
05-01 10:33:48.432 5705 10465 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=1&scope=all
05-01 10:33:48.433 5705 10465 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:48.447 5705 10465 I Request.authorize(): Accesstoken not renewed
05-01 10:33:49.116 5705 10478 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=5&scope=all
05-01 10:33:49.117 5705 10478 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:49.133 5705 10478 I Request.authorize(): Accesstoken not renewed
05-01 10:33:49.396 5705 10480 I HttpUpstream: get() - url: /api/v1/favorites/tracks/?scope=all&ordering=-creation_date&page_size=50&page=2&scope=all
05-01 10:33:49.397 5705 10480 I Request.authorize(): Accesstoken expiration: 2023-05-01T20:32:35+0200
05-01 10:33:49.405 5705 10480 I Request.authorize(): Accesstoken not renewed
05-01 10:33:49.415 5705 5705 D AndroidRuntime: Shutting down VM
--------- beginning of crash
05-01 10:33:49.419 5705 5705 E AndroidRuntime: FATAL EXCEPTION: main
05-01 10:33:49.419 5705 5705 E AndroidRuntime: Process: audio.funkwhale.ffa, PID: 5705
05-01 10:33:49.419 5705 5705 E AndroidRuntime: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{15e45ae position=109 id=227, oldPos=-1, pLpos:-1 no parent} androidx.recyclerview.widget.RecyclerView{807f3ca VFED..... ......ID 0,0-1080,1861 #7f0a00f8 app:id/favorites}, adapter:audio.funkwhale.ffa.adapters.FavoritesAdapter@d164aa0, layout:androidx.recyclerview.widget.LinearLayoutManager@424f21e, context:audio.funkwhale.ffa.activities.MainActivity@921566a
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.RecyclerView$t.i(SourceFile:565)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.LinearLayoutManager$c.b(SourceFile:59)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.LinearLayoutManager.Y0(SourceFile:1)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.LinearLayoutManager.L0(SourceFile:54)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.LinearLayoutManager.d1(Unknown Source:34)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.LinearLayoutManager.s0(Unknown Source:6)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.RecyclerView.b0(SourceFile:36)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at androidx.recyclerview.widget.RecyclerView$a0.run(SourceFile:98)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:845)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:775)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:938)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7870)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550)
05-01 10:33:49.419 5705 5705 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{15e45ae position=109 id=227, oldPos=-1, pLpos:-1 no parent} androidx.recyclerview.widget.RecyclerView{807f3ca VFED..... ......ID 0,0-1080,1861 #7f0a00f8 app:id/favorites}, adapter:audio.funkwhale.ffa.adapters.FavoritesAdapter@d164aa0, layout:androidx.recyclerview.widget.LinearLayoutManager@424f21e, context:audio.funkwhale.ffa.activities.MainActivity@921566a
```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2125Retry upload does nopt retry the upload2023-10-16T04:03:35ZJulian-Samuel GebührRetry upload does nopt retry the upload<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue re...<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue respect our guidelines.
To ensure your bug report is as useful as possible, please try to stick
to the following structure. You can leave the parts text between `<!- ->`
markers untouched, they won't be displayed in your final message.
Please do not edit the following line, it's used for automatic classification
-->
## Steps to reproduce
- upload media
- make upload fail (e.g. limit disk space)
- Press the button retry upload
- No traffic to the server happens, nothing can be seen in the API logs
## What happens?
<!--
Describe what happens once the previous steps are completed.
-->
## What is expected?
When I press "retry upload" the error-ed files are tried again to be uploaded
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected** :1.3.0-rc5
<!--
If relevant, share additional context here like:
- Browser type and version (for front-end bugs)
- Instance configuration (Docker/non-docker, nginx/apache as proxy, etc.)
- Error messages, screenshots and logs
-->https://dev.funkwhale.audio/funkwhale/blog.funkwhale.audio/-/issues/8Implement proper a11y checks2023-10-12T14:34:53ZGeorg KrauseImplement proper a11y checksWe can use pa11y, but the way the gitlab template works doesn't make the pipeline fail if errors are detected. useless.We can use pa11y, but the way the gitlab template works doesn't make the pipeline fail if errors are detected. useless.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2156Add Management Command to change file ref for in-place imported files to s32023-10-12T14:31:20ZGeorg KrauseAdd Management Command to change file ref for in-place imported files to s3# Problem
We run a Funkwhale instance for years and now decided to move the storage to S3. Now, its kind of easy to achieve this for files that have been uploaded, since their reference is relative to the storage backend configured. We ...# Problem
We run a Funkwhale instance for years and now decided to move the storage to S3. Now, its kind of easy to achieve this for files that have been uploaded, since their reference is relative to the storage backend configured. We therefore just need to move the files to S3 and configure it accordingly. However, everything that has been a in-place import isn't that easy, since the file is references directly. Currently there is no built-in way to move those files and update the references
# Solution
We need a management command that can be run after the files have been copied to S3 which makes sure the references are updated accordingly.Georg KrauseGeorg Krausehttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2135Cache radio queryset into redis2023-10-12T14:31:20ZpetitminionCache radio queryset into redisnow radio queryset are regenerated each time a track load. Caching it will increase track fetching time in frontendnow radio queryset are regenerated each time a track load. Caching it will increase track fetching time in frontend1.4.0petitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1288User 'me' can be created but cannot be edited2023-10-12T14:31:20ZAdamUser 'me' can be created but cannot be edited<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue re...<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue respect our guidelines.
To ensure your bug report is as useful as possible, please try to stick
to the following structure. You can leave the parts text between `<!- ->`
markers untouched, they won't be displayed in your final message.
Please do not edit the following line, it's used for automatic classification
-->
## Steps to reproduce
<!--
Describe the steps to reproduce the issue, like:
1. Visit the page at /artists/
2. Type that
3. Submit
-->
1. Create user 'me'
2. Log in as user 'me'
3. Upload avatar or dismiss notification
## What happens?
Nothing happens
<!--
Describe what happens once the previous steps are completed.
-->
## What is expected?
Avatar is uploaded or notification is dismissed (respectively)
<!--
Describe the expected behaviour.
-->
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.0 and later
Installation was performed using Docker.
The actions above result under the hood in a PATCH to /api/v1/users/me/ which ends in 405 Method not allowed.
In the attachment You can find a curl that resulted in 405 mentioned above.
[curl](/uploads/917747a4cce396004fd2101ac320e497/curl)
<!--
If relevant, share additional context here like:
- Browser type and version (for front-end bugs)
- Instance configuration (Docker/non-docker, nginx/apache as proxy, etc.)
- Error messages, screenshots and logs
-->Ciarán Ainsworthsporiff@funkwhale.audioCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2220AWS_S3_CUSTOM_DOMAIN url malgenerated2023-10-10T07:26:22ZJérémie LorenteAWS_S3_CUSTOM_DOMAIN url malgenerated<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue re...<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue respect our guidelines.
To ensure your bug report is as useful as possible, please try to stick
to the following structure. You can leave the parts text between `<!- ->`
markers untouched, they won't be displayed in your final message.
Please do not edit the following line, it's used for automatic classification
-->
## Steps to reproduce
<!--
Describe the steps to reproduce the issue, like:
Object storage with AWS_S3_CUSTOM_DOMAIN variable used
-->
## What happens?
for AWS_S3_CUSTOM_DOMAIN= my-custom-domain.com
funkwhale gives https//my-custom-domain.com
miss the ":", sor URL is wrong
## What is expected?
url with the ":" as https://my-custom-domain.com
## Context
**Funkwhale version(s) affected**: 1.3.3
Thx!Georg KrauseGeorg Krausehttps://dev.funkwhale.audio/funkwhale/funkwhale.audio/-/issues/33Logos page is not styled yet2023-09-27T06:22:19ZGeorg KrauseLogos page is not styled yetThe logo page is looking quite ugly for now:
![screenshot](/uploads/61571ae9e75ba16ad3349c9e971fac3d/screenshot.jpg)
https://next.funkwhale.audio/logos/
Ideas:
* Add some padding-left to the list items
* Edit image Layout (Copy from ...The logo page is looking quite ugly for now:
![screenshot](/uploads/61571ae9e75ba16ad3349c9e971fac3d/screenshot.jpg)
https://next.funkwhale.audio/logos/
Ideas:
* Add some padding-left to the list items
* Edit image Layout (Copy from the landing page left-right)
* Fix headings
* Make first paragraph a hero
@mjourdan If you have some more or other ideas, let me know!Release new websiteGeorg KrauseGeorg Krausehttps://dev.funkwhale.audio/funkwhale/funkwhale.audio/-/issues/35Create a 404 page2023-09-25T11:55:07ZGeorg KrauseCreate a 404 pageRelease new websitehttps://dev.funkwhale.audio/funkwhale/funkwhale.audio/-/issues/34Check all URLs and create redirects2023-09-25T08:53:46ZGeorg KrauseCheck all URLs and create redirectsRelease new websitehttps://dev.funkwhale.audio/funkwhale/funkwhale.audio/-/issues/36Add privacy notes2023-09-25T07:58:53ZGeorg KrauseAdd privacy noteshttps://funkwhale.audio/en_GB/privacy is not yet reflected on the new pagehttps://funkwhale.audio/en_GB/privacy is not yet reflected on the new pageRelease new websitehttps://dev.funkwhale.audio/funkwhale/ui/-/issues/5Follow-up from "Add documentation for all components"2023-09-25T07:48:59ZCiarán Ainsworthsporiff@funkwhale.audioFollow-up from "Add documentation for all components"The following discussion from !3 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/vui/-/merge_requests/3#note_37076): (+1 comment)
> > separated by a 1px border
>
> @mjourdan...The following discussion from !3 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/vui/-/merge_requests/3#note_37076): (+1 comment)
> > separated by a 1px border
>
> @mjourdan shouldn't we use the new separator component here? (in that case 2px)v0.2.0https://dev.funkwhale.audio/funkwhale/ui/-/issues/27Allow usage of semantic header in card.2023-09-25T07:23:50ZGeorg KrauseAllow usage of semantic header in card.If we use a html header for the card title, the spacing will be messed up:
![screenshot](/uploads/84891a3a40d1cc425c323b08dda7a598/screenshot.jpg)
However, we need to use html titles in order to make the cards complying to accessibilit...If we use a html header for the card title, the spacing will be messed up:
![screenshot](/uploads/84891a3a40d1cc425c323b08dda7a598/screenshot.jpg)
However, we need to use html titles in order to make the cards complying to accessibility standards.
I managed to fix the example above by just applying `margin: 0` to the `.card-title` class, but there might be more side effects I am not aware of.v0.2.0Kasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audio