import React from 'react'; import { Play, HardDriveDownload, Trash2 } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { useOfflineStore } from '../store/offlineStore'; import { useAuthStore } from '../store/authStore'; import { usePlayerStore } from '../store/playerStore'; import { buildCoverArtUrl, coverArtCacheKey } from '../api/subsonic'; import CachedImage from '../components/CachedImage'; export default function OfflineLibrary() { const { t } = useTranslation(); const serverId = useAuthStore(s => s.activeServerId ?? ''); const offlineAlbums = useOfflineStore(s => s.albums); const offlineTracks = useOfflineStore(s => s.tracks); const deleteAlbum = useOfflineStore(s => s.deleteAlbum); const playTrack = usePlayerStore(s => s.playTrack); const enqueue = usePlayerStore(s => s.enqueue); const albums = Object.values(offlineAlbums).filter(a => a.serverId === serverId); const buildTracks = (albumId: string) => { const meta = offlineAlbums[`${serverId}:${albumId}`]; if (!meta) return []; return meta.trackIds.flatMap(tid => { const t = offlineTracks[`${serverId}:${tid}`]; if (!t) return []; return [{ id: t.id, title: t.title, artist: t.artist, album: t.album, albumId: t.albumId, artistId: t.artistId, duration: t.duration, coverArt: t.coverArt, track: undefined, year: t.year, bitRate: t.bitRate, suffix: t.suffix, genre: t.genre, replayGainTrackDb: t.replayGainTrackDb, replayGainAlbumDb: t.replayGainAlbumDb, replayGainPeak: t.replayGainPeak, }]; }); }; const handlePlay = (albumId: string) => { const tracks = buildTracks(albumId); if (tracks[0]) playTrack(tracks[0], tracks); }; const handleEnqueue = (albumId: string) => { enqueue(buildTracks(albumId)); }; return (
{t('connection.offlineAlbumCount', { n: albums.length, count: albums.length })}
{album.name}
{album.artist}
{album.year &&{album.year}
}