listenings and favorites sync with listenbrainz spec

This commit is contained in:
petitminion 2024-08-06 08:48:46 +00:00
parent fb5c863dda
commit 965fad5bba
3 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1 @@
add listenings-favorites-sync-with-lb spec

View File

@ -110,6 +110,7 @@ specs/user-follow/index
specs/user-deletion/index
specs/upload-process/index
specs/genre-tags/index
specs/listenings-favorites-sync-with-lb/index
```

View File

@ -0,0 +1,46 @@
# Favorite and listenings sync with listenbrainz
## The issue
Currently, Funkwhale listens and favorites are useful only within the Funkwhale ecosystem. There is no way to import historical listens/favorites from other services, nor to communicate listens and favorites with external services to keep listening aligned across platforms.
## Proposed solution
This is a new feature that allows users to sync listening and favorites with ListenBrainz. It can be used to import liked and listened content from other services (YouTube, Deezer, etc) into Funkwhale. Additionally, it enables Troi to utilize local data instead of making queries to ListenBrainz servers, reducing the load on their side and improving performance in recommendation generation.
## Feature behavior
The synchronization of content will behave as follows:
- Funkwhale pulls new litenings from ListenBrainz on a daily basis for active users
- The ListenBrainz plugin sends new listens and favorites to ListenBrainz when the user performs the corresponding action in Funkwhale
### Backend
To facilitate syncing of data between Funkwhale and MusicBrainz, we need to update the ListenBrainz plugin to send favorites. We also need to create tasks to retrieve listenings and favorites from ListenBrainz.
To keep track of where a favorite or listen occurred, we need to extend our data models to account for external sources. To do this, the following actions are needed:
1. The `TrackFavorite` and `Listening` models need a new string attribute: `source`
2. The ListenBrainz plugin must set the `source` attribute to `listenbrainz` when it creates new favorites and listens
On the server side, we require a new daily task to pull listenings and favorites directly from ListenBrainz. To avoid duplicated data, we should discount any ListenBrainz results that have
- the same timestamp as a matching Funkwhale action
- the following attribute: `submission_client: "Funkwhale ListenBrainz plugin"`
### Frontend
Add the following options to the ListenBrainz plugin :
- User setting to set the listenbrainz User token
- Push listens
- Pull listens
- Push favorites
- Pull favorites
## Availability
- [ ] Admin panel
- [x] App frontend
- [ ] CLI