Commits
feat: Implement transform pipeline providers
So that it can be used for transformer. Component (client/source) inherit from init class
As long as it conforms to user stage type. Preserve backwards compatibility
refactor: Cleanup and consolidate listenbrainz listen parsing
Consolidtes logic for parsing lz listen data structure
feat(rocksky): Implement Rocksky Source/Client
Now playing accuracy improvement
* Aggressively start Now Playing update (based on reported) but aggressibely end, based on stale/orphaned, so updates are early but not often
* Refactor update thresholds to use scrobble client behavior
* LFM and LZ use track duration as "time visible" for Now Playing, don't re-update during that time period
* Add thresholds to logging for easier troubleshooting
#395
feat: Implement teal.fm as source/client
feat(subsonic): Add repeat detection
* Aggressively start Now Playing update (based on reported) but aggressibely end, based on stale/orphaned, so updates are early but not often
* Refactor update thresholds to use scrobble client behavior
* LFM and LZ use track duration as "time visible" for Now Playing, don't re-update during that time period
* Add thresholds to logging for easier troubleshooting
#395