mirror of
https://github.com/markuryy/shark.git
synced 2026-06-18 18:41:03 +00:00
feat: add refresh button to collection views
This commit is contained in:
@@ -13,6 +13,9 @@
|
||||
onTrackClick?: (index: number) => void;
|
||||
onDownloadTrack?: (index: number) => void;
|
||||
onDownloadPlaylist?: () => void;
|
||||
onRefresh?: () => void;
|
||||
refreshing?: boolean;
|
||||
lastCached?: number | null;
|
||||
downloadingTrackIds?: Set<string>;
|
||||
}
|
||||
|
||||
@@ -26,9 +29,18 @@
|
||||
onTrackClick,
|
||||
onDownloadTrack,
|
||||
onDownloadPlaylist,
|
||||
onRefresh,
|
||||
refreshing = false,
|
||||
lastCached = null,
|
||||
downloadingTrackIds = new Set()
|
||||
}: Props = $props();
|
||||
|
||||
function formatTimestamp(timestamp: number | null): string {
|
||||
if (!timestamp) return 'Never';
|
||||
const date = new Date(timestamp * 1000);
|
||||
return date.toLocaleString();
|
||||
}
|
||||
|
||||
type ViewMode = 'tracks' | 'info';
|
||||
let viewMode = $state<ViewMode>('tracks');
|
||||
|
||||
@@ -164,20 +176,40 @@
|
||||
<span class="field-label">Tracks:</span>
|
||||
<span>{tracks.length}</span>
|
||||
</div>
|
||||
{#if lastCached}
|
||||
<div class="field-row">
|
||||
<span class="field-label">Last updated:</span>
|
||||
<span>{formatTimestamp(lastCached)}</span>
|
||||
</div>
|
||||
{/if}
|
||||
</fieldset>
|
||||
|
||||
{#if $deezerAuth.loggedIn}
|
||||
<fieldset style="margin-top: 16px;">
|
||||
<legend>Actions</legend>
|
||||
<button onclick={onDownloadPlaylist}>
|
||||
Download Playlist
|
||||
</button>
|
||||
<p class="help-text">Download all tracks via Deezer and save as m3u8 playlist</p>
|
||||
<div class="actions-row">
|
||||
<div>
|
||||
<button onclick={onDownloadPlaylist}>Download Playlist</button>
|
||||
<p class="help-text">Download all tracks via Deezer and save as m3u8 playlist</p>
|
||||
</div>
|
||||
{#if onRefresh}
|
||||
<button onclick={onRefresh} disabled={refreshing}>
|
||||
{refreshing ? 'Refreshing...' : 'Refresh Tracks'}
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
</fieldset>
|
||||
{:else}
|
||||
<fieldset style="margin-top: 16px;">
|
||||
<legend>Downloads</legend>
|
||||
<p class="warning-text">Deezer login required to download Spotify tracks</p>
|
||||
<div class="actions-row">
|
||||
<p class="warning-text">Deezer login required to download Spotify tracks</p>
|
||||
{#if onRefresh}
|
||||
<button onclick={onRefresh} disabled={refreshing}>
|
||||
{refreshing ? 'Refreshing...' : 'Refresh Tracks'}
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
<p class="help-text">Sign in to Deezer in Services → Deezer to enable downloads</p>
|
||||
</fieldset>
|
||||
{/if}
|
||||
@@ -306,6 +338,13 @@
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
.actions-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.warning-text {
|
||||
margin: 0 0 8px 0;
|
||||
font-size: 12px;
|
||||
|
||||
Reference in New Issue
Block a user