Fixed several pre-existing and introduced linting issues
This commit is contained in:
parent
35080751f9
commit
68d1f726c4
4 changed files with 1897 additions and 2400 deletions
4166
index.html
4166
index.html
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
|||
export class DashDownloader {
|
||||
constructor() {}
|
||||
constructor() { }
|
||||
|
||||
async downloadDashStream(manifestBlobUrl, options = {}) {
|
||||
const { onProgress, signal } = options;
|
||||
|
|
@ -15,8 +15,7 @@ export class DashDownloader {
|
|||
|
||||
// 2. Generate URLs
|
||||
const urls = this.generateSegmentUrls(manifest);
|
||||
|
||||
const mimeType = audioSet.getAttribute('mimeType') || 'audio/mp4';
|
||||
const mimeType = manifest.mimeType || 'audio/mp4';
|
||||
|
||||
// 3. Download Segments
|
||||
const chunks = [];
|
||||
|
|
@ -160,6 +159,7 @@ export class DashDownloader {
|
|||
media,
|
||||
segments,
|
||||
repId,
|
||||
mimeType: audioSet.getAttribute('mimeType'),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
121
js/ui.js
121
js/ui.js
|
|
@ -942,107 +942,7 @@ export class UIRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
async renderTrackPage(trackId) {
|
||||
this.showPage('track');
|
||||
|
||||
const imageEl = document.getElementById('track-detail-image');
|
||||
const titleEl = document.getElementById('track-detail-title');
|
||||
const artistEl = document.getElementById('track-detail-artist');
|
||||
const albumEl = document.getElementById('track-detail-album');
|
||||
const yearEl = document.getElementById('track-detail-year');
|
||||
const albumSection = document.getElementById('track-album-section');
|
||||
const albumTracksContainer = document.getElementById('track-detail-album-tracks');
|
||||
|
||||
const playBtn = document.getElementById('play-track-btn');
|
||||
const lyricsBtn = document.getElementById('track-lyrics-btn');
|
||||
const shareBtn = document.getElementById('share-track-btn');
|
||||
const likeBtn = document.getElementById('like-track-btn');
|
||||
const downloadBtn = document.getElementById('download-track-btn');
|
||||
|
||||
imageEl.src = '';
|
||||
imageEl.style.backgroundColor = 'var(--muted)';
|
||||
titleEl.innerHTML = '<div class="skeleton" style="height: 48px; width: 300px; max-width: 90%;"></div>';
|
||||
artistEl.innerHTML = '<div class="skeleton" style="height: 16px; width: 100px;"></div>';
|
||||
albumEl.innerHTML = '';
|
||||
yearEl.innerHTML = '';
|
||||
albumTracksContainer.innerHTML = this.createSkeletonTracks(5, false);
|
||||
|
||||
try {
|
||||
const trackData = await this.api.getTrack(trackId);
|
||||
const track = trackData.track;
|
||||
|
||||
const coverUrl = this.api.getCoverUrl(track.album?.cover);
|
||||
imageEl.src = coverUrl;
|
||||
imageEl.style.backgroundColor = '';
|
||||
|
||||
this.setPageBackground(coverUrl);
|
||||
if (backgroundSettings.isEnabled() && track.album?.cover) {
|
||||
this.extractAndApplyColor(this.api.getCoverUrl(track.album.cover, '80'));
|
||||
}
|
||||
|
||||
const explicitBadge = hasExplicitContent(track) ? this.createExplicitBadge() : '';
|
||||
const qualityBadge = createQualityBadgeHTML(track);
|
||||
titleEl.innerHTML = `${escapeHtml(track.title)} ${explicitBadge} ${qualityBadge}`;
|
||||
this.adjustTitleFontSize(titleEl, track.title);
|
||||
|
||||
artistEl.innerHTML = `<a href="/artist/${track.artist.id}">${escapeHtml(track.artist.name)}</a>`;
|
||||
albumEl.innerHTML = `<a href="/album/${track.album.id}">${escapeHtml(track.album.title)}</a>`;
|
||||
|
||||
if (track.album.releaseDate) {
|
||||
const date = new Date(track.album.releaseDate);
|
||||
yearEl.textContent = date.getFullYear();
|
||||
}
|
||||
|
||||
playBtn.onclick = () => {
|
||||
this.player.setQueue([track]);
|
||||
this.player.playTrackFromQueue();
|
||||
};
|
||||
|
||||
lyricsBtn.onclick = () => {
|
||||
if (this.player.currentTrack && this.player.currentTrack.id === track.id) {
|
||||
document.getElementById('toggle-lyrics-btn').click();
|
||||
} else {
|
||||
this.player.setQueue([track]);
|
||||
this.player.playTrackFromQueue();
|
||||
setTimeout(() => document.getElementById('toggle-lyrics-btn').click(), 500);
|
||||
}
|
||||
};
|
||||
|
||||
shareBtn.onclick = () => {
|
||||
const url = `${window.location.origin}/track/${track.id}`;
|
||||
navigator.clipboard.writeText(url).then(() => {
|
||||
showNotification('Link copied to clipboard!');
|
||||
});
|
||||
};
|
||||
|
||||
this.updateLikeState(likeBtn, 'track', track.id);
|
||||
trackDataStore.set(likeBtn, track);
|
||||
|
||||
downloadBtn.dataset.action = 'download';
|
||||
downloadBtn.classList.add('track-action-btn');
|
||||
trackDataStore.set(downloadBtn, track);
|
||||
|
||||
if (track.album.id) {
|
||||
const albumData = await this.api.getAlbum(track.album.id);
|
||||
const tracks = albumData.tracks;
|
||||
|
||||
if (tracks.length > 1) {
|
||||
albumSection.style.display = 'block';
|
||||
const otherTracks = tracks.filter((t) => t.id !== track.id);
|
||||
this.renderListWithTracks(albumTracksContainer, otherTracks, false);
|
||||
} else {
|
||||
albumSection.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
albumSection.style.display = 'none';
|
||||
}
|
||||
|
||||
document.title = `${displayTitle} - ${artistName}`;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
titleEl.textContent = 'Error loading track';
|
||||
}
|
||||
}
|
||||
|
||||
async renderLibraryPage() {
|
||||
this.showPage('library');
|
||||
|
|
@ -1634,10 +1534,10 @@ export class UIRenderer {
|
|||
dateDisplay =
|
||||
window.innerWidth > 768
|
||||
? releaseDate.toLocaleDateString('en-US', {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
})
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
})
|
||||
: year;
|
||||
}
|
||||
}
|
||||
|
|
@ -2361,9 +2261,9 @@ export class UIRenderer {
|
|||
<span>${artist.popularity}% popularity</span>
|
||||
<div class="artist-tags">
|
||||
${(artist.artistRoles || [])
|
||||
.filter((role) => role.category)
|
||||
.map((role) => `<span class="artist-tag">${role.category}</span>`)
|
||||
.join('')}
|
||||
.filter((role) => role.category)
|
||||
.map((role) => `<span class="artist-tag">${role.category}</span>`)
|
||||
.join('')}
|
||||
</div>
|
||||
`;
|
||||
|
||||
|
|
@ -2843,6 +2743,8 @@ export class UIRenderer {
|
|||
|
||||
try {
|
||||
const track = await this.api.getTrackMetadata(trackId);
|
||||
const displayTitle = getTrackTitle(track);
|
||||
const artistName = getTrackArtists(track);
|
||||
|
||||
const coverUrl = this.api.getCoverUrl(track.album?.cover);
|
||||
imageEl.src = coverUrl;
|
||||
|
|
@ -2855,18 +2757,13 @@ export class UIRenderer {
|
|||
|
||||
const explicitBadge = hasExplicitContent(track) ? this.createExplicitBadge() : '';
|
||||
const qualityBadge = createQualityBadgeHTML(track);
|
||||
const displayTitle = getTrackTitle(track);
|
||||
titleEl.innerHTML = `${escapeHtml(displayTitle)} ${explicitBadge} ${qualityBadge}`;
|
||||
this.adjustTitleFontSize(titleEl, displayTitle);
|
||||
|
||||
let artistName = 'Unknown Artist';
|
||||
let artistId = null;
|
||||
|
||||
if (track.artist) {
|
||||
artistName = track.artist.name;
|
||||
artistId = track.artist.id;
|
||||
} else if (track.artists && track.artists.length > 0) {
|
||||
artistName = track.artists[0].name;
|
||||
artistId = track.artists[0].id;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2819,10 +2819,6 @@ input:checked + .slider::before {
|
|||
justify-self: flex-end;
|
||||
}
|
||||
|
||||
.is-editable .track-list-header .duration-header {
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
|
||||
@supports (padding-top: env(safe-area-inset-top)) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue