diff --git a/index.html b/index.html
index cbd187f..3757b4d 100644
--- a/index.html
+++ b/index.html
@@ -2171,6 +2171,18 @@
+
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()}`;