funkwhale issueshttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues2022-09-15T04:06:08Zhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1870FeedFetchException: Error while fetching feed: unknown error2022-09-15T04:06:08ZGeorg KrauseFeedFetchException: Error while fetching feed: unknown error# Error Details:
- Sentry event: https://am.funkwhale.audio/funkwhale/front/issues/7
- First seen:
2022-08-07T08:00:00+00:00
- Last seen: 2022-09-14T11:00:24+00:00
- Events: 2192
- Users: 0# Error Details:
- Sentry event: https://am.funkwhale.audio/funkwhale/front/issues/7
- First seen:
2022-08-07T08:00:00+00:00
- Last seen: 2022-09-14T11:00:24+00:00
- Events: 2192
- Users: 0https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1872Remove SPA code, serve frontend via nginx2022-10-22T13:46:11ZGeorg KrauseRemove SPA code, serve frontend via nginxhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1873Administration - settings review2022-12-13T18:36:33ZMathieu JourdanAdministration - settings reviewAs we are looking to figure out how to integrate remote instance subscriptions in the UI, we had to dive into Funkwhale settings. Here is a review of the current situation.
Settings seem to have piled up over time:
- The link to the "se...As we are looking to figure out how to integrate remote instance subscriptions in the UI, we had to dive into Funkwhale settings. Here is a review of the current situation.
Settings seem to have piled up over time:
- The link to the "settings" page is in an "administration" popover. Clicking on it leads to a page with no title, and the navigation bar doesn't show where we're at.
- All settings are on this single page, split in eleven sections. That's perhaps too many, as most of those sections have one or two settings.
- Some related settings are far from each other. For example, we have "support message" in the first section of settings, while we have "funkwhale support message" in the next to last section.
- Sometimes, settings seem to be missing. For example the "user interface" section suggests one could disable nodeinfo, but the toggle button to actually do that happen to be nowhere.
Some settings are hard to understand:
- Some labels are confusing, especially when they are used in conjunction with toggle switches. For example there are "Enable manual sign-up validation", "Transcoding enabled", "Enable channels"… Does the label indicate the current state of the setting, or does it indicate what will happen if I flip the switch?
- Some descriptions are oddly formulated. For instance, there is a toggle button called "API requires authentication" with the following description: "If disabled, anonymous users will be able to […]". It would be clearer if the description stated what would happen if the setting was enabled.
## Proposal
[Our proposal](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=c0288ed0-3133-11ed-85c2-f7fcc1c1427c§ion=interactions&index=0&share-id=05904d10-40d8-11ed-b91a-c19cdb5a453b) includes the following keypoints:
- new copy
- settings reorganized across 4 pages
- updated widgetshttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1878"/api/v1/playlists/$id/tracks return 404 when not authenticated instead of 403"2022-09-27T04:06:26ZGeorg Krause"/api/v1/playlists/$id/tracks return 404 when not authenticated instead of 403"https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1879Follow-up from "Rewrite embedded player"2022-09-28T04:03:51ZCiarán Ainsworthsporiff@funkwhale.audioFollow-up from "Rewrite embedded player"The following discussion from !2008 should be addressed:
- [ ] @Sporiff started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2008#note_36994): (+1 comment)
> Maybe not the time/place to discuss t...The following discussion from !2008 should be addressed:
- [ ] @Sporiff started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2008#note_36994): (+1 comment)
> Maybe not the time/place to discuss this, but something to split off into an issue maybe: do we want this to actually point back to the serving pod rather than the project webpage?https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1886Create RSS serializer2023-12-30T04:29:42ZCiarán Ainsworthsporiff@funkwhale.audioCreate RSS serializerAs outlined in [this comment](https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1852#note_37117), we need to create a serializer for the RSS actionAs outlined in [this comment](https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1852#note_37117), we need to create a serializer for the RSS actionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1887Create serializers for admin stats2023-12-30T04:29:41ZCiarán Ainsworthsporiff@funkwhale.audioCreate serializers for admin statsAs mentioned in [this comment](https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1852#note_37151), the admin stats method returns the wrong type due to a lack of serializers.As mentioned in [this comment](https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1852#note_37151), the admin stats method returns the wrong type due to a lack of serializers.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1900Migrate content between collections and channels2023-06-29T16:33:30ZMathieu JourdanMigrate content between collections and channelsSpotted on the Fediverse, [some user story](https://sonomu.club/@flavigula/109139365558211706) by @flavigula:
> when I began with my #funkwhale instance, I did not know the difference between libraries and channels, really, and so I cho...Spotted on the Fediverse, [some user story](https://sonomu.club/@flavigula/109139365558211706) by @flavigula:
> when I began with my #funkwhale instance, I did not know the difference between libraries and channels, really, and so I chose libraries. Unfortunately, I don't know a way to transfer the music between the two "modes". Perhaps there will be a way in the future.
Something we want to consider as part of &1.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1918Revisit all type hints if we can use native ones.2023-01-27T16:53:03ZGeorg KrauseRevisit all type hints if we can use native ones.@JuniorJPDJ stated:
> You are wrong in second case. You can use `Union[str, None]` or even `Optional[str]` from `typing` package from stdlib. `str | None` is just abbreviation of `Union` introduced in py3.10.
This way we might be able ...@JuniorJPDJ stated:
> You are wrong in second case. You can use `Union[str, None]` or even `Optional[str]` from `typing` package from stdlib. `str | None` is just abbreviation of `Union` introduced in py3.10.
This way we might be able to get rid of quite some if not all usage of spectacular in productionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1919Implement vui into Funkwhale2023-12-12T08:47:32ZGeorg KrauseImplement vui into FunkwhaleWe started working on a ui library called vui. We want to integrated this into Funkwhale to make the whole frontend more modular and maintainable and increase its consistency.We started working on a ui library called vui. We want to integrated this into Funkwhale to make the whole frontend more modular and maintainable and increase its consistency.Kasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1926Add new frontend tests2023-12-12T08:47:32ZCiarán Ainsworthsporiff@funkwhale.audioAdd new frontend tests<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using ...<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using Funkwhale, try asking in our
[forum's support board](https://forum.funkwhale.audio/support) or our [support
chat room](https://riot.im/app/#/room/#funkwhale-support:tchncs.de).
* If you think you've found a bug but aren't sure, you can ask in one of the above channels
first. Once you're confident it's a bug, go ahead and create an issue for us to investigate.
Select the **Bug** template in the **Description** dropdown menu. This template contains
helpful tips for creating your report.
* For smaller additions and enhancements, please file a feature request.
Select the **Feature Request** template in the **Description** dropdown
menu. This template contains helpful tips for creating your request.
* If you have ideas for new features or use cases, consider opening a thread in our
[forum](https://forum.funkwhale.audio/t/development). This enables us to
discuss the feature, its use cases, and the development effort it requires.
We always like hearing ideas from our community. If you're still not sure, click
the **Create issue** button and we'll work with you to sort out the issue.
Happy listening! :whale:
-->
Our old frontend tests don't work properly with the new audio player introduced in !2009. We've removed them for now, but we need to create new ones to test our changes. Some of this will be covered by Cypress, but the old unit tests should be replicated.
See [this log](https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/127441) for the failures.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1932Follow-up from "Resolve "Music Visualizer Support""2022-11-05T17:30:11ZCiarán Ainsworthsporiff@funkwhale.audioFollow-up from "Resolve "Music Visualizer Support""The following discussion from !2079 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2079#note_39109):
> We need to create some kind of input for users to e...The following discussion from !2079 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2079#note_39109):
> We need to create some kind of input for users to easily switch between desired presetsKasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1940New music page2022-11-05T16:35:33ZMathieu JourdanNew music pageAs part of funkwhale&4
[link to mockup](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=04743db0-0f5f-11ed-adb9-fff9e854a67c&section=interactions&index=0&share-id=e34466e0-5ad8-11ed-b91a-c19cdb5a453b)As part of funkwhale&4
[link to mockup](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=04743db0-0f5f-11ed-adb9-fff9e854a67c§ion=interactions&index=0&share-id=e34466e0-5ad8-11ed-b91a-c19cdb5a453b)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1941New podcast page2022-11-05T17:15:04ZMathieu JourdanNew podcast pageAs part of funkwhale&4
[link to mockup](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=04743db0-0f5f-11ed-adb9-fff9e854a67c&section=interactions&index=0&share-id=e34466e0-5ad8-11ed-b91a-c19cdb5a453b)As part of funkwhale&4
[link to mockup](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=04743db0-0f5f-11ed-adb9-fff9e854a67c§ion=interactions&index=0&share-id=e34466e0-5ad8-11ed-b91a-c19cdb5a453b)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1949Resolve performance issues in fullscreen visualizer in Firefox2022-11-08T08:04:34ZKasper Sewerynwvffle@funkwhale.audioResolve performance issues in fullscreen visualizer in Firefox<!--
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. Play a song in Firefox
2. Toggle visualizer on
3. Go to the fullscreen
## What happens?
<!--
Describe what happens once the previous steps are completed.
-->
The visualizer is clearly lagging behind and not responding to the music.
## What is expected?
<!--
Describe the expected behaviour.
-->
The animation should be as smooth as possible
## Context
As it can be seen in the videos, performance in both browsers goes down. That's because the screen resolution is 2560x1080 and the canvas is rendered as a square of 2560x2560. That is 3,788,800 pixels that are rendered offscreen. Previously I decided to render the canvas as a square due to the visualizer preset in the videos - `Rovastar + Loadus + Geiss - FractalDrop (Triple Mix)`. If it was rendered in a 2560x1080 rectangle, the effect of the visualizer preset was not as pleasing as when it is rendered in a square.
Firefox:
![2022-11-07_15-23-23](/uploads/34f1b7d5e30814370568f84248dc6cc1/2022-11-07_15-23-23.mp4)
Ungoogled Chromium:
![2022-11-07_15-24-14](/uploads/988155fa2cda0385ace835ab8353f971/2022-11-07_15-24-14.mp4)
The quality of the videos is dumped a bit and they lack a couple of frames. The stuttering in Ungoogled Chromium in fullscreen is much less noticible IRLKasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1950Add Tests for Plugins2022-11-09T04:03:37ZGeorg KrauseAdd Tests for PluginsCurrently the plugins we ship with Funkwhale are not automatically tested. We should improve here by adding some basic unit tests in a first step to verify their behavior.Currently the plugins we ship with Funkwhale are not automatically tested. We should improve here by adding some basic unit tests in a first step to verify their behavior.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1969player silently skip tracks the browser can't decode2022-11-15T22:09:46ZMathieu Jourdanplayer silently skip tracks the browser can't decodeFor some people, their first encounter with funkwhale is spinning wheels. And sometimes those spinning wheels are due to codec issues.
## Story
@Fieldswefound
> tried playing the tracks on #funkwhale don’t get any audio, just auto-skip...For some people, their first encounter with funkwhale is spinning wheels. And sometimes those spinning wheels are due to codec issues.
## Story
@Fieldswefound
> tried playing the tracks on #funkwhale don’t get any audio, just auto-skips through and gets stuck. User-error on my side I’m sure :) any ideas?
@flavigula
> I have a few ideas, actually, as this problem has surfaced before. Most of my music are stored as flacs on funkwhale. If you are using Safari to listen, sometimes it won't work. Flacs play badly with Macs / Apple in general.
https://mstdn.social/@Fieldswefound/109348533445700129
## Steps to reproduce
- open Safari on Mac or any browser on iOs
- go to an album page with tracks in flac format
- pick a track to play
## What happens?
Tracks are skipped one after the other.
## What is expected?
Music starts playing.
Meh.
If codecs are missing, and transcoding is enabled, the server automatically transcodes to a supported format.
If transcoding is disabled, a message appears to tell the bad news to the unfortunate person, instead of silently skipping tracks.
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.2https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1971Resolve Gitpod quirks2022-11-16T04:05:23ZKasper Sewerynwvffle@funkwhale.audioResolve Gitpod quirksThere are a bunch of quirks regarding Gitpod deployment and since my knowledge of our backend is very small, there are a bunch of things that should be resolved but I do not know how to deal with them.
# Terminology
Before I explain ev...There are a bunch of quirks regarding Gitpod deployment and since my knowledge of our backend is very small, there are a bunch of things that should be resolved but I do not know how to deal with them.
# Terminology
Before I explain everything, I need to explain some basic terminology regarding Gitpod:
- `workspace` - a container where we deploy funkwhale. It has an immutable ID (accessible through `GITPOD_WORKSPACE_ID` env var) and assigned cluster host that **may** change (`GITPOD_WORKSPACE_CLUSTER_HOST` env var)
- `prebuild` - an image that is being built after a commit is pushed to a branch. During the process of a prebuild, the workspace id and cluster host are random and do not resemble the workspace id and cluster host of a new workspace created from the finished prebuild.
# Gitpod's flows
## Creating new workspace
0. Someone pushed to `develop` branch
1. A prebuild is beginning
2. `init` commands from the `.gitpod.yml`'s tasks are executed
3. Prebuild is done
4. Someone creates new branch and creates a new workspace on this branch with GitLab's UI button
5. Cluster host and worksapce id are chosen
6. A container from prebuild of `develop` is created
7. User is redirected to `workspace-id.cluster-host.gitpod.io`
8. Workspace starts
9. User starts coding
## Opening old workspace
- User closes workpace
- User opens workspace
- Workspace id stays the same, cluster host may change (happens on very rare ocassions)
- Stages 7-9 occur
# Quirks
## Importing songs
Since we do the song importing in `init` of a task from `.gitpod.yml`, the `FUNKWHALE_HOSTNAME` at the time is equal to `localhost:8000`. We cannot predict the workspace id, nor the cluster host, since it is being executed in the prebuild stage. (stage 2)
For basic testing, it works fine without many problems, but when I want to see the profile, it asks for `@gitpod@workspace-id.cluster-host.gitpod.io` actor. Since, the actor in database is `@gitpod@localhost:8000`, it throws an error. We need to somehow update the `Domain` model when we start the gitpod workspace (stage 8). At this stage, we already know the workspace id and cluster host so it shouldn't be a problem. It is important to remember that at this stage, the cluster ID might've changed.
Other implications of the actor id mismatch between frontend and backend is that frontend thinks that the songs and library do not belong to the `gitpod` user.
## Very few data to test things
Currently there is almost nothing but some tracks imported in a fresh gitpod workspace. That would be great if during the prebuild, we seeded the database with all kind of info: other users, notifications, requests, reports, channels... Basically everything that funkwhale is capable of and that may fail sometimes. It would make fixing bugs quicker as there already would be notifications in place and user wouldn't need to think what to do to trigger some notification.
A command to reset the database would also come in handy in such case. If I've dismissed all the notifications during my testing my bugfix, one command and have all the notifications back.
## Uploads are not working at all
This might be due to the lack of a celery worker. We may just run it in docker container or another gitpod task.
## Federation is disabled
This may be related to the issue mentioned above.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1974Some email environment variables are ignored2022-11-21T04:04:19ZMohammad RafighSome email environment variables are ignoredIn multi container deployment, the URL entered as EMAIL_CONFIG in **.env** file is not parsed correctly. The host subdomain and the port are completely ignored. For example:
`smtp+tls://user@pass:mail.domain.com:587`
Parsed to:
`{'EMA...In multi container deployment, the URL entered as EMAIL_CONFIG in **.env** file is not parsed correctly. The host subdomain and the port are completely ignored. For example:
`smtp+tls://user@pass:mail.domain.com:587`
Parsed to:
`{'EMAIL_FILE_PATH': '', 'EMAIL_HOST_USER': 'user', 'EMAIL_HOST_PASSWORD': 'pass', 'EMAIL_HOST': 'domain.com', 'EMAIL_PORT': 25, 'EMAIL_BACKEND': 'django.core.mail.backends.smtp.EmailBackend'}`
Also, setting DEFAULT_FROM_EMAIL variable gets ignored.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1980Album image of federated S3 instance broken2023-05-25T09:37:55ZppomAlbum image of federated S3 instance brokenHi :wave:
Here's what I think I understood.
## Steps to reproduce
1. Subscribe to the library of a server using S3 as a storage backend.
2. For each album, the attachment cover is stored in the local DB with an attachment object.
3. T...Hi :wave:
Here's what I think I understood.
## Steps to reproduce
1. Subscribe to the library of a server using S3 as a storage backend.
2. For each album, the attachment cover is stored in the local DB with an attachment object.
3. The attachment object contains a temporary S3 URL to the image.
4. Wait for the URL to expire.
5. Show the album cover without opening it directly, eg:
- in the /albums listing,
- one of its songs in a playlist,
- one of its songs in the queue
6. The cover doesn't show up.
7. To see it again, you need to trigger album refetching by opening the album (`/library/albums/xxx`). You'll see this line in the logs: `funkwhale_api.music.views INFO Refetching music.Album:xxx at https://xxx.xx/federation/music/albums/xxx…`
In Django's admin, I can see the attachment object for the attachment cover is a new id after album refetching.
## How I guess one can solve this issue
I see two options:
- the federated server proxies the image and provides a fixed url.
- the local server stores the cover in its cache.
**Funkwhale version(s) affected**: 1.2.7https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1983Allow to exit edit view in Album2022-11-25T04:04:08ZKeunesAllow to exit edit view in Album<!--
Hi there! You are about to share feature request or an idea, 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 yo...<!--
Hi there! You are about to share feature request or an idea, 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 we can deal with your idea or request, 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
-->
Add a 'Cancel' button when editing an album
## What is the problem you are facing?
When clicking 'Edit' when viewing an album, thus ending on a page `/library/albums/1/edit`, there is no way in the UI to quickly go back to the 'view' page.
<!--
Describe the problem you'd like to solve, and why we need to add or
improve something in the current system to solve that problem.
Be as specific as possible.
-->
## What are the possible drawbacks or issues with the requested changes?
More cluttered interface.
<!--
Altering the system behaviour is not always a free action, and it can impact
user experience, performance, introduce bugs or complexity, etc..
If you think about anything we should keep in mind while
examining your request, please describe it in this section.
-->
## Context
<!--
If relevant, share additional context here like:
- Links to existing implementations or examples of the requested feature
- Screenshots
-->https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1984Allow to 'download cover from URL' in interface when editing an album2023-01-20T20:31:49ZKeunesAllow to 'download cover from URL' in interface when editing an album<!--
Hi there! You are about to share feature request or an idea, 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 yo...<!--
Hi there! You are about to share feature request or an idea, 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 we can deal with your idea or request, 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
-->
Introduce a way to enter a URL from which an album cover can be downloaded, in addition to having the 'upload' button.
## What is the problem you are facing?
I'm downloading media files from Jamendo using Curl directly onto my fileserver, and import these using the 'Import music from your server' functionality. These files don't contain any covers for the 'parent' albums, though. The covers are easily accessible through URLs, e.g. https://usercontent.jamendo.com/?cid=1659620344&type=album&id=490833&width=300&trackid=1963816
Allowing to 'download from URL' would be cutting out the intermediary steps of downloading the file to my device, uploading, and cleaning up locally after I have uploaded the file.
<!--
Describe the problem you'd like to solve, and why we need to add or
improve something in the current system to solve that problem.
Be as specific as possible.
-->
## What are the possible drawbacks or issues with the requested changes?
Extra interface elements.
<!--
Altering the system behaviour is not always a free action, and it can impact
user experience, performance, introduce bugs or complexity, etc..
If you think about anything we should keep in mind while
examining your request, please describe it in this section.
-->
## Context
<!--
If relevant, share additional context here like:
- Links to existing implementations or examples of the requested feature
- Screenshots
-->https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1991Create global translation strings2022-12-01T04:04:17ZCiarán Ainsworthsporiff@funkwhale.audioCreate global translation stringsFollowing the move to vue-i18n, we've got a lot of duplicated strings in our JSON file. This was mostly to ensure continuity between existing translations, but there's a lot of scope for reduction.
We should create a `global` object whi...Following the move to vue-i18n, we've got a lot of duplicated strings in our JSON file. This was mostly to ensure continuity between existing translations, but there's a lot of scope for reduction.
We should create a `global` object which contains strings that are used throughout the interface. This includes:
- Buttons
- Funkwhale terminology
- Action labels
- Table headersUX copy reviewCiarán Ainsworthsporiff@funkwhale.audioCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1997Create a dedicated funkwhale user in the container images2022-12-31T12:42:04ZjooolaCreate a dedicated funkwhale user in the container imagesThe funkwhale containers are currently being run as 'root', and we should create a funkwhale user inside the containers to run the application.
This improves security and should reduce friction between guest/hosts users uid.The funkwhale containers are currently being run as 'root', and we should create a funkwhale user inside the containers to run the application.
This improves security and should reduce friction between guest/hosts users uid.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2003Slow /federation/actors/<username> endpoint makes requests to remote pods slo...2023-01-25T23:39:13ZinterfectSlow /federation/actors/<username> endpoint makes requests to remote pods slow or unreliableI'm on Funkwhale 1.2.8 with the multi-container setup. I instrumented the Nginx config with the extra time fields shown at https://docs.nginx.com/nginx/admin-guide/monitoring/logging/#setting-up-the-access-log to see this issue better.
...I'm on Funkwhale 1.2.8 with the multi-container setup. I instrumented the Nginx config with the extra time fields shown at https://docs.nginx.com/nginx/admin-guide/monitoring/logging/#setting-up-the-access-log to see this issue better.
Even when there's not enough activity on the server to seem to be able to tie up the 8 API workers I set up, I'm seeing that requests to `/federation/actors/<username>` can take a long time. That time all goes to waiting for the API server to send the headers back to nginx.
Since the flow for a lot of federated actions is my browser -> my FW nginx -> my FW API server -> remote Funkwhale -> back to my FW nginx to fetch `/federation/actors/<username>` -> back to my FW API (and then the appropriate returns), this ends up making the original operation slow, or even causing it to time out if the remote pod doesn't want to wait for my pod to give it my actor information.
Here's an example of it being oddly slow:
```
fw-api_1 | 2022-12-07 22:57:35,132 funkwhale_api.music.views INFO Refetching music.Artist:6726 at https://buzzworkers.com/federation/music/artists/38acc7a0-04db-4059-bd77-0f5394ef3c18…
fw-nginx_1 | 172.16.238.2 - - [07/Dec/2022:22:57:45 +0000] "GET /api/v1/artists/6726/?refresh=true HTTP/1.1" 200 1311 "https://music.novak.network/library/artists/6726/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0" rt="10.719" uct="0.002" uht="10.717" urt="10.719"
fw-nginx_1 | 172.16.238.2 - - [07/Dec/2022:22:57:45 +0000] "GET /federation/actors/service HTTP/1.1" 200 1469 "-" "python-requests (funkwhale/1.2.8; +https://buzzworkers.com)" rt="9.652" uct="0.001" uht="9.649" urt="9.651"
```
Nginx logs requests when they *finish*, and `rt` here is how long ago they came in, in seconds. The GET my browser made to `/api/v1/artists/6726/?refresh=true` arrived, then immediately my API server logged an INFO line, then within a second the request to `/federation/actors/service` from the remote pod came in. That request sat for around 9 seconds waiting for my pod's API server to answer it, which it did (with a 200 OK).
Nginx seems to have the outer refresh request finishing first, somehow, given the log line order, but I'm pretty sure that my server is waiting on the remote server, which is waiting again on my server, for that 9 seconds.
I'll see if I can catch this actually causing a federated action to fail; I suspect this is the cause of my having to repeatedly try to play any federated music to get it to actually make it over to my pod. Is there any federated music I can try that I *should* be able to play, to test with? I usually pull from tanukitunes.com, but its API seems to be down today.
Is it safe to make nginx cache the `/federation/actors/<username>` response for a few hours, to try and speed this up? And why would it be so slow in the first place?https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2009Musique genre with special character does not generate a tag in DB when impor...2023-11-01T22:45:28ZChristophe HenryMusique genre with special character does not generate a tag in DB when importingI have a genre I use a lot ("*Drum & bass*") in my playlist. Alhough every other genres appear in DB's tags tables (like "*Disco*") this particular one is not there. I suspect this is because of `&` in the genre name. Other genres with s...I have a genre I use a lot ("*Drum & bass*") in my playlist. Alhough every other genres appear in DB's tags tables (like "*Disco*") this particular one is not there. I suspect this is because of `&` in the genre name. Other genres with special characters (like those with a `-`) do not seems to cause any problem, though.petitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2019Add ability to save currently playing list as a playlist2022-12-24T18:27:07ZNicolas DeriveAdd ability to save currently playing list as a playlist<!--
Hi there! You are about to share feature request or an idea, 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 yo...<!--
Hi there! You are about to share feature request or an idea, 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 we can deal with your idea or request, 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
-->
## What is the problem you are facing?
<!--
Describe the problem you'd like to solve, and why we need to add or
improve something in the current system to solve that problem.
Be as specific as possible.
-->
It is not currently possible to save the list of currently playing tracks as a playlist.
## What are the possible drawbacks or issues with the requested changes?
<!--
Altering the system behaviour is not always a free action, and it can impact
user experience, performance, introduce bugs or complexity, etc..
If you think about anything we should keep in mind while
examining your request, please describe it in this section.
-->
None I think.
## Context
It would be nice to add a button near "delete" when you open the currently playing track list that would be called "Save" and would open a way to add to an existing playlist or create a new one from the track list, that we would be able to name and save.
Thanks for looking at this.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2020LDAP config - no way to set AUTH_LDAP_USER_DN_TEMPLATE for direct bind mode2022-12-21T04:07:39ZTadas MedišauskasLDAP config - no way to set AUTH_LDAP_USER_DN_TEMPLATE for direct bind mode<!--
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
Trying to configure LDAP auth with direct binding, following docs here: https://docs.funkwhale.audio/admin/ldap.html.
These are my config env vars:
- `LDAP_ENABLED=True`
- `LDAP_SERVER_URI=ldaps://synology.local:636`
- `AUTH_LDAP_BIND_AS_AUTHENTICATING_USER=True`
- `LDAP_ROOT_DN=cn=users,dc=synology,dc=local`
<!--
Describe the steps to reproduce the issue, like:
1. Visit the page at /artists/
2. Type that
3. Submit
-->
## What happens?
Error is logged that Funkwhale is trying to perform an anonymous bind.
```
2022-12-20 23:46:38,507 django_auth_ldap WARNING Caught LDAPError while authenticating blah: INAPPROPRIATE_AUTH({'msgtype': 97, 'msgid': 1, 'result': 48, 'desc': 'Inappropriate authentication', 'ctrls': [], 'info': 'anonymous bind disallowed'})
```
<!--
Describe what happens once the previous steps are completed.
-->
## What is expected?
Funkwhale binds to LDAP using credentials of the user that is trying to login, successfully authenticates and logs the user in.
<!--
Describe the expected behaviour.
-->
## Context
After reading https://django-auth-ldap.readthedocs.io/en/latest/authentication.html#direct-bind and https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-bind-dn I got it to work by adding the following lines to `/app/config/settings/common.py` and setting `AUTH_LDAP_USER_DN_TEMPLATE=uid=%(user)s,cn=users,dc=synology,dc=local`:
```
AUTH_LDAP_USER_DN_TEMPLATE = env(
"AUTH_LDAP_USER_DN_TEMPLATE", default=None
)
```
(similar to https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/develop/api/config/settings/common.py#L697)
My understanding is that without `AUTH_LDAP_USER_DN_TEMPLATE`, django falls back to searching for the user in `LDAP_ROOT_DN` and to do that it needs creds - `LDAP_BIND_DN` and `LDAP_BIND_PASSWORD`. And if those are empty it tries an anonymous bind.
Also, seems like with direct binds `LDAP_ROOT_DN` becomes unnecessary as it's only needed when searching for a user's DN.
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.2.9
<!--
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/funkwhale/-/issues/2021Serving ActivityPub objects2023-12-13T03:57:56ZsilverpillServing ActivityPub objectsAccording to ActivityPub specification, servers should return ActivityStreams object representation in response to requests having `application/ld+json; profile="https://www.w3.org/ns/activitystreams"` in `Accept` header, but Funkwhale o...According to ActivityPub specification, servers should return ActivityStreams object representation in response to requests having `application/ld+json; profile="https://www.w3.org/ns/activitystreams"` in `Accept` header, but Funkwhale only does that for requests with `application/activity+json` media type.
>Servers ... MUST present the ActivityStreams object representation in response to application/ld+json; profile="https://www.w3.org/ns/activitystreams", and SHOULD also present the ActivityStreams representation in response to application/activity+json as well.
-- https://www.w3.org/TR/activitypub/#retrieving-objects
Example:
```shell
curl -L -H 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"' https://tunes.artemai.art/federation/actors/acrossthefediverse
```
This command returns HTML page instead of the actor object.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2028Hide 'Add new' action link from 'Channels' section in profile when channel cr...2023-01-26T13:43:15ZKeunesHide 'Add new' action link from 'Channels' section in profile when channel creation is disabled<!--
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. As instance admin, disable Channel creation under `/manage/settings#channels`
2. Go to your profile `/@username`
3. Click on 'Add new'
## What happens?
The 'Add channel' modal is shown with an error:
> An unknown error occurred, ensure your are connected to the internet and your funkwhale instance is up and running
## What is expected?
The 'Add new' action link is hidden from the Channel section in the user profile is hidden. And ideally, the whole section in the user profile is hidden if a) creating new channels is disabled and b) the user doesn't have any channels.
## Context
**Funkwhale version(s) affected**: develop (I'm on Docker - version seems no longer printed as the whole footer isn't there. Should I create a separate issue for this?)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2030Make Funkwhale configuration independend from install location2023-01-13T08:22:38ZGeorg KrauseMake Funkwhale configuration independend from install locationThe following discussion from !2283 should be addressed:
- [ ] @georgkrause started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2283#note_44266): (+7 comments)
> I get the following on a ansible...The following discussion from !2283 should be addressed:
- [ ] @georgkrause started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2283#note_44266): (+7 comments)
> I get the following on a ansible-install, might be doing something wrong, though:
>
> ```
> fw@ansible-testing:/srv/funkwhale$ ./virtualenv/bin/funkwhale-manage migrate
> 2023-01-08 14:41:54,292 funkwhale_api.config INFO Running with the following plugins enabled: funkwhale_api.contrib.scrobbler, funkwhale_api.contrib.listenbrainz, funkwhale_api.contrib.maloja
> 2023-01-08 14:41:54,298 funkwhale_api.config INFO Running with the following plugins enabled: funkwhale_api.contrib.scrobbler, funkwhale_api.contrib.listenbrainz, funkwhale_api.contrib.maloja
> Traceback (most recent call last):
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/environ/environ.py", line 403, in get_value
> value = self.ENVIRON[var_name]
> File "/usr/lib/python3.9/os.py", line 679, in __getitem__
> raise KeyError(key) from None
> KeyError: 'FUNKWHALE_URL'
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File "/srv/funkwhale/./virtualenv/bin/funkwhale-manage", line 8, in <module>
> sys.exit(main())
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/funkwhale_api/main.py", line 30, in main
> execute_from_command_line(sys.argv)
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
> utility.execute()
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
> self.fetch_command(subcommand).run_from_argv(self.argv)
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
> self.execute(*args, **cmd_options)
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute
> output = self.handle(*args, **options)
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/core/management/base.py", line 86, in wrapped
> saved_locale = translation.get_language()
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/utils/translation/__init__.py", line 254, in get_language
> return _trans.get_language()
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/utils/translation/__init__.py", line 57, in __getattr__
> if settings.USE_I18N:
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/conf/__init__.py", line 82, in __getattr__
> self._setup(name)
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/conf/__init__.py", line 69, in _setup
> self._wrapped = Settings(settings_module)
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__
> mod = importlib.import_module(self.SETTINGS_MODULE)
> File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
> return _bootstrap._gcd_import(name[level:], package, level)
> File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
> File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
> File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
> File "<frozen importlib._bootstrap_external>", line 790, in exec_module
> File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/config/settings/production.py", line 12, in <module>
> from .common import * # noqa
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/config/settings/common.py", line 163, in <module>
> FUNKWHALE_URL = env("FUNKWHALE_URL")
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/environ/environ.py", line 197, in __call__
> return self.get_value(
> File "/srv/funkwhale/virtualenv/lib/python3.9/site-packages/environ/environ.py", line 407, in get_value
> raise ImproperlyConfigured(error_msg) from exc
> django.core.exceptions.ImproperlyConfigured: Set the FUNKWHALE_URL environment variable
> ```
>
> @jooola any hints?
Reply by @jooola:
> I really don't like:
>
> https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/85e3984e3b94ed11db182f57280b8b557b4b01ec/api/config/settings/common.py#L10
>
> https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/85e3984e3b94ed11db182f57280b8b557b4b01ec/api/config/settings/common.py#L87-L104
>
> Which assume way to much on where funkwhale is installed. I would recommend using Path.cwd() or os.getcwd() with only relative paths.jooolajooolahttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2031Attempting to update art results in Object ID Not Found2023-01-16T05:39:30ZjodhusAttempting to update art results in Object ID Not Found## Steps to reproduce
1. Attempt to edit an artist/album.
2. Upload a new image.
3. Click on "Submit and apply edit"
## What happens?
A red flash box appears saying:
> Error while submitting edit
> * Object with uuid=<RANDOM_UUID> do...## Steps to reproduce
1. Attempt to edit an artist/album.
2. Upload a new image.
3. Click on "Submit and apply edit"
## What happens?
A red flash box appears saying:
> Error while submitting edit
> * Object with uuid=<RANDOM_UUID> does not exist.
Looking at the DEBUG logs of server, it returns a 400 Bad Request, but no other helpful messages. Same info is seen from the browser's web developers tools.
## What is expected?
The image should be updated on the artist/album
## Context
**Funkwhale version(s) affected**: 1.2.8+git.fb10d1a3
**Browser version**: Firefox 108.0.2 (64-bit)
**Instance setup**: LXC/LXD containers, nginx as a reverse proxy, postgresql for database.
I should also mention that this worked on previous versions. I know I was able to update the art with version 1.2.7.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2032Configuration schema rework2023-01-13T10:21:04ZGeorg KrauseConfiguration schema rework> I was wondering if we wanted to rework the api config schema, like start having a single namespace for all what is front related. I see a lot of different namespaces, like spa or front or web. As a newcomer I found this confusing.
>
> ...> I was wondering if we wanted to rework the api config schema, like start having a single namespace for all what is front related. I see a lot of different namespaces, like spa or front or web. As a newcomer I found this confusing.
>
> I would like to propose renaming those config options (with backward compatibility) and add deprecation warning for the old config keys.
>
> There is also some other config that could use a new names that match a general schema.
> I also would like to add some sensible defaults values, so that funkwhale could run without any (almost) configuration. This should help also for dev/testing setup that currently have to define a lot of values that could be set as default.
>
> For example: the DB DSN could be built from exploded parts (host, port, username, password,...) and those parts could have good defaults: Host: localhost Port: 5432 (is that the postgresl default port ?) Username: funkwhale Password: funkwhale Database: funkwhale
>
> This means for the default docker compose setup, we would only need to change the host value. Which lines up with the docker posgres_user and posgres_password env variables.
>
> For advanced user that do require a dsn, they can still use the db dsn env var direcltyjooolajooolahttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2039Implement offline mode for the Funkwhale UI2023-11-16T10:27:36ZCiarán Ainsworthsporiff@funkwhale.audioImplement offline mode for the Funkwhale UIThe following discussion from !2330 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2330#note_45078): (+3 comments)
> Well, you're most likely right when i...The following discussion from !2330 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2330#note_45078): (+3 comments)
> Well, you're most likely right when it comes to what @JuniorJPDJ has expected.
> However the issue itself is wrong. [First commit before any of my changes](https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/0f4226e06fa3ce888df04666dd02c150d4380837/front/src/store/radios.js#L93-L104) also drops radio session when the candidate request fails.
>
> We could make funkwhale aware of it's online/offline state, inform user about it and handle all cases similar to what @JuniorJPDJ is expecting.1.5.0Ciarán Ainsworthsporiff@funkwhale.audioCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2041Migrate all buttons to VUI2023-12-12T08:47:32ZKasper Sewerynwvffle@funkwhale.audioMigrate all buttons to VUIPart of #1919Part of #1919https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2042Migrate all cards to VUI2023-12-12T21:29:32ZKasper Sewerynwvffle@funkwhale.audioMigrate all cards to VUIPart of #1919Part of #19191.5.0https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2043Migrate pagination to VUI2023-11-16T10:34:30ZKasper Sewerynwvffle@funkwhale.audioMigrate pagination to VUIPart of #1919Part of #19191.5.0https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2044Migrate inputs to VUI2023-12-12T08:47:32ZKasper Sewerynwvffle@funkwhale.audioMigrate inputs to VUIPart of #1919
This is also blocked by #1835Part of #1919
This is also blocked by #1835https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2059Pod receives 500 internal server error from remote pod when fetching track wi...2023-01-27T22:50:53ZinterfectPod receives 500 internal server error from remote pod when fetching track with authentication, but fetching track with authentication stripped off works<!--
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. Set up Funkwhale 1.2.8 with the multi-container setup
2. Fix Docker outbound IPv6 by setting up `/etc/docker/daemon.json` like this:
```
{
"ipv6": true,
"fixed-cidr-v6": "fec0:1234:ffff:0000:0000:0000:0000:0000/64",
"experimental": true,
"ip6tables": true
}
```
and by adding an IPv6 network to the docker-compose file, with <subnet>::1 as the gateway, and putting the API server on it. This is needed because the pod I am testing against is on;y actually reachable over IPv6 today.
3. Follow this public library: https://zik.canevas.eu/federation/music/libraries/266b479b-6146-4cb5-9d5e-57af7d8a8768
4. Try to play the local version of this track: https://zik.canevas.eu/library/tracks/23131
## What happens?
<!--
Describe what happens once the previous steps are completed.
-->
On my pod at least, the track will not play.
When my instance fetches https://zik.canevas.eu/api/v1/listen/f8bd566b-e796-46b2-86e6-39b5f78a165d/?upload=058dfcde-f374-4376-8a63-29095dc74553&download=false, and sends auth information for my user, it receives back in internal server error (500) from the remote instance. The response does not appear to have a body I can dump, but I'm not certain of that.
I added some extra logging to the track fetching code, and a fallback to fetch with `auth` unset, and got this log:
```
fw-api_1 | 2023-01-25 17:24:05,309 funkwhale_api.music.views INFO Fetching remote track https://zik.canevas.eu/api/v1/listen/2a3028b2-a7bf-4125-89b8-8cfeb09f823b/?upload=6fb28bd0-345f-4fc2-a779-48ced606e88f&download=false as interfect@music.novak.network
fw-api_1 | 2023-01-25 17:24:38,182 plugins DEBUG Calling handlers for filter urls
fw-nginx_1 | 172.16.238.4 - - [25/Jan/2023:17:24:39 +0000] "GET /federation/actors/interfect HTTP/1.1" 200 1626 "-" "python-requests (funkwhale/1.2.5; +https://zik.canevas.eu)" rt="1.092" uct="0.001" uht="1.089" urt="1.092"
fw-api_1 | 2023-01-25 17:24:39,695 funkwhale_api.music.models ERROR Error fetching content. Retrying without auth
fw-api_1 | Traceback (most recent call last):
fw-api_1 | File "/app/funkwhale_api/music/models.py", line 812, in download_audio_from_remote
fw-api_1 | remote_response.raise_for_status()
fw-api_1 | File "/venv/lib/python3.8/site-packages/requests/models.py", line 953, in raise_for_status
fw-api_1 | raise HTTPError(http_error_msg, response=self)
fw-api_1 | requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: https://zik.canevas.eu/api/v1/listen/2a3028b2-a7bf-4125-89b8-8cfeb09f823b/?upload=6fb28bd0-345f-4fc2-a779-48ced606e88f&download=false
```
When I modify `Upload.download_audio_from_remote()` in `funkwhale_api/music/models.py` to first send the request without authentication (`auth=None`), and only actually pass along `auth` to `session.get_session().get()` if the anonymous call fails, the remote server services the request, and manages it in time for my local pod to accept it and fulfil my browser's request.
## What is expected?
<!--
Describe the expected behaviour.
-->
When the remote server returns a 500 error to a track fetch attempt, I want to see in my pod's log any other information associated with the error.
If the remote server serves a track properly without authentication information on the request, it should not 500 when authentication information is added. If my user is banned or something (which seems unlikely, but I suppose is possible), it should send a 403 Forbidden.
To debug this, I ought to be able to dump the actual web requests that Funkwhale is sending, ideally as Curl commands, so I can generate the 500 error form the remote pod without my pod actually being involved.
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.2.8
<!--
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
-->
I feel like this might have something to do with my problems getting `/federation/actors` to work properly. My authenticated request prompts a remote fetch of `/federation/actors/<me>`, it times out, remote returns 500, this unblocks some kind of incoming connection limit on my Funkwhale, and then nginx actually manages to serve the `/federation/actors/<me>` request (too late).
My hack (anonymous first) in models.py:
```
def download_audio_from_remote(self, actor):
from funkwhale_api.federation import signing
if actor:
auth = signing.get_auth(actor.private_key, actor.private_key_id)
else:
auth = None
remote_response = session.get_session().get(
self.source,
auth=None,
stream=True,
timeout=20,
headers={"Content-Type": "application/octet-stream"},
)
with remote_response as r:
try:
remote_response.raise_for_status()
except:
logger.exception('Error fetching content. Retrying with auth')
remote_response = session.get_session().get(
self.source,
auth=auth,
stream=True,
timeout=20,
headers={"Content-Type": "application/octet-stream"},
)
with remote_response as r:
extension = utils.get_ext_from_type(self.mimetype)
title_parts = []
title_parts.append(self.track.title)
if self.track.album:
title_parts.append(self.track.album.title)
title_parts.append(self.track.artist.name)
title = " - ".join(title_parts)
filename = "{}.{}".format(title, extension)
tmp_file = tempfile.TemporaryFile()
for chunk in r.iter_content(chunk_size=512):
tmp_file.write(chunk)
self.audio_file.save(filename, tmp_file, save=False)
self.save(update_fields=["audio_file"])
return
extension = utils.get_ext_from_type(self.mimetype)
title_parts = []
title_parts.append(self.track.title)
if self.track.album:
title_parts.append(self.track.album.title)
title_parts.append(self.track.artist.name)
title = " - ".join(title_parts)
filename = "{}.{}".format(title, extension)
tmp_file = tempfile.TemporaryFile()
for chunk in r.iter_content(chunk_size=512):
tmp_file.write(chunk)
self.audio_file.save(filename, tmp_file, save=False)
self.save(update_fields=["audio_file"])
```
And in views.py for debugging:
```
@record_downloads
def handle_serve(
upload, user, format=None, max_bitrate=None, proxy_media=True, download=True
):
f = upload
# we update the accessed_date
now = timezone.now()
upload.accessed_date = now
upload.save(update_fields=["accessed_date"])
f = upload
if f.audio_file:
file_path = get_file_path(f.audio_file)
elif f.source and (
f.source.startswith("http://") or f.source.startswith("https://")
):
# we need to populate from cache
with transaction.atomic():
# why the transaction/select_for_update?
# this is because browsers may send multiple requests
# in a short time range, for partial content,
# thus resulting in multiple downloads from the remote
qs = f.__class__.objects.select_for_update()
f = qs.get(pk=f.pk)
if user.is_authenticated:
actor = user.actor
else:
actor = actors.get_service_actor()
try:
logger.info("Fetching remote track %s as %s", f.source, actor)
f.download_audio_from_remote(actor=actor)
except requests.exceptions.RequestException as e:
body = "<no body>"
if hasattr(e, 'response') and hasattr(e.response, 'body'):
body = e.response.body
logger.exception("Fetching remote track %s as %s failed: %s", f.source, actor, body)
return Response({"detail": "Remote track {} is unavailable to actor {}: {} with body {}".format(f.source, actor, e, body)}, status=503)
data = f.get_audio_data()
if data:
f.duration = data["duration"]
f.size = data["size"]
f.bitrate = data["bitrate"]
f.save(update_fields=["bitrate", "duration", "size"])
file_path = get_file_path(f.audio_file)
elif f.source and f.source.startswith("file://"):
file_path = get_file_path(f.source.replace("file://", "", 1))
mt = f.mimetype
if should_transcode(f, format, max_bitrate=max_bitrate):
transcoded_version = f.get_transcoded_version(format, max_bitrate=max_bitrate)
transcoded_version.accessed_date = now
transcoded_version.save(update_fields=["accessed_date"])
f = transcoded_version
file_path = get_file_path(f.audio_file)
mt = f.mimetype
if not proxy_media and f.audio_file:
# we simply issue a 302 redirect to the real URL
response = Response(status=302)
response["Location"] = f.audio_file.url
return response
if mt:
response = Response(content_type=mt)
else:
response = Response()
filename = f.filename
mapping = {"nginx": "X-Accel-Redirect", "apache2": "X-Sendfile"}
file_header = mapping[settings.REVERSE_PROXY_TYPE]
response[file_header] = file_path
if download:
response["Content-Disposition"] = get_content_disposition(filename)
if mt:
response["Content-Type"] = mt
return response
```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2060Tracks with artist/album artist name containing a ";" shortens the name2023-01-27T10:11:49ZAMoonRabbitTracks with artist/album artist name containing a ";" shortens the name## Steps to reproduce
<!--
Describe the steps to reproduce the issue, like:
1. Upload a release by an artist who have a ";" in their name, e.g. en;Dolphin
2. Track uploads
3. Check post upload, tracks will be under the artist "en"
-->
...## Steps to reproduce
<!--
Describe the steps to reproduce the issue, like:
1. Upload a release by an artist who have a ";" in their name, e.g. en;Dolphin
2. Track uploads
3. Check post upload, tracks will be under the artist "en"
-->
## What happens?
The album artist/artist name was split at the point the ";" character was inserted.
## What is expected?
Artist name should be intact, in my case, en;Dolphin already exist as an artist on my instance.
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.3.0-rc3
This may be related to efforts to support tracks with multiple artists: #1170https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2065Start using make as task manager2023-11-16T10:33:27ZjooolaStart using make as task managerI propose to start using make as en entry point to run the different dev tasks.
The idea is to leverage the power of Make to define dependent tasks and use them to build more advanced task scenarios. Already run tasks will most of the t...I propose to start using make as en entry point to run the different dev tasks.
The idea is to leverage the power of Make to define dependent tasks and use them to build more advanced task scenarios. Already run tasks will most of the time by shipped unless we explicitly require them to always run (e.g. install the package `poetry install`).
This will be similar to the front/packages.json scripts section, but for the project and the api.
The Makefile itself already documents the available tasks for the developers, complex behavior should be commented and/or extracted into scripts
Here are a few tasks I hope to implement:
**Project**:
- dev: init a fully working dev setup with build+run+migration+seed using docker-compose #2071
- dev-federation: init a federation network with instances using docker-compose #2107
- version: bump the packages version to a new one (replace scripts/set-api-build-metadata.sh)
- docs: run a docs dev setup using docker-compose (docs and dev will be split to reduce complexity)
- clean: cleanup the project, but keep important files (git clean -xdf but keep .env, and other files)
- release: once the versions are bumped, the project is clean, we can run the task to release a new version, and let the user do the final "git push --follow-tags"
**API**:
- install: poetry install into api/.venv
- format: format all the code using black+isort (either via pre-commit, or directly with black and isort)
- lint: lint the api package using all available linters (pylint, mypy, maybe flake8)
- test: test the api package using pytest (running individual groups of tests should be done manually) (maybe splitting `test` into `unit` and `integration`)
- schema: generate the api schema
**Docs**:
- install: poetry install into docs/.venv
- build: build the docs, this would replace the existing scripts
It seems the docs ship a Makefile (from sphinx) but it isn't used.
Some other "common" tasks can be added, I might have missed some. We need to be careful and make sure the time invested in a makefile tasks is actually worth it. For example I can see the gitpod spec use the makefile, but scripting gitpod specific tasks in the makefile is probably not generic enough.1.5.0jooolaGeorg Krausejooolahttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2066Commit the API schema in the repository2023-04-08T14:54:50ZjooolaCommit the API schema in the repositoryI propose to commit the api schema in the repo.
This will help with:
- reduce dependency between the CI build_api_docs and build_docs jobs
- faster way to build the docs without requiring the api
- allow to spot any unwanted changes (s...I propose to commit the api schema in the repo.
This will help with:
- reduce dependency between the CI build_api_docs and build_docs jobs
- faster way to build the docs without requiring the api
- allow to spot any unwanted changes (say spectacular introduce a bug, we can see it)
- easier way to track which code change did change the spec (will be handy if you generate the api clients using the schema file)
To enforce this using the CI (the CI don't commit, but enforce), we can either be really strict, or somewhat relax:
- either the schema must be generated for each of the commits (1 commits 1 spec change)
- or we allow for multiple commits (merge request) to have a single spec change (n commits, 1 spec change)
I prefer to be really strict, but maybe this needs some discussions ?https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2069Use release assets instead of artifacts to distibute the software2024-02-05T14:27:51ZjooolaUse release assets instead of artifacts to distibute the softwareI propose to change the current distribution method for released assets (currently using the build artifacts), to releases assets created from those artifacts.
It will put a clear separation between the CI and the distribution of the co...I propose to change the current distribution method for released assets (currently using the build artifacts), to releases assets created from those artifacts.
It will put a clear separation between the CI and the distribution of the code to the public. Dev installs still can download from the CI artifacts, as we are probably around to fix if we break it.
We will not have to be too careful about changing things in the CI, for example renaming one of the api/front build job would break the distribution pipeline. We need to have a proper release job, that pushes attaches those artifacts to a specific release.
This allows us to provide checksum files and maybe also sign the assets archive so people can verify the files after download.
We already create releases for our tags https://dev.funkwhale.audio/funkwhale/funkwhale/-/releases
We can now draft a clear and frozen policy on the release asset naming, and make sure we will not have to change it in the future.
In addition if we have a clear policy, we could also add the release/assets urls inside the releases.json files that is publicly available at https://docs.funkwhale.audio/releases.json.
Or releases.json becomes a proxy to the gitlab releases api.
I think this should happen for 1.3.0.
An example where we are having some issue with the current setup: https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2349#note_46070
Some docs: https://docs.gitlab.com/ee/user/project/releases/release_cicd_examples.html
cc @funkwhale/steering1.5.0Georg KrauseGeorg Krausehttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2070Add new CI lint_docs job2023-02-04T23:05:52ZjooolaAdd new CI lint_docs jobWhen editing the documentation, we want to make sure that translators always work on the latest version possible.
I propose to add a small CI job that checks by generating the pot/po files and fail if changes were found.
This will ensu...When editing the documentation, we want to make sure that translators always work on the latest version possible.
I propose to add a small CI job that checks by generating the pot/po files and fail if changes were found.
This will ensure that the docs po files are always up to day and weblate will be able to pick the changes.
@Sporiffhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2071Init a fully working dev setup with build+run+migration+seed using docker-com...2023-03-17T18:27:10ZGeorg KrauseInit a fully working dev setup with build+run+migration+seed using docker-compose<!--
Hi there! You are about to share feature request or an idea, 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 yo...<!--
Hi there! You are about to share feature request or an idea, 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 we can deal with your idea or request, 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
-->
## What is the problem you are facing?
<!--
Describe the problem you'd like to solve, and why we need to add or
improve something in the current system to solve that problem.
Be as specific as possible.
-->
Its sometimes hard to get a development setup up and running. Most of the tasks are quite repetitive, so it would be great to automate them.
<!--
Altering the system behaviour is not always a free action, and it can impact
user experience, performance, introduce bugs or complexity, etc..
If you think about anything we should keep in mind while
examining your request, please describe it in this section.
-->
## Context
There are some related issues to solve in this go. Most of the required steps are already coded for gitpod: https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/develop/.gitpod.yml
However, this uses somehow custom management commands, which isn't really generic: https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/develop/api/funkwhale_api/common/management/commands/gitpod.py
I think we should transform them into more generic management commands:
* Create user with Actor
* Set Password
* Set Instance preferences
* Part of it might be to fetch some example data, like here: https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/develop/api/funkwhale_api/common/management/commands/gitpod.py#L59
* Import to library by username and name
<!--
If relevant, share additional context here like:
- Links to existing implementations or examples of the requested feature
- Screenshots
-->Marcos PeñaMarcos Peñahttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2073Webradios from icecast server2023-02-14T11:21:13ZJérémie LorenteWebradios from icecast serverWe are a FM Radio regional federation (38 radios!).
We're looking for a web platform to publish/store our podcast.
I've installed Funkwhale that seems to be a good solution.
When i've seen the "Radio" section, i though it was to publis...We are a FM Radio regional federation (38 radios!).
We're looking for a web platform to publish/store our podcast.
I've installed Funkwhale that seems to be a good solution.
When i've seen the "Radio" section, i though it was to publish a webradio from shoutcast ou icecast server. Instead, it seems to be more an playlist builder.
So, i think it could be a good thing if users could add webradio from Icecast/shoutcast server, in a new section called "Webradio"https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2074rss on Series2023-06-29T13:39:20ZJérémie Lorenterss on SeriesHi! I think it would be great to have rss on Series.
For example, to add on a website one serie instead of all the channel.
Thx you!Hi! I think it would be great to have rss on Series.
For example, to add on a website one serie instead of all the channel.
Thx you!https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/762I-3 Global federation aka Domain follow2024-01-23T15:35:49ZgordonI-3 Global federation aka Domain follow- forum : https://forum.funkwhale.audio/d/209-domain-follow-feature/6
- spec : https://pad.funkwhale.audio/0ov04mrqRj2JEv6p16bHuw- forum : https://forum.funkwhale.audio/d/209-domain-follow-feature/6
- spec : https://pad.funkwhale.audio/0ov04mrqRj2JEv6p16bHuwCiarán Ainsworthsporiff@funkwhale.audiopetitminionCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1810I-5 Following other fw users2024-03-28T23:52:24ZpetitminionI-5 Following other fw users# Meta
- Specification: https://docs.funkwhale.audio/develop/specs/user-follow/index.html
- design : https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=e61451a5-6d56-8015-8003-c3dd410c8f50&section=interac...# Meta
- Specification: https://docs.funkwhale.audio/develop/specs/user-follow/index.html
- design : https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=e61451a5-6d56-8015-8003-c3dd410c8f50§ion=interactions&frame-id=13bd6d1c-f5ce-8074-8003-b82e985e419d&index=0&share-id=a4e0101a-252c-80ef-8003-c7c73d99d4b7petitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2079II-2 Listening and favorite synchronization with ListenBrainz2024-02-29T15:04:42ZpetitminionII-2 Listening and favorite synchronization with ListenBrainzHas agreed by email with Nlnet, the user-follow sync is dropped out in favour of listening synchronization.
- forum : https://forum.funkwhale.audio/d/404-how-do-you-want-favorite-synchronization-with-listenbrainz-to-work https://foru...Has agreed by email with Nlnet, the user-follow sync is dropped out in favour of listening synchronization.
- forum : https://forum.funkwhale.audio/d/404-how-do-you-want-favorite-synchronization-with-listenbrainz-to-work https://forum.funkwhale.audio/d/406-listening-synchronization-with-listenbrainz
- spec : https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2652
- mr : https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2658petitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1456IV-2 User-level blocking and muting2024-03-04T18:06:03ZGeorg KrauseIV-2 User-level blocking and mutingGive users control over the content they see and broadcast within the app by allowing them to block or mute other users, artists or channels.
- forum : https://forum.funkwhale.audio/d/562-user-level-blocking-and-muting
- spec : https://...Give users control over the content they see and broadcast within the app by allowing them to block or mute other users, artists or channels.
- forum : https://forum.funkwhale.audio/d/562-user-level-blocking-and-muting
- spec : https://pad.funkwhale.audio/UZ7YFKn1SUCOxSwGpuMasApetitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2082IV-1 Data portability and GDPR2023-12-01T19:36:54ZpetitminionIV-1 Data portability and GDPRWe need to implement this to be GDPR compliant and to ensure users have the freedom to move their information to other pods/services.
For this project, we need to create the JSON model for exported data and create a mechanism to generat...We need to implement this to be GDPR compliant and to ensure users have the freedom to move their information to other pods/services.
For this project, we need to create the JSON model for exported data and create a mechanism to generate it. We also want to look at creating an import system. This would enable users to move from one instance to another.
#rgpdCiarán Ainsworthsporiff@funkwhale.audioCiarán Ainsworthsporiff@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1459Use the user social graph to power discovery2023-12-02T13:59:48ZGeorg KrauseUse the user social graph to power discoveryRecommend content to users based on activity from other users they follow.Recommend content to users based on activity from other users they follow.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2088V-1 Feature-complete mobile app2023-12-01T19:37:02ZpetitminionV-1 Feature-complete mobile appKasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2089V-3 Tauri-based application2024-02-26T10:42:36ZpetitminionV-3 Tauri-based application- Specification: https://pad.funkwhale.audio/wkhYLo8vQZ2zsuO5r-8CNQ?view
- forum : https://forum.funkwhale.audio/d/569-alpha-desktop-app- Specification: https://pad.funkwhale.audio/wkhYLo8vQZ2zsuO5r-8CNQ?view
- forum : https://forum.funkwhale.audio/d/569-alpha-desktop-appGeorg KrauseKasper Sewerynwvffle@funkwhale.audioGeorg Krausehttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2138IV-1 GDPR : Provide a mechanism for extracting uploaded data (MVP)2023-12-20T00:16:43ZpetitminionIV-1 GDPR : Provide a mechanism for extracting uploaded data (MVP)
* RSS feeds
* Download channel/profile data
* Listenings
* Favorites
* Collections
* Playlists
* RSS feeds
* Download channel/profile data
* Listenings
* Favorites
* Collections
* Playlistshttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2077Display remote profiles and allow to follow them2023-03-05T22:52:05ZGeorg KrauseDisplay remote profiles and allow to follow them* Allow to search for remote profiles
* Display remote profile
* send follow request* Allow to search for remote profiles
* Display remote profile
* send follow requesthttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2095Minor improvements to the search result page2023-12-12T08:55:18ZrrrnldMinor improvements to the search result page<!--
Hi there! You are about to share feature request or an idea, 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 yo...<!--
Hi there! You are about to share feature request or an idea, 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 we can deal with your idea or request, 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
-->
## What is the problem you are facing?
<!--
Describe the problem you'd like to solve, and why we need to add or
improve something in the current system to solve that problem.
Be as specific as possible.
-->
I would like to propose some improvements to the current search results page.
Currently, when switching between different tabs, already fetched results are re-fetched. Additionally when searching from the sidebar, the artist tab is shown first, regardless of whether there are any artist results. I notice this often because I mostly search for individual tracks, and first have to navigate away from the empty artist tab. The current normal search interaction for me looks like this: Type into the sidebar → press enter → load results → navigate to tracks → load same results → browse through the pages. This is the interaction that I would like to improve.
What I'm proposing (and would be ready to work on if there's consensus on it making sense) is this:
- Cache already fetched results and use them when switching tabs; this would also speed up the current search interface
- Automatically switch to the first non-empty result tab, if there is any
- Improve tab styling to make it easier to distinguish tabs with and without results
With these improvements _for me_ the normal search interaction would improve to this: Type into the sidebar → press enter → load results → browse through the pages.
## What are the possible drawbacks or issues with the requested changes?
<!--
Altering the system behaviour is not always a free action, and it can impact
user experience, performance, introduce bugs or complexity, etc..
If you think about anything we should keep in mind while
examining your request, please describe it in this section.
-->
There is an ongoing redesign proposal: https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1724
This addresses some of the problems described above, but is not equivalent.
## Context
<!--
If relevant, share additional context here like:
- Links to existing implementations or examples of the requested feature
- Screenshots
-->
Please let me know if there is any interest in this. If yes, I can implement these changes and upstream them. And I'd rather not have my own fork of the funkwhale frontend :)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2096WebSocket connection is not authorized when logged in through OAuth2023-03-11T22:32:42ZKasper Sewerynwvffle@funkwhale.audioWebSocket connection is not authorized when logged in through OAuth<!--
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. Log into an instance through OAuth
2. No cookie is set, so WebSocket request does not send any authorization data
## What happens?
Web socket tries to reconnect resulting in backend errors:
https://dev.funkwhale.audio/funkwhale/funkwhale/-/error_tracking/10/details
## What is expected?
The WebSocket should connect as usual
## Context
**Funkwhale version(s) affected**: develop
**Tested instances**: tanukitunes, @JuniorJPDJ'shttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2097Create guide for testing and bug reporting2023-03-09T07:02:37ZGeorg KrauseCreate guide for testing and bug reportingWhen working on the website we noticed we miss a guide that shows how to test Funkwhale and how to properly report bugs. We should add such guide.
When its done, we need to add the card to the new website again.When working on the website we noticed we miss a guide that shows how to test Funkwhale and how to properly report bugs. We should add such guide.
When its done, we need to add the card to the new website again.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2100Guide how to build custom artifacts2023-03-16T13:07:24ZGeorg KrauseGuide how to build custom artifactsPeople might want to test or run custom builds of Funkwhale. We should provide guides how to build those artifacts to allow people to easily get their desired version.People might want to test or run custom builds of Funkwhale. We should provide guides how to build those artifacts to allow people to easily get their desired version.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2103Currently playing android notification from web interface doesn't works prope...2023-03-22T10:43:56ZNicolas DeriveCurrently playing android notification from web interface doesn't works properly with elapsed timeUsing web interface on a mobile (latest 1.3.0 release candidate to date), the Android notification doesn't seem to reflect current position in the playing track: It displays the total track time and the elapsed time is always set to that...Using web interface on a mobile (latest 1.3.0 release candidate to date), the Android notification doesn't seem to reflect current position in the playing track: It displays the total track time and the elapsed time is always set to that value when playing.
![Screenshot_2023-03-20-09-59-51-484_com.miui.home](/uploads/8b7f0fb113e9d2f85071722e62d2b5f9/Screenshot_2023-03-20-09-59-51-484_com.miui.home.jpg)
When pausing, the elapsed time is back to its proper value (I took the screenshots at a few seconds interval).
![Screenshot_2023-03-20-09-59-56-346_com.miui.home](/uploads/263e5b325c8a667045ed0845161fcc46/Screenshot_2023-03-20-09-59-56-346_com.miui.home.jpg)
Thanks for your help fixing this.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2105Follow-up from "Fix 500 when fetching tracks from Apache+S3 (#1979)"2023-03-23T10:17:49ZGeorg KrauseFollow-up from "Fix 500 when fetching tracks from Apache+S3 (#1979)"The following discussion from !2227 should be addressed:
- [ ] @rickosborne started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2227#note_45820): (+1 comment)
> I can confirm that this patch did...The following discussion from !2227 should be addressed:
- [ ] @rickosborne started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2227#note_45820): (+1 comment)
> I can confirm that this patch did work for me, when running against S3. I applied the changes against my instance running 1.2.9 (just this patch, not everything else between 1.2.9 and it), and it worked without a hitch.
>
> I might also suggest that the docs in the `.env` example get a small tweak. Right now, they say:
>
> ```
> # If you use a S3-compatible storage such as minio, set the following variable
> # the full URL to the storage server. Example:
> # AWS_S3_ENDPOINT_URL=https://minio.mydomain.com
> ```
>
> The way that's worded, it makes it seem like you only need the line if you're using something _compatible_ with S3, but not actually S3 itself. So maybe "S3 or S3-compatible"? Or, just add an S3 example in addition to the minio one, such as:
>
> ```
> # AWS_S3_ENDPOINT_URL=https://s3.us-east-1.amazonaws.com/
> ```
>
> That would be good, also, because it shows that you _don't_ need to duplicate the bucket name from `AWS_STORAGE_BUCKET_NAME`.
>
> But, obviously, I consider the doc tweak a nice-to-have. As it is, this PR works great!https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2107dev-federation: init a federation network with instances using docker-compose2023-03-23T17:25:24ZGeorg Krausedev-federation: init a federation network with instances using docker-composeThe idea is to launch a federation enabled development environment using a single make command. It needs to consists of at least two instances. Those instances need to be accessible using https using a self-signed certificate for a speci...The idea is to launch a federation enabled development environment using a single make command. It needs to consists of at least two instances. Those instances need to be accessible using https using a self-signed certificate for a specific dev domain name. We need to have proper DNS resolution in place for this. Also the instances need to be configured in order to accept the self signed certificate.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2109[subsonic] Add /api/subsonic/rest/getTopSongs.view component2023-04-01T09:52:40ZNicolas Derive[subsonic] Add /api/subsonic/rest/getTopSongs.view componentUsing substreamer Android App to access Funkwhale library, I got this kind of messages:
`api_1 | 2023-03-24 13:03:23,341 django.request WARNING Not Found: /api/subsonic/rest/getTopSongs.view`
This prevents from getting th...Using substreamer Android App to access Funkwhale library, I got this kind of messages:
`api_1 | 2023-03-24 13:03:23,341 django.request WARNING Not Found: /api/subsonic/rest/getTopSongs.view`
This prevents from getting the top songs from each artist in the app, and greatly reduces functionality.
http://www.subsonic.org/pages/api.jsp#getTopSongs
Could you have a look to implement it? Thanks for your help.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2110Server 500 error when searching certain areas of Django admin2023-06-10T18:36:21ZAMoonRabbitServer 500 error when searching certain areas of Django admin<!--
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. Go to the django admin interface via yourdomain/api/admin
2. Go to Music > Library Scans
3. Try to use the search bar embedded in the page
4. Receive blank screen and Error 500
## What happens?
So far, it looks like Libraries, Library Scans, Import Jobs, and Track actors are affected by this issue. I have not tried other areas.
![image](/uploads/c89aff078fd82be3410472a5eace2419/image.png)
Search entered in the box
![image](/uploads/1efd6138abcfd1ffc05420f8796c6656/image.png)
Committing to the search results in Server Error (500)
![image](/uploads/b1206d5c01d7b87009934eb5bd46d2e2/image.png)
Not much in the console.
API container is full of python errors.
[_funkwhale-api-1_logs.txt](/uploads/62cc7b6b18e111de6ba0e458026f67e9/_funkwhale-api-1_logs.txt)
## What is expected?
Search should return results or no results depending on the query.
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.3.0
<!--
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/funkwhale/-/issues/2112Custom.css error despite no custom css info being set2023-04-04T04:26:30ZCasuallynotedCustom.css error despite no custom css info being setContinuing an issue from the Matrix chat, I'm getting this error on my instance:
Refused to apply style from 'https://(my instance name here)/front/custom.css' because its MIME type ('text/html') is not a supported stylesheet MIME type,...Continuing an issue from the Matrix chat, I'm getting this error on my instance:
Refused to apply style from 'https://(my instance name here)/front/custom.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
I don't have any custom css set on my instance, so I don't believe the error should be there. This is in Funkwhale 1.3.0-rc5https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2115Progress bar overlaps text in some scenarios - Frontend2023-04-05T10:21:34ZAMoonRabbitProgress bar overlaps text in some scenarios - Frontend<!--
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. Play music with tall atwork
2. Window size so that album art barely fits in (have 4 windows in grid postion on my browser)
3. note that the progress bar overlaps the text where it's pushed down
## What happens?
Progress bar is overlapping text in some cases where the window size, and album art view sizing leave little space for the track information.
## What is expected?
I am guessing art sizing is done by width, so does not account for height of artwork?
## 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
-->
With and without custom CSS enabled. Niche issue though.
![image](/uploads/260e0b2359d108d890c0909d712529cb/image.png)
![image](/uploads/379ac8ea0600301a060ac046ad38466a/image.png)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2116Update 1.3.0 Docker Deployment Guide - Proxy setup notes2023-04-05T10:22:44ZAMoonRabbitUpdate 1.3.0 Docker Deployment Guide - Proxy setup notes<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using ...<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using Funkwhale, try asking in our
[forum's support board](https://forum.funkwhale.audio/support) or our [support
chat room](https://riot.im/app/#/room/#funkwhale-support:tchncs.de).
* If you think you've found a bug but aren't sure, you can ask in one of the above channels
first. Once you're confident it's a bug, go ahead and create an issue for us to investigate.
Select the **Bug** template in the **Description** dropdown menu. This template contains
helpful tips for creating your report.
* For smaller additions and enhancements, please file a feature request.
Select the **Feature Request** template in the **Description** dropdown
menu. This template contains helpful tips for creating your request.
* If you have ideas for new features or use cases, consider opening a thread in our
[forum](https://forum.funkwhale.audio/t/development). This enables us to
discuss the feature, its use cases, and the development effort it requires.
We always like hearing ideas from our community. If you're still not sure, click
the **Create issue** button and we'll work with you to sort out the issue.
Happy listening! :whale:
-->
Opened for the Docker deployment guide to be tweaked a little. https://docs.funkwhale.audio/develop/administrator_documentation/installation_docs/docker.html
Section regarding the configuration of the reverse proxy, just before the override config steps has the reader check for any variables left in the generated config, but doesn't indicate whether no output is a good thing or not. For someone like me, this could be misleading, though I am sure more technically minded people will understand the command it may help to just add what is expected to alleviate any issues.
![image](/uploads/5b6fde9dadc4a7d1bc73f941a6f99b8f/image.png)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2119More cypress tests2023-04-28T04:03:54ZGeorg KrauseMore cypress testswritten by @Sporiff
A few more examples:
## Ensure profile menu displays correctly
### Authenticated
1. Log in
2. Expect the user profile menu to show a circle icon with "t"
### Unauthenticated
1. Expect the profile menu to show a...written by @Sporiff
A few more examples:
## Ensure profile menu displays correctly
### Authenticated
1. Log in
2. Expect the user profile menu to show a circle icon with "t"
### Unauthenticated
1. Expect the profile menu to show a cog icon
## Ensure admin panels are not accessible to unauthenticated users
1. Navigate to any `/manage` view
2. Expect to be redirected to `/library`
## Ensure all relevant sidebar items are loaded when logged in/unauthenticated
### Authenticated
1. Log in
2. Expect the sidebar to show the "My Library" section
### Unauthenticated
1. Expect the sidebar to not show the "My Library" section
## Test use of modals at smaller responsive sizes (e.g. user modals, track modals)
### Desktop
1. Select a track popover
2. Expect a dropdown menu of options to appear
### Mobile
1. Select a track popover
2. Expect a modal of options to appearhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2120Refreshing an in-place imported library takes way too long2023-05-02T07:42:52ZSören BRefreshing an in-place imported library takes way too long## Steps to reproduce
1. Import a large music library (mine is ~300 GB) with `python manage.py import_files {id} {filepath} --recursive --noinput --in-place`
2. Add/remove/change some files in the given folder
3. Refresh the library wit...## Steps to reproduce
1. Import a large music library (mine is ~300 GB) with `python manage.py import_files {id} {filepath} --recursive --noinput --in-place`
2. Add/remove/change some files in the given folder
3. Refresh the library with the same command as above
## What happens?
This takes an incredibly long time. It will be 35 batches and each of them will take over a minute, so it takes like something between 30 and 45 minutes complete
## What is expected?
I would expect this to be substantially faster than the initial import is. I threw various music management solutions at this setup already and pretty much all of them can do a full metadata refresh in somewhere between two and five minutes
## Context
**Funkwhale version(s) affected**: 1.2.10
I dug around the sourcecode a bit, and I am pretty sure that this happens, because a refresh hashes every single file again. This seems really overeager, since you could compare the filesize and modification date with the given file first (i am somewhat certain that both are available) before loading the file at all, which hopefully should net a big performance increase. If that is implemented, it might make sense to add another CLI argument to force a hard refresh that actually does check all the hashes to account for any synchronization weirdnesses that might maybe occurhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2122Internal Server Error: /api/subsonic/rest/getCoverArt.view (playing a track f...2023-11-19T13:30:52ZNicolas DeriveInternal Server Error: /api/subsonic/rest/getCoverArt.view (playing a track from advised Ultrasonic android app)**How to reproduce:**
Search a track using the search feature. Find it, click on it to play.
**Funkwhale version :** latest 1.3.0~rc
**The error:**
```
api_1 | 2023-05-03 16:26:06,160 django.request ERROR Internal Serv...**How to reproduce:**
Search a track using the search feature. Find it, click on it to play.
**Funkwhale version :** latest 1.3.0~rc
**The error:**
```
api_1 | 2023-05-03 16:26:06,160 django.request ERROR Internal Server Error: /api/subsonic/rest/getCoverArt.view
api_1 | Traceback (most recent call last):
api_1 | File "/venv/lib/python3.10/site-packages/asgiref/sync.py", line 472, in thread_handler
api_1 | raise exc_info[1]
api_1 | File "/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 38, in inner
api_1 | response = await get_response(request)
api_1 | File "/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 233, in _get_response_async
api_1 | response = await wrapped_callback(request, *callback_args, **callback_kwargs)
api_1 | File "/venv/lib/python3.10/site-packages/asgiref/sync.py", line 435, in __call__
api_1 | ret = await asyncio.wait_for(future, timeout=None)
api_1 | File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
api_1 | return await fut
api_1 | File "/venv/lib/python3.10/site-packages/asgiref/current_thread_executor.py", line 22, in run
api_1 | result = self.fn(*self.args, **self.kwargs)
api_1 | File "/venv/lib/python3.10/site-packages/asgiref/sync.py", line 476, in thread_handler
api_1 | return func(*args, **kwargs)
api_1 | File "/usr/lib/python3.10/contextlib.py", line 79, in inner
api_1 | return func(*args, **kwds)
api_1 | File "/venv/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
api_1 | return view_func(*args, **kwargs)
api_1 | File "/venv/lib/python3.10/site-packages/rest_framework/viewsets.py", line 125, in view
api_1 | return self.dispatch(request, *args, **kwargs)
api_1 | File "/app/funkwhale_api/subsonic/views.py", line 138, in dispatch
api_1 | return super().dispatch(request, *args, **kwargs)
api_1 | File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
api_1 | response = self.handle_exception(exc)
api_1 | File "/app/funkwhale_api/subsonic/views.py", line 151, in handle_exception
api_1 | return super().handle_exception(exc)
api_1 | File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
api_1 | self.raise_uncaught_exception(exc)
api_1 | File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
api_1 | raise exc
api_1 | File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
api_1 | response = handler(request, *args, **kwargs)
api_1 | File "/app/funkwhale_api/subsonic/views.py", line 794, in get_cover_art
api_1 | music_models.Artist.objects.exclude(attachment_cover=None)
api_1 | File "/venv/lib/python3.10/site-packages/django/db/models/query.py", line 435, in get
api_1 | raise self.model.DoesNotExist(
api_1 | funkwhale_api.music.models.Artist.DoesNotExist: Artist matching query does not exist.
```
Thanks for your help fixing this.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2126Delete files from tmp storage after successful processing2023-05-17T13:53:15ZJulian-Samuel GebührDelete files from tmp storage after successful processing<!--
Hi there! You are about to share feature request or an idea, 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 yo...<!--
Hi there! You are about to share feature request or an idea, 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 we can deal with your idea or request, 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
-->
## What is the problem you are facing?
<!--
Describe the problem you'd like to solve, and why we need to add or
improve something in the current system to solve that problem.
Be as specific as possible.
-->
I run out of temporary disk space when uploading music.
## Proposed solution
Delete files in tmp directory when they arn't needed anymore
## What are the possible drawbacks or issues with the requested changes?
Improves complexity
## Context
I deploy my instance via [MASH](https://github.com/mother-of-all-self-hosting/mash-playbook) where the docker container is used and set to `--read-only`. A tmpfs is used but limited to 100MB. I receive the following error message when uploading files
```
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: [2023-05-12 11:18:34 +0000] [9] [ERROR] Exception in ASGI application
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: Traceback (most recent call last):
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/venv/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: result = await app( # type: ignore[func-returns-value]
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: return await self.app(scope, receive, send)
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/venv/lib/python3.10/site-packages/channels/routing.py", line 62, in __call__
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: return await application(scope, receive, send)
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/venv/lib/python3.10/site-packages/django/core/handlers/asgi.py", line 149, in __call__
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: body_file = await self.read_body(receive)
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/venv/lib/python3.10/site-packages/django/core/handlers/asgi.py", line 181, in read_body
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: body_file.write(message['body'])
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/usr/lib/python3.10/tempfile.py", line 795, in write
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: self._check(file)
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/usr/lib/python3.10/tempfile.py", line 691, in _check
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: self.rollover()
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: File "/usr/lib/python3.10/tempfile.py", line 703, in rollover
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: newfile.write(file.getvalue())
May 12 11:18:34 s3 mash-funkwhale-api[1339867]: OSError: [Errno 28] No space left on device
```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2128Document typesense2023-05-16T12:03:58ZpetitminionDocument typesenseAdd typesense doc
1. Docker setup :
To enable typesense we must :
- Setup TYPESENSE_API_KEY in env file
- run : `docker compose --profile typesense -f dev.yml up`
2. Debian setup :
\\to doAdd typesense doc
1. Docker setup :
To enable typesense we must :
- Setup TYPESENSE_API_KEY in env file
- run : `docker compose --profile typesense -f dev.yml up`
2. Debian setup :
\\to dopetitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2130Use imported types in props2023-05-17T11:38:16ZGeorg KrauseUse imported types in propsWe can now safely use the imported types in props. We already have the TODOs for that, so I'd do it either in this MR or create an issue for itWe can now safely use the imported types in props. We already have the TODOs for that, so I'd do it either in this MR or create an issue for itKasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2131Replace duplicated script tags with defineOptions2023-12-12T08:35:06ZGeorg KrauseReplace duplicated script tags with defineOptionsWe can replace the duplicated `<script>` tags with `defineOptions`We can replace the duplicated `<script>` tags with `defineOptions`1.5.0Kasper Sewerynwvffle@funkwhale.audioKasper Sewerynwvffle@funkwhale.audiohttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2132Simplify emit definitions2023-05-19T07:24:53ZGeorg KrauseSimplify emit definitions@wvffle wrote:
> we can now write emit definitions (`Events` type in our code) in much more cleaner way:
>
> ```diff
> interface Events {
> - (e: 'submit', value: string): void
> + submit: [value: string]
> }
> ```@wvffle wrote:
> we can now write emit definitions (`Events` type in our code) in much more cleaner way:
>
> ```diff
> interface Events {
> - (e: 'submit', value: string): void
> + submit: [value: string]
> }
> ```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2139IV-1 GDPR : Data protection policy2023-05-26T11:03:34ZpetitminionIV-1 GDPR : Data protection policyProvide a mechanism for linking to a data protection policy + provide a default template for how Funkwhale the software stores informationProvide a mechanism for linking to a data protection policy + provide a default template for how Funkwhale the software stores informationhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2140IV-1 GDPR : Redirect a profile to a new account2023-12-05T13:56:58ZpetitminionIV-1 GDPR : Redirect a profile to a new accountRedirect a profile to a new account using Webfinger and moving users to the new profile, do this recursively for channels and collections
* Implement API for moving files when a user redirects their account (only collections)
* Channels...Redirect a profile to a new account using Webfinger and moving users to the new profile, do this recursively for channels and collections
* Implement API for moving files when a user redirects their account (only collections)
* Channels move separately given that they might be owned by multiple peoplehttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2141IV-1 GDPR : Add ability to retrieve uploaded files (rate limited endpoint/adm...2024-02-02T18:20:13ZpetitminionIV-1 GDPR : Add ability to retrieve uploaded files (rate limited endpoint/admin approval)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2152`.ui.positive.message` colored wrong in dark theme since version 1.3.02023-06-09T08:45:19ZJulian Rademacher`.ui.positive.message` colored wrong in dark theme since version 1.3.0<!--
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. Visit the page at /about
2. Switch theme to dark if light theme is applied
3. Make sure you are logged in
## What happens?
<!--
Describe what happens once the previous steps are completed.
-->
In element `.signup-form.content` ("Sign up") `.ui.positive.message` seems to be colored wrong in dark theme.
## What is expected?
<!--
Describe the expected behaviour.
-->
Element `.ui.positive.message` should be colored in another way.
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.3.0
<!--
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
-->
- tested on Google Chrome version 114.0.5735.90
- self hosted with [YunoHost](https://yunohost.org/)
![about](/uploads/1ccb9e7f7b2cef8c41d814d32a65176c/about.png)https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2158No sound when launch track2024-02-06T07:27:51ZGerald BigotNo sound when launch track<!--
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. Launch "Play" button : no sound and no timer
## What happens?
<!--
Describe what happens once the previous steps are completed.
-->
## What is expected?
<!--
Describe the expected behaviour.
-->
Play track with sound
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.2.10
<!--
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
-->
Mozilla Firefox and Chromium
Apache2 as proxyGeorg KrauseGeorg Krausehttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2165"Accountless report categories" allow sending reports to other instances on b...2023-06-19T07:57:32ZInex Code"Accountless report categories" allow sending reports to other instances on behalf of the service userWhen there are active accountless report categories, the instance can be anonymously used to send ActivityPub spam to other instances by reporting federating content. The better behavior would be to only allow reporting local content ano...When there are active accountless report categories, the instance can be anonymously used to send ActivityPub spam to other instances by reporting federating content. The better behavior would be to only allow reporting local content anonymously.
I got a heads-up from the admin of another instance when during an authorized penetration testing automated tools created a dozen of reports on their content.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2167Speed-up frontend related pipeline2023-06-21T08:23:27ZGeorg KrauseSpeed-up frontend related pipelineThe following discussion from !1795 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1795#note_53159): (+1 comment)
> Couldn't we have a common `prepare_fro...The following discussion from !1795 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1795#note_53159): (+1 comment)
> Couldn't we have a common `prepare_front` step that would install the dependencies and use it to save the time on installing dependencies for `lint_front`, `test_front` and `test_integration`?https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2170Run integration tests against current API and front2023-06-22T04:23:20ZKasper Sewerynwvffle@funkwhale.audioRun integration tests against current API and frontThe following discussion from !1795 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1795#note_53178): (+5 comments)
> The tests are now run entirely on `de...The following discussion from !1795 should be addressed:
- [ ] @wvffle started a [discussion](https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1795#note_53178): (+5 comments)
> The tests are now run entirely on `demo.funkwhale.audio`, right? Is there a way to run them against API and and frontend that are in the repo?https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2171update frontend to radio session track api v22024-01-26T15:14:56Zpetitminionupdate frontend to radio session track api v2following https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2430.following https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2430.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2174Renovate improvements2023-07-06T09:04:18ZGeorg KrauseRenovate improvementsDuring the use of renovate we got a few improvements that would help us:
* maybe we want to add a higher priority on the stable branch, and merge the stable branch in develop everyweek. This would deduplicate the amount of renovate MRs....During the use of renovate we got a few improvements that would help us:
* maybe we want to add a higher priority on the stable branch, and merge the stable branch in develop everyweek. This would deduplicate the amount of renovate MRs. (by @jooola)
* Reduce the noise for some packages, eg boto by using https://docs.renovatebot.com/noise-reduction/https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2175Bad Fediverse federation upon server migration2023-07-29T11:07:00ZMarcel CostaBad Fediverse federation upon server migration<!--
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. Migrate from a working server to a new one following [the backup restoration guide](https://docs.funkwhale.audio/administrator/upgrade/backup.html#restore-a-backup).
2. Trying to see a track from another Fediverse software server (tried Mastodon and Akkoma).
## What happens?
I have migrated one instance that was working ok and now federation is malfunctioning.
Inside our server everything is ok, but from mastodon and akkoma, when trying to see a track by its URL they don't show up. In addition, when following a channel from akkoma it sticks in "Waiting for confirmation".
<!--
Describe what happens once the previous steps are completed.
-->
## What is expected?
<!--
Describe the expected behaviour.
-->
Songs should appear when searched in other Fediverse software (in order to boost them and share them). It worked before the server migration.
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.3.0
<!--
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
-->
**Server OS version**: ubuntu-20.04-x86_64
I have looked some logs in the server and found nothing that points me to what's happening, but I may be missing the correct ones!
Thanks in advance for any help you can provide and for the amazing job you are doing. Funkwhale is filling a demand so much needed, in my opinion.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2177Can't follow funkwhale channel or user from pleroma2023-10-27T04:24:19ZtusooaCan't follow funkwhale channel or user from pleroma<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using ...<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using Funkwhale, try asking in our
[forum's support board](https://forum.funkwhale.audio/support) or our [support
chat room](https://riot.im/app/#/room/#funkwhale-support:tchncs.de).
* If you think you've found a bug but aren't sure, you can ask in one of the above channels
first. Once you're confident it's a bug, go ahead and create an issue for us to investigate.
Select the **Bug** template in the **Description** dropdown menu. This template contains
helpful tips for creating your report.
* For smaller additions and enhancements, please file a feature request.
Select the **Feature Request** template in the **Description** dropdown
menu. This template contains helpful tips for creating your request.
* If you have ideas for new features or use cases, consider opening a thread in our
[forum](https://forum.funkwhale.audio/t/development). This enables us to
discuss the feature, its use cases, and the development effort it requires.
We always like hearing ideas from our community. If you're still not sure, click
the **Create issue** button and we'll work with you to sort out the issue.
Happy listening! :whale:
-->
0. Follow a funkwhale (1.3.1) channel or user from Pleroma (2.5.2)
1. It gets stuck at "request sent"
See also: https://git.pleroma.social/pleroma/pleroma/-/issues/2539https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2178Starting a radio does not clear the queue.2023-07-07T04:03:35ZKasper Sewerynwvffle@funkwhale.audioStarting a radio does not clear the queue.UI/UX is inconsistent in some cases. One of such cases is playing an album, track or playlist. When user does so, it clears the queue and enqueues the desired thing by default. However when it comes to radios, when we start a radio, the ...UI/UX is inconsistent in some cases. One of such cases is playing an album, track or playlist. When user does so, it clears the queue and enqueues the desired thing by default. However when it comes to radios, when we start a radio, the radio tracks are being enqueued without clearing previous queue.
Although we already have an issue that is titled exactly the same, this issue is about inconsistency in the UX rather than a bug. If you read through #343, you can conclude that this behavior is desired and by design. In my opinion in somewhat hurts the UX and should be changed.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2179Embed: An unknown error occurred while loading this artist.2023-07-07T10:47:18ZtusooaEmbed: An unknown error occurred while loading this artist.<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using ...<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using Funkwhale, try asking in our
[forum's support board](https://forum.funkwhale.audio/support) or our [support
chat room](https://riot.im/app/#/room/#funkwhale-support:tchncs.de).
* If you think you've found a bug but aren't sure, you can ask in one of the above channels
first. Once you're confident it's a bug, go ahead and create an issue for us to investigate.
Select the **Bug** template in the **Description** dropdown menu. This template contains
helpful tips for creating your report.
* For smaller additions and enhancements, please file a feature request.
Select the **Feature Request** template in the **Description** dropdown
menu. This template contains helpful tips for creating your request.
* If you have ideas for new features or use cases, consider opening a thread in our
[forum](https://forum.funkwhale.audio/t/development). This enables us to
discuss the feature, its use cases, and the development effort it requires.
We always like hearing ideas from our community. If you're still not sure, click
the **Create issue** button and we'll work with you to sort out the issue.
Happy listening! :whale:
-->
I got "An unknown error occurred while loading this artist." when I try to open up the embed.
JavaScript console:
```
TypeError: track.album is null
fetchTracks https://[redacted]/embed.html?type=artist&id=1:164
fetchTracks https://[redacted]/embed.html?type=artist&id=1:159
async* https://[redacted]/embed.html?type=artist&id=1:176
embed.html:177:17
<anonymous> https://[redacted]/embed.html?type=artist&id=1:177
(Async: promise callback)
<anonymous> https://[redacted]/embed.html?type=artist&id=1:176
```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2180Cannot remove license of a track2023-07-07T10:45:49ZtusooaCannot remove license of a track<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using ...<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using Funkwhale, try asking in our
[forum's support board](https://forum.funkwhale.audio/support) or our [support
chat room](https://riot.im/app/#/room/#funkwhale-support:tchncs.de).
* If you think you've found a bug but aren't sure, you can ask in one of the above channels
first. Once you're confident it's a bug, go ahead and create an issue for us to investigate.
Select the **Bug** template in the **Description** dropdown menu. This template contains
helpful tips for creating your report.
* For smaller additions and enhancements, please file a feature request.
Select the **Feature Request** template in the **Description** dropdown
menu. This template contains helpful tips for creating your request.
* If you have ideas for new features or use cases, consider opening a thread in our
[forum](https://forum.funkwhale.audio/t/development). This enables us to
discuss the feature, its use cases, and the development effort it requires.
We always like hearing ideas from our community. If you're still not sure, click
the **Create issue** button and we'll work with you to sort out the issue.
Happy listening! :whale:
-->
0. Publish a track with some license.
1. Edit it and clear the license field.
2. Submit
3. "Error while submitting edit: You must update at least one field"https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2181Funkwhale /media/albums/covers not displaying song covers2023-11-10T11:55:13ZАндрейFunkwhale /media/albums/covers not displaying song coversI am using a local installation of Funkwhale in an LXC container (version 1.2.9), and it works perfectly. I migrated the project to Docker with an upgrade to version 1.3.1 following the official instructions. After the migration, I notic...I am using a local installation of Funkwhale in an LXC container (version 1.2.9), and it works perfectly. I migrated the project to Docker with an upgrade to version 1.3.1 following the official instructions. After the migration, I noticed that approximately half of my songs are missing their album covers, which are located in the path `/media/albums/covers/...` The actual cover images exist on the server, but the frontend cannot see them and returns an error:
```
"Sorry, the page you were looking for does not exist:
https://music.local/media/albums/covers/2019/09/23/9a274ded-583a-4860-abab-8b942e07a2fa.jpg"
```
If I reupload a song, the cover ends up in the path `/media/attachments` and is displayed correctly. However, there are thousands of such songs! How can I automate this process? I have looked at the changelog and performed the following actions before the migration:
```
source /var/calculate/www/funkwhale/virtualenv/bin/activate
rm -rf /var/calculate/www/funkwhale/data/media/sized/
python manage.py fw media generate-thumbnails
```
Funkwhale is set up behind Nginx Proxy Manager with socket support, etc.
Here is my .env configuration:
```
POSTGRES_USER=funkwhale
POSTGRES_PASSWORD=funkwhale
POSTGRES_DB=funkwhale
LANG=ru_RU.utf8
FUNKWHALE_VERSION=1.3.0
FUNKWHALE_API_IP=127.0.0.1
FUNKWHALE_API_PORT=5000
FUNKWHALE_WEB_WORKERS=4
FUNKWHALE_HOSTNAME=music.local
FUNKWHALE_PROTOCOL=https
LOGLEVEL=error
EMAIL_CONFIG=smtp://mysmtp:25
DEFAULT_FROM_EMAIL=noreply@funkwhale.calculate.ru
REVERSE_PROXY_TYPE=nginx
DATABASE_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres/$POSTGRES_DB
CACHE_URL=redis://redis:6379/0
DJANGO_SETTINGS_MODULE=config.settings.production
DJANGO_SECRET_KEY=secret
DJANGO_ADMIN_URL=^api/admin/
PROXY_MEDIA=true
MEDIA_ROOT=/data/media
STATIC_ROOT=/data/static
MUSIC_DIRECTORY_PATH=/data/music
FUNKWHALE_FRONTEND_PATH=/data/front/dist
MUSIC_DIRECTORY_SERVE_PATH=./music
NGINX_MAX_BODY_SIZE=100M
#THUMBNAIL_JPEG_RESIZE_QUALITY=70
```
My docker-compose.yml file:
```
#https://docs.funkwhale.audio/administrator/installation/docker.html
# https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.3.0/deploy/docker-compose.yml
version: "3.9"
services:
postgres:
image: postgres:15-alpine
env_file: .env
volumes:
- ./postgres-15:/var/lib/postgresql/data
networks:
- local
restart: unless-stopped
redis:
image: redis:7-alpine
env_file: .env
volumes:
- ./redis:/data
networks:
- local
restart: unless-stopped
celeryworker:
image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
env_file: .env
command:
- celery
- --app=funkwhale_api.taskapp
- worker
- --loglevel=INFO
- --concurrency=${CELERYD_CONCURRENCY-0}
depends_on:
- postgres
- redis
volumes:
- "./music:/music:ro"
- "./media:${MEDIA_ROOT}"
networks:
- local
restart: unless-stopped
celerybeat:
image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
env_file: .env
command:
- celery
- --app=funkwhale_api.taskapp
- beat
- --loglevel=INFO
depends_on:
- postgres
- redis
networks:
- local
restart: unless-stopped
api:
image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
env_file: .env
depends_on:
- postgres
- redis
volumes:
- "./music:${MUSIC_DIRECTORY_PATH-/music}:ro"
- "./media:${MEDIA_ROOT}"
- "./static:${STATIC_ROOT}"
healthcheck:
test: ["CMD-SHELL", "funkwhale-manage test"]
interval: 5s
timeout: 5s
retries: 10
networks:
- local
- proxy
restart: unless-stopped
funkwhale:
image: funkwhale/front:${FUNKWHALE_VERSION:-latest}
env_file: .env
depends_on:
api:
condition: service_healthy
volumes:
- "./music:${MUSIC_DIRECTORY_PATH-/music}:ro"
- "./media:${MEDIA_ROOT}:ro"
- "./static:/usr/share/nginx/html/staticfiles:ro"
networks:
- proxy
- local
restart: unless-stopped
networks:
local:
proxy:
external: true
# https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.3.0/deploy/docker-compose.yml
version: "3.9"
services:
postgres:
image: postgres:15-alpine
env_file: .env
volumes:
- ./postgres-15:/var/lib/postgresql/data
networks:
- local
restart: unless-stopped
redis:
image: redis:7-alpine
env_file: .env
volumes:
- ./redis:/data
networks:
- local
restart: unless-stopped
celeryworker:
image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
env_file: .env
command:
- celery
- --app=funkwhale_api.taskapp
- worker
- --loglevel=INFO
- --concurrency=${CELERYD_CONCURRENCY-0}
depends_on:
- postgres
- redis
volumes:
- "./music:/music:ro"
- "./media:${MEDIA_ROOT}"
networks:
- local
restart: unless-stopped
celerybeat:
image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
env_file: .env
command:
- celery
- --app=funkwhale_api.taskapp
- beat
- --loglevel=INFO
depends_on:
- postgres
- redis
networks:
- local
restart: unless-stopped
api:
image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
env_file: .env
depends_on:
- postgres
- redis
volumes:
- "./music:${MUSIC_DIRECTORY_PATH-/music}:ro"
- "./media:${MEDIA_ROOT}"
- "./static:${STATIC_ROOT}"
healthcheck:
test: ["CMD-SHELL", "funkwhale-manage test"]
interval: 5s
timeout: 5s
retries: 10
networks:
- local
- proxy
restart: unless-stopped
funkwhale:
image: funkwhale/front:${FUNKWHALE_VERSION:-latest}
env_file: .env
depends_on:
api:
condition: service_healthy
volumes:
- "./music:${MUSIC_DIRECTORY_PATH-/music}:ro"
- "./media:${MEDIA_ROOT}:ro"
- "./static:/usr/share/nginx/html/staticfiles:ro"
networks:
- proxy
- local
restart: unless-stopped
networks:
local:
proxy:
external: true
```
A list of migrations might be helpful:
```
33cd7f4470b9:/data/media# funkwhale-manage showmigrations
account
[X] 0001_initial
[X] 0002_email_max_length
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
[X] 0003_logentry_add_action_flag_choices
audio
[X] 0001_initial
[X] 0002_channel_metadata
[X] 0003_channel_rss_url
[X] 0004_alter_channel_metadata
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
[X] 0009_alter_user_last_name_max_length
[X] 0010_alter_group_name_max_length
[X] 0011_update_proxy_permissions
[X] 0012_alter_user_first_name_max_length
authtoken
[X] 0001_initial
[X] 0002_auto_20160226_1747
[X] 0003_tokenproxy
common
[X] 0001_initial
[X] 0002_mutation
[X] 0003_cit_extension
[X] 0004_auto_20191111_1338
[X] 0005_auto_20191125_1421
[X] 0006_content
[X] 0007_auto_20200116_1610
[X] 0008_auto_20200701_1317
[X] 0009_auto_20220627_1915
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
dynamic_preferences
[X] 0001_initial
[X] 0002_auto_20150712_0332
[X] 0003_auto_20151223_1407
[X] 0004_move_user_model
[X] 0005_auto_20181120_0848
[X] 0006_auto_20191001_2236
favorites
[X] 0001_initial
federation
[X] 0001_initial
[X] 0002_auto_20180403_1620
[X] 0003_auto_20180407_1010
[X] 0004_auto_20180410_2025
[X] 0005_auto_20180413_1723
[X] 0006_auto_20180521_1702
[X] 0007_auto_20180807_1748
[X] 0008_auto_20180807_1748
[X] 0009_auto_20180822_1956
[X] 0010_auto_20180904_2011
[X] 0011_auto_20180910_1902
[X] 0012_auto_20180920_1803
[X] 0013_auto_20181226_1935
[X] 0014_auto_20181205_0958
[X] 0015_populate_domains
[X] 0016_auto_20181227_1605
[X] 0017_auto_20190130_0926
[X] 0018_fetch
[X] 0019_auto_20190611_0851
[X] 0020_auto_20190730_0846
[X] 0021_auto_20191029_1257
[X] 0022_auto_20191204_1539
[X] 0023_actor_summary_obj
[X] 0024_actor_attachment_icon
[X] 0025_auto_20200317_0820
[X] 0026_public_key_format
[X] 0027_auto_20220627_1915
[X] 0028_auto_20221027_1141
history
[X] 0001_initial
[X] 0002_auto_20180325_1433
moderation
[X] 0001_initial
[X] 0002_auto_20190213_0927
[X] 0003_report
[X] 0004_note
[X] 0005_auto_20200317_0820
[X] 0006_auto_20200803_1222
[X] 0007_auto_20220627_1915
music
[X] 0001_initial
[X] 0002_auto_20151215_1645
[X] 0003_auto_20151222_2233
[X] 0004_track_tags
[X] 0005_deduplicate
[X] 0006_unique_mbid
[X] 0007_track_position
[X] 0008_auto_20160529_1456
[X] 0009_auto_20160920_1614
[X] 0010_auto_20160920_1742
[X] 0011_rename_files
[X] 0012_auto_20161122_1905
[X] 0013_auto_20171213_2211
[X] 0014_importjob_track_file
[X] 0015_bind_track_file_to_import_job
[X] 0016_trackfile_acoustid_track_id
[X] 0017_auto_20171227_1728
[X] 0018_auto_20180218_1554
[X] 0019_populate_mimetypes
[X] 0020_importbatch_status
[X] 0021_populate_batch_status
[X] 0022_importbatch_import_request
[X] 0023_auto_20180407_1010
[X] 0024_populate_uuid
[X] 0025_auto_20180419_2023
[X] 0026_trackfile_accessed_date
[X] 0027_auto_20180515_1808
[X] 0028_importjob_replace_if_duplicate
[X] 0029_auto_20180807_1748
[X] 0030_auto_20180825_1411
[X] 0031_auto_20180914_2007
[X] 0032_track_file_to_upload
[X] 0033_auto_20181023_1837
[X] 0034_auto_20181127_0325
[X] 0035_auto_20181203_1515
[X] 0036_track_disc_number
[X] 0037_auto_20190103_1757
[X] 0038_attributed_to
[X] 0039_auto_20190423_0820
[X] 0040_auto_20191021_1318
[X] 0041_auto_20191021_1705
[X] 0042_album_attachment_cover
[X] 0043_album_cover_attachment
[X] 0044_full_text_search
[X] 0045_full_text_search_stop_words
[X] 0046_auto_20200113_1018
[X] 0047_auto_20200116_1246
[X] 0048_auto_20200120_0900
[X] 0049_auto_20200122_1020
[X] 0050_auto_20200129_1344
[X] 0051_auto_20200319_1249
[X] 0052_auto_20200505_0810
[X] 0053_denormalize_audio_permissions
[X] 0054_alter_uploadversion_mimetype
[X] 0055_auto_20220627_1915
[X] 0056_alter_artist_content_category
[X] 0057_auto_20221118_2108
playlists
[X] 0001_initial
[X] 0002_auto_20180316_2217
[X] 0003_auto_20180319_1214
[X] 0004_auto_20180320_1713
radios
[X] 0001_initial
[X] 0002_radiosession_session_key
[X] 0003_auto_20160521_1708
[X] 0004_auto_20180107_1813
[X] 0005_auto_20200803_1222
[X] 0006_radiosession_config
[X] 0006_alter_radio_config
[X] 0007_merge_20220715_0801
requests
[X] 0001_initial
sessions
[X] 0001_initial
sites
[X] 0001_initial
[X] 0002_set_site_domain_and_name
[X] 0003_auto_20171214_2205
[X] 0004_alter_site_options
socialaccount
[X] 0001_initial
[X] 0002_token_max_lengths
[X] 0003_extra_data_default_dict
tags
[X] 0001_initial
[X] 0002_auto_20200803_1222
users
[X] 0001_initial
[X] 0002_auto_20171214_2205
[X] 0003_auto_20171226_1357
[X] 0004_user_privacy_level
[X] 0005_user_subsonic_api_token
[X] 0006_auto_20180517_2324
[X] 0007_auto_20180524_2009
[X] 0008_auto_20180617_1531
[X] 0009_auto_20180619_2024
[X] 0010_user_avatar
[X] 0011_auto_20180721_1317
[X] 0012_user_upload_quota
[X] 0013_auto_20181206_1008
[X] 0014_oauth
[X] 0015_application_scope
[X] 0016_auto_20190920_0857
[X] 0017_actor_avatar
[X] 0018_auto_20200705_0829
[X] 0019_auto_20200718_0741
[X] 0020_application_token
[X] 0021_auto_20210703_1810
[X] 0022_auto_20221119_1819
[X] 0022_alter_user_settings
[X] 0023_merge_20221125_1902
```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2190Can't change FUNKWHALE_API_PORT in docker setup, breaks API2023-08-31T18:00:01ZcodlCan't change FUNKWHALE_API_PORT in docker setup, breaks API## Steps to reproduce
1. Follow the docker install guide at https://docs.funkwhale.audio/administrator/installation/docker.html up to editing `.env`
2. In `.env`, set `FUNKWHALE_API_PORT` to anything but 5000, for example, 3456
3. Finis...## Steps to reproduce
1. Follow the docker install guide at https://docs.funkwhale.audio/administrator/installation/docker.html up to editing `.env`
2. In `.env`, set `FUNKWHALE_API_PORT` to anything but 5000, for example, 3456
3. Finish following the guide and set up a reverse proxy to forward to 127.0.0.1:3456
## What happens?
Frontend is accessible via the reverse proxy, but all API requests return 502 errors. It's not possible to log in.
In the docker logs, the frontend complains that it cannot connect to the api at [some internal docker address]:3456, says connection refused.
## What is expected?
Frontend is accessible via the reverse proxy and logging in works fine.
## Context
**Funkwhale version(s) affected**: 1.3.1
I needed to change which external port funkwhale listened on, but [a comment](https://dev.funkwhale.audio/funkwhale/funkwhale/-/blob/1.3.1/deploy/docker-compose.yml#L93) in `docker-compose.yml` prompted me to change that variable in `.env` rather than change the port mapping directly. It seems that changing the variable changes the port mapping *and* which port the frontend looks for the API at, but *not* which port the API listens on.
I worked around this by just editing the port mapping in `docker-compose.yml` like I was going to in the first place.https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2191Updating Podcasts doesn't work2023-08-16T07:04:51ZGeorg KrauseUpdating Podcasts doesn't workReported at https://forum.funkwhale.audio/d/357-new-podcasts-not-being-fetched/3
```
[2023-07-08 02:57:02,805: WARNING/MainProcess] File "/var/www/funkwhale/venv/lib/python3.9/site-packages/celery/beat.py", line 515, in __init__
[2023-0...Reported at https://forum.funkwhale.audio/d/357-new-podcasts-not-being-fetched/3
```
[2023-07-08 02:57:02,805: WARNING/MainProcess] File "/var/www/funkwhale/venv/lib/python3.9/site-packages/celery/beat.py", line 515, in __init__
[2023-07-08 02:57:02,806: WARNING/MainProcess]
[2023-07-08 02:57:02,806: WARNING/MainProcess] super().__init__(*args, **kwargs)
[2023-07-08 02:57:02,806: WARNING/MainProcess] File "/var/www/funkwhale/venv/lib/python3.9/site-packages/celery/beat.py", line 271, in __init__
[2023-07-08 02:57:02,806: WARNING/MainProcess]
[2023-07-08 02:57:02,806: WARNING/MainProcess] self.setup_schedule()
[2023-07-08 02:57:02,806: WARNING/MainProcess] File "/var/www/funkwhale/venv/lib/python3.9/site-packages/celery/beat.py", line 543, in setup_schedule
[2023-07-08 02:57:02,807: WARNING/MainProcess]
[2023-07-08 02:57:02,807: WARNING/MainProcess] self._create_schedule()
[2023-07-08 02:57:02,807: WARNING/MainProcess] File "/var/www/funkwhale/venv/lib/python3.9/site-packages/celery/beat.py", line 576, in _create_schedule
[2023-07-08 02:57:02,807: WARNING/MainProcess]
[2023-07-08 02:57:02,807: WARNING/MainProcess] self._store['entries'] = {}
[2023-07-08 02:57:02,807: WARNING/MainProcess] File "/usr/lib/python3.9/shelve.py", line 125, in __setitem__
[2023-07-08 02:57:02,808: WARNING/MainProcess]
[2023-07-08 02:57:02,808: WARNING/MainProcess] self.dict[key.encode(self.keyencoding)] = f.getvalue()
[2023-07-08 02:57:02,808: WARNING/MainProcess] _dbm
[2023-07-08 02:57:02,808: WARNING/MainProcess] .
[2023-07-08 02:57:02,808: WARNING/MainProcess] error
[2023-07-08 02:57:02,808: WARNING/MainProcess] :
[2023-07-08 02:57:02,808: WARNING/MainProcess] cannot add item to database
[2023-07-08 02:57:02,998: WARNING/MainProcess] Exception ignored in:
[2023-07-08 02:57:02,998: WARNING/MainProcess] <function Shelf.__del__ at 0x7f93825820>
[2023-07-08 02:57:02,998: WARNING/MainProcess] Traceback (most recent call last):
[2023-07-08 02:57:02,998: WARNING/MainProcess] File "/usr/lib/python3.9/shelve.py", line 162, in __del__
[2023-07-08 02:57:02,999: WARNING/MainProcess]
[2023-07-08 02:57:02,999: WARNING/MainProcess] self.close()
[2023-07-08 02:57:02,999: WARNING/MainProcess] File "/usr/lib/python3.9/shelve.py", line 144, in close
[2023-07-08 02:57:02,999: WARNING/MainProcess]
[2023-07-08 02:57:03,000: WARNING/MainProcess] self.sync()
[2023-07-08 02:57:03,000: WARNING/MainProcess] File "/usr/lib/python3.9/shelve.py", line 168, in sync
[2023-07-08 02:57:03,000: WARNING/MainProcess]
[2023-07-08 02:57:03,000: WARNING/MainProcess] self[key] = entry
[2023-07-08 02:57:03,000: WARNING/MainProcess] File "/usr/lib/python3.9/shelve.py", line 125, in __setitem__
[2023-07-08 02:57:03,001: WARNING/MainProcess]
[2023-07-08 02:57:03,001: WARNING/MainProcess] self.dict[key.encode(self.keyencoding)] = f.getvalue()
[2023-07-08 02:57:03,001: WARNING/MainProcess] _dbm
[2023-07-08 02:57:03,001: WARNING/MainProcess] .
[2023-07-08 02:57:03,001: WARNING/MainProcess] error
[2023-07-08 02:57:03,001: WARNING/MainProcess] :
[2023-07-08 02:57:03,001: WARNING/MainProcess] cannot add item to database
celery beat v5.2.7 (dawn-chorus) is starting.
__ - ... __ - _
LocalTime -> 2023-07-08 02:57:02
Configuration ->
. broker -> redis://127.0.0.1:6379/0
. loader -> celery.loaders.app.AppLoader
. scheduler -> celery.beat.PersistentScheduler
. db -> celerybeat-schedule
. logfile -> [stderr]@%INFO
. maxinterval -> 5.00 minutes (300s)
```https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2197Developer Documentation2023-07-31T16:24:36ZGeorg KrauseDeveloper DocumentationWe state the following in our docs:
> Add the following variables to load images and enable access to Django admin pages:
>
> ```
> MEDIA_URL=http://localhost:8000/media/
> STATIC_URL=http://localhost:8000/staticfiles/
> ```
However, ...We state the following in our docs:
> Add the following variables to load images and enable access to Django admin pages:
>
> ```
> MEDIA_URL=http://localhost:8000/media/
> STATIC_URL=http://localhost:8000/staticfiles/
> ```
However, this is not in all cases needed. If you spin up traefik (which is also required to test federation-related things anyways), this is actually wrong. So we should either remove it from the docs or make this clear.
I am in favor of running everything through traefik, since its more close to the actual production setup and when using `localhost:8000` we provoke errors, eg when visiting the profile page (simply because Funkwhale will think the own actor is remote and tries to resolve it). Its better to have one working setup we can automate instead of maintaining two different setups.
Ping @devilcius for opinions
Ping @funkwhale/documentation for inputhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2198cache the docker cache directory between pipeline builds to speed them up2023-09-28T08:58:52Zpetitminioncache the docker cache directory between pipeline builds to speed them upfollowup of https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2532followup of https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2532petitminionpetitminionhttps://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2200The concurrency of uploading files cannot be controlled2023-08-14T12:24:50ZChengChungThe concurrency of uploading files cannot be controlled<!--
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.Open the upload page from webui
2.Drag a lot of files to upload
## What happens?
The concurrency of uploading is too big since 1.3.0, all files in queue will be uploaded simultaneously, it is bad if the backend cannot handle workload this much. It will even worse if I have a good connection with the server, that means the workload will be much heavier.
Some error response like Cannot upload this file, ensure it is not too big is likely to be triggered
Such error will not appear if I upload files one by one.
Also with such hints, if I press restart/retry button, the reupload process cannot be completed, it is stuck on Uploading… 0%
Also the numerical precision is far more than enough on percentage of Current usage in My Library Page
for example, it shows 24.288456832617186%
## What is expected?
<!--
Describe the expected behaviour.
-->
The concurrency of uploading music files should be limited or configurable
## Context
<!--
The version of your instance can be found on the footer : Source code (x.y)
-->
**Funkwhale version(s) affected**: 1.3.1+git.cc7fde67
<!--
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/funkwhale/-/issues/2204Tracks loading efficiency on album page2023-08-14T19:28:48ZChengChungTracks loading efficiency on album page<!--
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
For a album with hundreds of tracks, it takes quite a long time to call apis to load all of them, and the page becomes available only after we finished loading the tracks.
<!--
Describe the steps to reproduce the issue, like:
1. Visit the page at /artists/
2. Type that
3. Submit
-->
## What happens?
when we visited `library/albums/{album_id}`
it takes about 1 seconds on my server to load the first page of tracks, then load the second page according to `next` field of the previous response and so on
so if I have a album with 400 tracks, 50 tracks per page, then I have to wait for 8 seconds to see the track list become available
Also there is no significant difference in the time taken between loading 50 items per page and loading 400 items per page, both taking around 1 second
It takes about 900ms per page for a album of 357 tracks, 520ms for 142, 400ms for 99, and 220ms for 27 ones.
BTW, there is typo on `next` field of API `api/v1/tracks/` ,
for example, it will be `api/v1/tracks/?album=430&include_channels=true&ordering=disc_number%2Cposition&page=2&page_size=50` for the second page,
and `api/v1/tracks/?album=430&album=430&include_channels=true&include_channels=true&ordering=disc_number%2Cposition&ordering=disc_number%2Cposition&page=3&page_size=50&page_size=50` for the third page
the larger the page number is, the longer the url is.
<!--
Describe what happens once the previous steps are completed.
-->
## What is expected?
a better page loading efficiency is expected
Paginate can be finished on font-end, not backend
<!--
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.3.1+git.cc7fde67
<!--
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/funkwhale/-/issues/2207--watch flag doesn't work on NFS mountpints2023-08-14T14:49:32ZDistopico--watch flag doesn't work on NFS mountpints<!--
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
- Mount an NFS partition and configure it as `in-place`.
- Import Files using `in-place`
- Run `import_files` again with `--watch` option.
- Change some files
- Notice that changes will not taken
## What happens?
`--watch` options doesn't work with NFS. Keeps "Watching for changes at /music...", had my suspicions that this would happen and is looks like NFS doesn't support by default.
- https://github.com/fsnotify/fsnotify/issues/9
- https://unix.stackexchange.com/questions/81663/why-are-inotify-events-different-on-an-nfs-mount
python watchdog require `PollingObserver` https://github.com/gorakhargosh/watchdog/issues/504 for NFS
## What is expected?
It should take changes using `--watch` in NFS
## Context
Funkwhale 1.3.1 in Debian installation
<!--
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
-->