All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Nothing yet.
0.14.4 - 2024-02-29
- Don't log transfers if no tracks were actually transferred
0.14.3 - 2023-12-29
- Use
show_dialog
param when authenticating to show verification screen on Spotify
0.14.2 - 2023-12-17
- Check that user owns playlist before creating watcher
- Improve error handling ergonomics
- Handle empty responses
- Tidy error strings
0.14.1 - 2023-12-16
- Return user fields when upserting token
- Improved client API
0.14.0 - 2023-12-15
- Store transfer results in
transfers
table
- Add config option for check interval, and changed default to 5 minutes
- Handle Spotify errors more gracefully
- Handle
429 Too Many Requests
response that doesn't return JSON
- Playlist track remove endpoint passing incorrect body
0.13.0 - 2023-12-10
User
model to improve readability of user repo resultslast_sync_at
date toWatcher
model- (Optional) logging to
Sentry
- Refactored transfer logic to make it more modular
- Callback URL/CORS origin are now unified into one
WEB_PUBLIC_URL
env variable - Web error responses are handled a bit more nicely
- Input font size is now
1rem
(16px) on mobile to prevent auto-zooming on focus
dashboard.html
template formatting (accidentally mutilated by prettier)
0.12.0 - 2023-12-09
- Removed
lazy_static
in favor of keeping config in the context (like it was before) - Switched configuration parsing crate from
config
tofigment
- Moved from .toml configuration files to
.env
- Don't duplicate query params when making paginated requests
- Access tokens not refreshing on sync thread
0.11.0 - 2023-12-08
- Removed
rspotify
in favor of using the standardoauth2
crate directly- i.e. now we're making request to Spotify manually with
reqwest
, for more control
- i.e. now we're making request to Spotify manually with
- Organized modules a bit better and split error enums
- Spotify errors are now handled a bit better
playlist_from
is verified to exist when creating watcher- Renamed internal
user_id
touser_uri
to be more accurate
0.10.1 - 2023-12-04
- Input colors on dark mode
- First input/select autofocuses
- Input now re-focuses on mode change
0.10.0 - 2023-12-03
- Watchers can now be created for any playlist (by manually entering URI/URL)
- If tracks cannot be removed, a custom error is thrown
0.9.0 - 2023-11-30
- Intervals are now attached to each watcher
- Supports running watcher every hour, day, or week
- Auth middleware will now redirect unset invalid JWTs and redirect to connect page
0.8.0 - 2023-11-29
- Updated to axum
v0.7
(as well astower-http
,tower-cookies
, andaskama-axum
) - Reverse items when inserting to retain original sort order
0.7.2 - 2023-11-27
- Minor style tweaks
- Show logo and intro on connect page
0.7.1 - 2023-11-27
- Dark mode support
- Make watcher validation response text more human-friendly
0.7.0 - 2023-11-26
- Playlist images will now display the only option regardless of width
- Endpoints are now called via
fetch
using JSON, to make displaying errors easier - Errors are now displayed after API calls
0.6.0 - 2023-11-26
- Ability to disable syncing with
sync.enabled
(set totrue
by default, butfalse
will disable)
- Env prefix
SPOTIFY
has been changed toMODULATE
- Repo methods will now return
Option
instead of erroring if a record could not be found (not including ones that return arrays) - Can no longer create a watcher if either:
- A watcher with
should_remove
enabled already exists for that playlist - They are trying to create a watcher with
should_remove
enabled and any other watcher already exists for that playlist
- A watcher with
- Env arg parsing, e.g.
MODULATE_SYNC_ENABLED=false
will disable syncing
0.5.5 - 2023-11-22
- Minor copy tweaks
- Created
Session
struct to storeuser_id
,token
, andclient
- Pass entire
Watcher
toPlaylistTransfer::transfer
instead of individual fields - Don't include
user_token
inWatcher
0.5.4 - 2023-11-21
- Empty playlists were showing with the Liked Tracks heart icon, but will now show with generic music icon
- Update font to Inter
- Use
1rem
padding for smaller screens (instead of2rem
) - Display logo and version number
0.5.3 - 2023-11-21
- Display playlist images
- Link to playlists
- Some more style tweaks
- Add Spotify attribution
0.5.2 - 2023-11-21
- Updated logo
- Some style tweaks
0.5.1 - 2023-11-20
- Ability for a user to delete their account
- Text to denote which watchers will remove tracks from original playlist
0.5.0 - 2023-11-20
- Added checkbox to enable/disable removing items from original playlist
- CSS file is now stored separately and included in the base template
0.4.0 - 2023-11-20
- Multiple watchers can now be created (and synced or removed)
- Playlist-playlist watchers can now be created
- Added better abstraction for transferring tracks between playlists
- Renamed project from
spotify-sync
tomodulate
(a cooler name, but also required by Spotify developer terms)
0.3.0 - 2023-11-19
- Added button to instantly sync tracks
0.2.0 - 2023-11-19
- Make config a static global with
lazy_static
- Make interval configurable
- Any tracks that already exist in the playlist will not be added (fixes #2)
0.1.3 - 2023-11-19
- Minor style improvements
0.1.2 - 2023-11-19
- Validate form data sent to
POST /watcher
- Disable create button until playlist is selected
0.1.1 - 2023-11-19
- Don't fetch playlists if user already has a watcher configured
- Fix font sizes on buttons/inputs
0.1.0 - 2023-11-19
- Initial release
- Basic functionality implemented:
- Sign in with Spotify
- Create a "watcher" for a single playlist
- Background task runs on an interval, transferring tracks for each user that has configured a "watcher"