32 Commits

Author SHA1 Message Date
Kendall Garner
a50af42872
Use userId in player, other fixes (#3182)
* [bugfix] player: use userId, other fixes

This PR primarily resolves #1928 by switching the foreign key of `player` from `user.user_name` to `user.id`.
There are also a few other fixes/changes:

- For some bizarre reason, `ip_address` is never returned from `read`/`get`. Change the field to `ip`, which works. Somehow
- Update `players_test.go` mock to also check for user agent, replicating the actual code
- Update `player_repository.go` `isPermitted` to check user id. I don't know how this worked before...
- tests!
- a few places referred to `typ`, when it is really `userAgent`. Change the field names

* baseRequest -> selectPlayer

* remove comment

* update migration, make all of persistence foreign key enabled

* maybe don't forget to save the file first
2026-01-02 20:37:43 +00:00
Deluan
89138e75f4
Evict expired items from SimpleCache 2026-01-02 20:37:15 +00:00
Deluan
843d48f448
Upgrade to ttlcache/v3 2026-01-02 20:37:15 +00:00
Deluan
10ab9cfb55
Wrap ttlcache in our own SimpleCache implementation 2026-01-02 20:37:15 +00:00
Deluan
47068d2dea
Optimize SQLite3 access. Mainly separate read access from write access.
Based on tips from https://archive.is/Xfjh6#selection-257.0-278.0
2026-01-02 20:36:58 +00:00
Deluan
d7b7626488
Bump github.com/jellydator/ttlcache/v2 to v2.11.1 2026-01-02 20:33:14 +00:00
Philipp Wolfer
cd62da04f8
Fix listenbrainz submission and clarify MusicBrainz recording ID field (#2279)
* Fix MB recording ID parameter name for ListenBrainz submission

This follows the ListenBrainz API documentation.

Fixes #1657

* Rename MediaFile.MbzTrackID to MbzRecordingID

This better reflects the actual data. That the MusicBrainz
recording ID is stored in file metadata as musicbrainz_trackid
is a historical artifact.

* Rename database column mbz_track_id to mbz_recording_id
2026-01-02 20:27:27 +00:00
Deluan
a22fe875a7
Refactor play tracking 2026-01-02 20:23:39 +00:00
Deluan
30bdd4655d
Fix polling of buffered scrobbles 2026-01-02 20:22:41 +00:00
Deluan
dfe758eefd
Don't wake CacheWarmer every 10 seconds, let it sleep :) 2026-01-02 20:21:57 +00:00
Deluan
e0bfb22007
Rename log.LevelCritical to log.LevelFatal 2026-01-02 20:20:16 +00:00
Deluan
2afc93bb9b
Add missing context to logger calls 2026-01-02 20:16:00 +00:00
Deluan
03128f2b97
Fix error comparisons 2026-01-02 20:15:58 +00:00
Deluan
4bfceb3710
Simplify Singleton usage by leveraging Go 1.18's generics 2026-01-02 20:14:22 +00:00
Deluan
90bc1981d8
Upgrade Ginkgo to V2 2026-01-02 20:14:21 +00:00
Deluan
8fb11946f9
More info in scrobbling logs 2026-01-02 20:09:03 +00:00
Steve Richter
310ce67c2e
Listenbrainz scrobbling (#1424)
* Refactor session_keys to its own package

* Adjust play_tracker

- Don't send external NowPlaying/Scrobble for tracks with unknown artist
- Continue to the next agent on error

* Implement ListenBrainz Agent and Auth Router

* Implement frontend for ListenBrainz linking

* Update listenBrainzRequest

- Don't marshal Player to json
- Rename Track to Title

* Return ErrRetryLater on ListenBrainz server errors

* Add tests for listenBrainzAgent

* Add tests for ListenBrainz Client

* Adjust ListenBrainzTokenDialog to handle errors better

* Refactor listenbrainz.formatListen and listenBrainzRequest structs

* Refactor agent auth_routers

* Refactor session_keys to agents package

* Add test for listenBrainzResponse

* Add tests for ListenBrainz auth_router

* Update ListenBrainzTokenDialog and auth_router

* Adjust player scrobble toggle
2026-01-02 20:09:02 +00:00
Deluan
5142a842f4
Fix small lint errors found by gocritic 2026-01-02 20:06:07 +00:00
Deluan
ff61d5f630
Better scrobble log message when buffer is disabled 2026-01-02 20:05:07 +00:00
Deluan
5f9c7d1507
Add feature flag for buffered scrobbling 2026-01-02 20:05:07 +00:00
Deluan
75cc2580b7
Disable Last.FM features based on LastFM.Enabled config option 2026-01-02 20:05:07 +00:00
Deluan
6d46689622
Implement Scrobble buffering/retrying 2026-01-02 20:05:07 +00:00
Deluan
006b8d0d4a
Add option to disable external scrobbling per player 2026-01-02 20:05:05 +00:00
Deluan
541411322c
Disable completely external scrobblers if feature is disabled (DevEnableScrobble) 2026-01-02 20:05:05 +00:00
Deluan
ffd1aa7e89
Refactor: Consolidate scrobbling logic in play_tracker 2026-01-02 20:05:05 +00:00
Deluan
c0f5b6950f
Don't send scrobbles/nowPlaying updates to Last.fm if user has not authorized 2026-01-02 20:05:04 +00:00
Deluan
5db24ff145
Send NowPlaying and Scrobbles to Last.fm 2026-01-02 20:05:04 +00:00
Deluan
0a9f6cb807
Refactor Agents to be singleton
Initial work for Last.fm scrobbler
2026-01-02 20:05:04 +00:00
Deluan
883d316670
Use singleton in other places as well 2026-01-02 20:05:04 +00:00
Deluan
0057c9f38a
Try to register all playing music in GetNowPlaying 2026-01-02 20:04:23 +00:00
Deluan
1ac077cf22
Fix GetNowPlaying endpoint showing only the last play 2026-01-02 20:04:23 +00:00
Deluan
7b4b6f8130
New implementation of NowPlaying 2026-01-02 20:04:23 +00:00