Add a toggle to choose what kind of track date you want

This commit is contained in:
BlackSigkill 2026-02-03 14:47:45 +01:00
parent b1936e19a6
commit 8eaf3b376e
6 changed files with 50 additions and 3 deletions

View file

@ -2171,6 +2171,18 @@
<span class="slider"></span>
</label>
</div>
<div class="setting-item">
<div class="info">
<span class="label">Album release year</span>
<span class="description"
>Show original album year instead of track/remaster date</span
>
</div>
<label class="toggle-switch">
<input type="checkbox" id="use-album-release-year-toggle" checked />
<span class="slider"></span>
</label>
</div>
<div class="setting-item">
<div class="info">
<span class="label">Gapless Playback</span>

View file

@ -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)) {

View file

@ -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 }) => {

View file

@ -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();

View file

@ -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',

View file

@ -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()}`;