From e987226954a81621207fd9272468df06ffc2a555 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Sat, 8 Nov 2025 09:09:09 -0800 Subject: [PATCH 01/11] feat: makes discovery media item clickable on home page #53 --- .../tempo/ui/adapter/DiscoverSongAdapter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/DiscoverSongAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/DiscoverSongAdapter.java index 6da8554c..c9b21d88 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/DiscoverSongAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/DiscoverSongAdapter.java @@ -73,6 +73,11 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter onClick()); + + itemView.setOnLongClickListener(v -> { + onLongClick(); + return true; + }); } public void onClick() { @@ -82,6 +87,13 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter Date: Sun, 9 Nov 2025 15:02:54 +0000 Subject: [PATCH 02/11] getRandomSongs2(): use new subsonic getRandomSongs param 'genre' instead of getSongsByGenre --- .../subsonic/api/albumsonglist/AlbumSongListClient.java | 6 ++++++ .../subsonic/api/albumsonglist/AlbumSongListService.java | 3 +++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java index d0874a5d..6d512369 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java +++ b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java @@ -34,6 +34,12 @@ public class AlbumSongListClient { return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear); } + // mr subsonic says we're allowed genres now + public Call getRandomSongs2(int size, Integer fromYear, Integer toYear, String genre) { + Log.d(TAG, "getRandomSongs2()"); + return albumSongListService.getRandomSongs2(subsonic.getParams(), size, fromYear, toYear, genre); + } + public Call getSongsByGenre(String genre, int count, int offset) { Log.d(TAG, "getSongsByGenre()"); return albumSongListService.getSongsByGenre(subsonic.getParams(), genre, count, offset); diff --git a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java index 1ca7267a..4c4654e7 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java +++ b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java @@ -19,6 +19,9 @@ public interface AlbumSongListService { @GET("getRandomSongs") Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear); + @GET("getRandomSongs") + Call getRandomSongs2(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear, @Query("genre") String genre); + @GET("getSongsByGenre") Call getSongsByGenre(@QueryMap Map params, @Query("genre") String genre, @Query("count") int count, @Query("offset") int offset); From 35784216bc180ee9271e44634243df6c1fe08aa1 Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 15:05:05 +0000 Subject: [PATCH 03/11] use getRandomSampleWithGenre() rather than getSongsByGenre() --- .../tempo/repository/SongRepository.java | 27 +++++++++++++++++++ .../viewmodel/SongListPageViewModel.java | 4 +-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java index 85ceed53..35f28791 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java @@ -100,6 +100,33 @@ public class SongRepository { return randomSongsSample; } + public MutableLiveData> getRandomSampleWithGenre(int number, Integer fromYear, Integer toYear, String genre) { + MutableLiveData> randomSongsSample = new MutableLiveData<>(); + + App.getSubsonicClientInstance(false) + .getAlbumSongListClient() + .getRandomSongs2(number, fromYear, toYear, genre) + .enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + List songs = new ArrayList<>(); + + if (response.isSuccessful() && response.body() != null && response.body().getSubsonicResponse().getRandomSongs() != null && response.body().getSubsonicResponse().getRandomSongs().getSongs() != null) { + songs.addAll(response.body().getSubsonicResponse().getRandomSongs().getSongs()); + } + + randomSongsSample.setValue(songs); + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + } + }); + + return randomSongsSample; + } + public void scrobble(String id, boolean submission) { App.getSubsonicClientInstance(false) .getMediaAnnotationClient() diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java index d2396f61..acd95b1c 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java @@ -37,7 +37,7 @@ public class SongListPageViewModel extends AndroidViewModel { public int year = 0; public int maxNumberByYear = 500; - public int maxNumberByGenre = 100; + public int maxNumberByGenre = 500; public SongListPageViewModel(@NonNull Application application) { super(application); @@ -51,7 +51,7 @@ public class SongListPageViewModel extends AndroidViewModel { switch (title) { case Constants.MEDIA_BY_GENRE: - songList = songRepository.getSongsByGenre(genre.getGenre(), 0); + songList = songRepository.getRandomSampleWithGenre(maxNumberByGenre, 0, 3000, genre.getGenre()); break; case Constants.MEDIA_BY_ARTIST: songList = artistRepository.getTopSongs(artist.getName(), 50); From efaae35976881170b3f324c9c477fa866f9fa057 Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 15:05:49 +0000 Subject: [PATCH 04/11] uncap mediamanager queue previously at 25 at 500 --- .../tempo/ui/fragment/SongListPageFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java index fe46edae..e0cad181 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java @@ -189,7 +189,7 @@ public class SongListPageFragment extends Fragment implements ClickCallback { bind.songListShuffleImageView.setOnClickListener(v -> { Collections.shuffle(songs); - MediaManager.startQueue(mediaBrowserListenableFuture, songs.subList(0, Math.min(25, songs.size())), 0); + MediaManager.startQueue(mediaBrowserListenableFuture, songs.subList(0, Math.min(500, songs.size())), 0); activity.setBottomSheetInPeek(true); }); } From 4d1d953a3aaf9d01e3bbfe5d8040c2ac9fd2dcff Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 16:03:02 +0000 Subject: [PATCH 05/11] implement scroll to currently playing feature --- .../tempo/ui/fragment/PlayerQueueFragment.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java index 06536cd6..3a917f6b 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java @@ -72,6 +72,14 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { super.onResume(); setMediaBrowserListenableFuture(); updateNowPlayingItem(); + try { + long position = mediaBrowserListenableFuture.get().getCurrentMediaItemIndex(); + // hopefully this cast dont bite us in the arse hehe + bind.playerQueueRecyclerView.scrollToPosition((int) position); + } catch (Exception e) { + //dont worry about it + e.printStackTrace(); + } } @Override From fd075a02c5efc259f06455fa6973e12a8b05795d Mon Sep 17 00:00:00 2001 From: eddyizm Date: Sun, 9 Nov 2025 09:33:11 -0800 Subject: [PATCH 06/11] chore: updating change log and pending changes --- CHANGELOG.md | 11 +++++++++-- fastlane/metadata/android/en-US/changelogs/5.txt | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/5.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 68d0478c..0820ab3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,17 @@ # Changelog ## Pending release.. -* fix: reverts change causing album disc/track list to get out of order by @eddyizm in https://github.com/eddyizm/tempus/pull/237 +* fix: Equalizer fix in main build variant by @jaime-grj in https://github.com/eddyizm/tempus/pull/239 +* fix: Images not filling holder by @eddyizm in https://github.com/eddyizm/tempus/pull/244 +* feat: Make artist and album clickable by @eddyizm in https://github.com/eddyizm/tempus/pull/243 + +## [4.1.3](https://github.com/eddyizm/tempo/releases/tag/v4.1.3) (2025-11-06) +## What's Changed +* [fix: equalizer missing referenced value](https://github.com/eddyizm/tempus/commit/923cfd5bc97ed7db28c90348e3619d0a784fc434) +* Fix: Album track list bug by @eddyizm in https://github.com/eddyizm/tempus/pull/237 * fix: Add listener to enable equalizer when audioSessionId changes by @jaime-grj in https://github.com/eddyizm/tempus/pull/235 -**Full Changelog**: https://github.com/eddyizm/tempus/compare/v4.1.0...v4.1.2 +**Full Changelog**: https://github.com/eddyizm/tempus/compare/v4.1.0...v4.1.3 ## [4.1.0](https://github.com/eddyizm/tempo/releases/tag/v4.1.0) (2025-11-05) ## What's Changed diff --git a/fastlane/metadata/android/en-US/changelogs/5.txt b/fastlane/metadata/android/en-US/changelogs/5.txt new file mode 100644 index 00000000..7d7a8024 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/5.txt @@ -0,0 +1,3 @@ +Equalizer fix in main build variant +fix Images not filling holder in discovery +Make artist and album clickable on home discovery \ No newline at end of file From 140546ca4df9c0335b1a2037bd77c764f65a17ca Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 21:27:17 +0000 Subject: [PATCH 07/11] log in catch statement in PlayerQueueFragment:onResume --- .../tempo/ui/fragment/PlayerQueueFragment.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java index 3a917f6b..8c6e052f 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java @@ -2,6 +2,7 @@ package com.cappielloantonio.tempo.ui.fragment; import android.content.ComponentName; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -74,11 +75,9 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { updateNowPlayingItem(); try { long position = mediaBrowserListenableFuture.get().getCurrentMediaItemIndex(); - // hopefully this cast dont bite us in the arse hehe bind.playerQueueRecyclerView.scrollToPosition((int) position); } catch (Exception e) { - //dont worry about it - e.printStackTrace(); + Log.e("PlayerQueueFragment", "Failed to get mediaBrowserListenableFuture in onResume", e); } } From 1bc93cce0e43ca3c8883e192bfdb77dbe7c0678f Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 22:01:33 +0000 Subject: [PATCH 08/11] use overloads instead of new methods --- .../cappielloantonio/tempo/repository/SongRepository.java | 2 +- .../subsonic/api/albumsonglist/AlbumSongListClient.java | 7 +++---- .../subsonic/api/albumsonglist/AlbumSongListService.java | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java index 35f28791..a40b3c97 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java @@ -105,7 +105,7 @@ public class SongRepository { App.getSubsonicClientInstance(false) .getAlbumSongListClient() - .getRandomSongs2(number, fromYear, toYear, genre) + .getRandomSongs(number, fromYear, toYear, genre) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java index 6d512369..0a799d4e 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java +++ b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java @@ -34,10 +34,9 @@ public class AlbumSongListClient { return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear); } - // mr subsonic says we're allowed genres now - public Call getRandomSongs2(int size, Integer fromYear, Integer toYear, String genre) { - Log.d(TAG, "getRandomSongs2()"); - return albumSongListService.getRandomSongs2(subsonic.getParams(), size, fromYear, toYear, genre); + public Call getRandomSongs(int size, Integer fromYear, Integer toYear, String genre) { + Log.d(TAG, "getRandomSongs()"); + return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear, genre); } public Call getSongsByGenre(String genre, int count, int offset) { diff --git a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java index 4c4654e7..e0d8995a 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java +++ b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java @@ -20,7 +20,7 @@ public interface AlbumSongListService { Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear); @GET("getRandomSongs") - Call getRandomSongs2(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear, @Query("genre") String genre); + Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear, @Query("genre") String genre); @GET("getSongsByGenre") Call getSongsByGenre(@QueryMap Map params, @Query("genre") String genre, @Query("count") int count, @Query("offset") int offset); From f4ffdc985ed781cd5a87a583674ccd2793ff46e8 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Sun, 9 Nov 2025 16:48:16 -0800 Subject: [PATCH 09/11] chore: updating pending release and typo in settings --- CHANGELOG.md | 2 ++ app/src/main/res/values/strings.xml | 2 +- fastlane/metadata/android/en-US/changelogs/5.txt | 4 +++- fastlane/metadata/android/en-US/full_description.txt | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0820ab3f..d4af0ee2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * fix: Equalizer fix in main build variant by @jaime-grj in https://github.com/eddyizm/tempus/pull/239 * fix: Images not filling holder by @eddyizm in https://github.com/eddyizm/tempus/pull/244 * feat: Make artist and album clickable by @eddyizm in https://github.com/eddyizm/tempus/pull/243 +* feat: implement scroll to currently playing feature by @shrapnelnet in https://github.com/eddyizm/tempus/pull/247 +* fix: shuffling genres only queuing 25 songs by @shrapnelnet in https://github.com/eddyizm/tempus/pull/246 ## [4.1.3](https://github.com/eddyizm/tempo/releases/tag/v4.1.3) (2025-11-06) ## What's Changed diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2dafec49..80af298c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -379,7 +379,7 @@ Returns the state of the play queue for this user. This includes the tracks in the play queue, the currently playing track, and the position within this track. The server must support this feature.\n*This setting is not 100% working on all servers/devices. %1$s \nCurrently in use: %2$s MiB Priority given to the transcoding mode. If set to \"Direct play\" the bitrate of the file will not be changed. - Download transcoded media. If enabled, the download endpoint will not be used, but the following settings. \n\n If \"Transcode format for donwloads\" is set to \"Direct download\" the bitrate of the file will not be changed. + Download transcoded media. If enabled, the download endpoint will not be used, but the following settings. \n\n If \"Transcode format for downloads\" is set to \"Direct download\" the bitrate of the file will not be changed. When the file is transcoded on the fly, the client usually does not show the track length. It is possible to request the servers that support the functionality to estimate the duration of the track being played, but the response times may take longer. If enabled, starred artists will be downloaded for offline use. Sync starred artists for offline use diff --git a/fastlane/metadata/android/en-US/changelogs/5.txt b/fastlane/metadata/android/en-US/changelogs/5.txt index 7d7a8024..a325892f 100644 --- a/fastlane/metadata/android/en-US/changelogs/5.txt +++ b/fastlane/metadata/android/en-US/changelogs/5.txt @@ -1,3 +1,5 @@ Equalizer fix in main build variant fix Images not filling holder in discovery -Make artist and album clickable on home discovery \ No newline at end of file +Make artist and album clickable on home discovery +Implement scroll to currently playing feature +Shuffling genres now queuing 500 tracks vs 25 diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 1bd732ce..957b128f 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -8,7 +8,6 @@ Features - Streaming and Offline Mode: Stream music directly from your Subsonic server. Offline mode is currently under active development and may have limitations when using multiple servers. - Playlist Management: Create, edit, and manage playlists to curate your perfect music collection. - Gapless Playback: Experience uninterrupted playback with gapless listening mode. -- Chromecast Support: Stream your music to Chromecast devices. The support is currently in a rudimentary state. - Scrobbling Integration: Optionally integrate Tempus with Last.fm or Listenbrainz.org to scrobble your played tracks, gather music insights, and further personalize your music recommendations, if supported by your Subsonic server. - Podcasts and Radio: If your Subsonic server supports it, listen to podcasts and radio shows directly within Tempus, expanding your audio entertainment options. - Transcoding Support: Activate transcoding of tracks on your Subsonic server, allowing you to set a transcoding profile for optimized streaming directly from the app. This feature requires support from your Subsonic server. @@ -16,3 +15,5 @@ Features - Equalizer: Option to use in app equalizer. - Widget: New widget to keeping the basic controls on your screen at all times. - Available in 11 languages: Currently in Chinese, French, German, Italian, Korean, Polish, Portuguese, Russion, Spanish and Turkish + +*Chromecast/Android Auto Not Supported: These features require google libraries and are only available in the github apk.* \ No newline at end of file From ccfe74a6ea853bae85fc437894178e0fa211b430 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Sun, 9 Nov 2025 16:49:17 -0800 Subject: [PATCH 10/11] chore: bump version for release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8d6363d7..d883de1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { minSdkVersion 24 targetSdk 35 - versionCode 4 - versionName '4.1.3' + versionCode 5 + versionName '4.2.0' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' javaCompileOptions { From b2e3596d87c8fcda4b0d33367a7224c69cc578f0 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Sun, 9 Nov 2025 17:07:07 -0800 Subject: [PATCH 11/11] chore: updated change log --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4af0ee2..76ba8bb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,20 @@ # Changelog ## Pending release.. + +## [4.2.0](https://github.com/eddyizm/tempo/releases/tag/v4.2.0) (2025-11-09) +## What's Changed * fix: Equalizer fix in main build variant by @jaime-grj in https://github.com/eddyizm/tempus/pull/239 * fix: Images not filling holder by @eddyizm in https://github.com/eddyizm/tempus/pull/244 * feat: Make artist and album clickable by @eddyizm in https://github.com/eddyizm/tempus/pull/243 * feat: implement scroll to currently playing feature by @shrapnelnet in https://github.com/eddyizm/tempus/pull/247 * fix: shuffling genres only queuing 25 songs by @shrapnelnet in https://github.com/eddyizm/tempus/pull/246 +## New Contributors +* @shrapnelnet made their first contribution in https://github.com/eddyizm/tempus/pull/247 + +**Full Changelog**: https://github.com/eddyizm/tempus/compare/v4.1.3...v4.2.0 + ## [4.1.3](https://github.com/eddyizm/tempo/releases/tag/v4.1.3) (2025-11-06) ## What's Changed * [fix: equalizer missing referenced value](https://github.com/eddyizm/tempus/commit/923cfd5bc97ed7db28c90348e3619d0a784fc434)