From 8eaf3b376e3b513822f9313c6bb63b31aa638b2f Mon Sep 17 00:00:00 2001 From: BlackSigkill Date: Tue, 3 Feb 2026 14:47:45 +0100 Subject: [PATCH] Add a toggle to choose what kind of track date you want --- index.html | 12 ++++++++++++ js/api.js | 3 +++ js/player.js | 4 +++- js/settings.js | 10 ++++++++++ js/storage.js | 17 +++++++++++++++++ js/utils.js | 7 +++++-- 6 files changed, 50 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index cbd187f..3757b4d 100644 --- a/index.html +++ b/index.html @@ -2171,6 +2171,18 @@ +
+
+ Album release year + Show original album year instead of track/remaster date +
+ +
Gapless Playback diff --git a/js/api.js b/js/api.js index a828165..23cca36 100644 --- a/js/api.js +++ b/js/api.js @@ -6,6 +6,7 @@ import { isTrackUnavailable, getExtensionFromBlob, } from './utils.js'; +import { trackDateSettings } from './storage.js'; import { APICache } from './cache.js'; import { addMetadataToAudio } from './metadata.js'; import { DashDownloader } from './dash-downloader.js'; @@ -174,6 +175,8 @@ export class LosslessAPI { } async enrichTracksWithAlbumDates(tracks) { + if (!trackDateSettings.useAlbumYear()) return tracks; + const albumIdsToFetch = []; for (const track of tracks) { if (!track.album?.releaseDate && track.album?.id && !albumIdsToFetch.includes(track.album.id)) { diff --git a/js/player.js b/js/player.js index 5828e54..87ca7d2 100644 --- a/js/player.js +++ b/js/player.js @@ -9,7 +9,7 @@ import { getTrackYearDisplay, createQualityBadgeHTML, } from './utils.js'; -import { queueManager, replayGainSettings } from './storage.js'; +import { queueManager, replayGainSettings, trackDateSettings } from './storage.js'; export class Player { constructor(audioElement, api, quality = 'HI_RES_LOSSLESS') { @@ -717,6 +717,8 @@ export class Player { } loadAlbumYear(track, trackArtistsHTML, artistEl) { + if (!trackDateSettings.useAlbumYear()) return; + this.api .getAlbum(track.album.id) .then(({ album }) => { diff --git a/js/settings.js b/js/settings.js index 8adc276..4c6cc25 100644 --- a/js/settings.js +++ b/js/settings.js @@ -12,6 +12,7 @@ import { downloadQualitySettings, coverArtSizeSettings, qualityBadgeSettings, + trackDateSettings, visualizerSettings, bulkDownloadSettings, playlistSettings, @@ -351,6 +352,15 @@ export function initializeSettings(scrobbler, player, api, ui) { }); } + // Track Date Settings + const useAlbumReleaseYearToggle = document.getElementById('use-album-release-year-toggle'); + if (useAlbumReleaseYearToggle) { + useAlbumReleaseYearToggle.checked = trackDateSettings.useAlbumYear(); + useAlbumReleaseYearToggle.addEventListener('change', (e) => { + trackDateSettings.setUseAlbumYear(e.target.checked); + }); + } + const zippedBulkDownloadsToggle = document.getElementById('zipped-bulk-downloads-toggle'); if (zippedBulkDownloadsToggle) { zippedBulkDownloadsToggle.checked = !bulkDownloadSettings.shouldForceIndividual(); diff --git a/js/storage.js b/js/storage.js index 5990ff8..8fc9fae 100644 --- a/js/storage.js +++ b/js/storage.js @@ -586,6 +586,23 @@ export const qualityBadgeSettings = { }, }; +export const trackDateSettings = { + STORAGE_KEY: 'use-album-release-year', + + useAlbumYear() { + try { + const val = localStorage.getItem(this.STORAGE_KEY); + return val === null ? true : val === 'true'; + } catch { + return true; + } + }, + + setUseAlbumYear(enabled) { + localStorage.setItem(this.STORAGE_KEY, enabled ? 'true' : 'false'); + }, +}; + export const bulkDownloadSettings = { STORAGE_KEY: 'force-individual-downloads', diff --git a/js/utils.js b/js/utils.js index 2ed4b4d..6094a0c 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,5 +1,5 @@ //js/utils.js -import { qualityBadgeSettings, coverArtSizeSettings } from './storage.js'; +import { qualityBadgeSettings, coverArtSizeSettings, trackDateSettings } from './storage.js'; export const QUALITY = 'HI_RES_LOSSLESS'; @@ -67,7 +67,10 @@ export const formatTime = (seconds) => { }; export const getTrackYearDisplay = (track) => { - const releaseDate = track?.album?.releaseDate || track?.streamStartDate; + const useAlbumYear = trackDateSettings.useAlbumYear(); + const releaseDate = useAlbumYear + ? track?.album?.releaseDate || track?.streamStartDate + : track?.streamStartDate || track?.album?.releaseDate; if (!releaseDate) return ''; const date = new Date(releaseDate); return isNaN(date.getTime()) ? '' : ` • ${date.getFullYear()}`;