{#if activeView === 'home'} {#if offlineStatus.isOffline} navigateTo('library')} /> {:else} openAddToPlaylist([trackId])} onAddAlbumToPlaylist={addAlbumToPlaylistById} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackReDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} checkTrackDownloaded={checkTrackDownloaded} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} onPlaylistClick={selectPlaylist} onPlaylistPlay={playPlaylistById} onPlaylistPlayNext={queuePlaylistNextById} onPlaylistPlayLater={queuePlaylistLaterById} onPlaylistCopyToLibrary={copyPlaylistToLibraryById} onPlaylistShareQobuz={sharePlaylistQobuzLinkById} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} onNavigateNewReleases={() => navigateTo('discover-new-releases')} onNavigateIdealDiscography={() => navigateTo('discover-ideal-discography')} onNavigateTopAlbums={() => navigateTo('discover-top-albums')} onNavigateQobuzissimes={() => navigateTo('discover-qobuzissimes')} onNavigateAlbumsOfTheWeek={() => navigateTo('discover-albums-of-the-week')} onNavigatePressAccolades={() => navigateTo('discover-press-accolades')} onNavigateReleaseWatch={() => navigateTo('discover-release-watch')} onNavigateQobuzPlaylists={() => navigateTo('discover-playlists')} onNavigateDailyQ={() => navigateTo('dailyq')} onNavigateWeeklyQ={() => navigateTo('weeklyq')} onNavigateFavQ={() => navigateTo('favq')} onNavigateTopQ={() => navigateTo('topq')} {homeTab} onTabChange={(tab) => { homeTab = tab; navigateTo('home', tab); }} /> {/if} {:else if activeView === 'search'} {#if offlineStatus.isOffline} navigateTo('library')} /> {:else} openAddToPlaylist([trackId])} onAddAlbumToPlaylist={addAlbumToPlaylistById} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleSearchTrackDownload} onTrackReDownload={handleSearchTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} checkTrackDownloaded={checkTrackDownloaded} onArtistClick={handleArtistClick} onPlaylistClick={selectPlaylist} onPlaylistPlay={playPlaylistById} onPlaylistPlayNext={queuePlaylistNextById} onPlaylistPlayLater={queuePlaylistLaterById} onPlaylistCopyToLibrary={copyPlaylistToLibraryById} onPlaylistShareQobuz={sharePlaylistQobuzLinkById} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} searchInTitlebar={isSearchInTitlebar()} /> {/if} {:else if activeView === 'settings'} navigateTo('blacklist-manager')} onPurchasesToggle={(v) => { showPurchases = v; }} userName={userInfo?.userName} subscription={userInfo?.subscription} subscriptionValidUntil={userInfo?.subscriptionValidUntil} showTitleBar={showTitleBar} onQconnectDevButtonChange={(v) => { showQconnectDevButton = v; }} onAudioBackendChange={(backendType, alsaPlugin) => { const alsaHw = backendType === 'Alsa' && alsaPlugin === 'Hw'; isAlsaDirectHw = alsaHw; if (alsaHw && volume !== 100) { playerSetVolume(100); volume = 100; } }} /> {:else if activeView === 'album' && !selectedAlbum}

{$t('toast.failedLoadAlbum')}

{:else if activeView === 'album' && selectedAlbum} selectedAlbum?.artistId && handleArtistClick(selectedAlbum.artistId)} onFeaturedArtistClick={(artistId) => handleArtistClick(artistId)} onLabelClick={handleLabelClick} onAwardClick={handleAwardClick} onTrackPlay={handleAlbumTrackPlay} onTrackPlayNext={handleAlbumTrackPlayNext} onTrackPlayLater={handleAlbumTrackPlayLater} onTrackAddFavorite={handleAddToFavorites} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onPlayAll={handlePlayAllAlbum} onShuffleAll={handleShuffleAlbum} onPlayAllNext={handleAddAlbumToQueueNext} onPlayAllLater={handleAddAlbumToQueueLater} onAddTrackToPlaylist={(trackId) => openAddToPlaylist([trackId])} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds)} onAddAlbumToPlaylist={() => addAlbumToPlaylist(selectedAlbum)} onTrackDownload={handleTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleTrackReDownload} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} onDownloadAlbum={handleDownloadAlbum} onShareAlbumQobuz={shareAlbumQobuzLink} onShareAlbumSonglink={shareAlbumSonglink} onOpenAlbumFolder={handleOpenAlbumFolder} onReDownloadAlbum={handleReDownloadAlbum} {downloadStateVersion} artistAlbums={albumArtistAlbums} onRelatedAlbumClick={handleAlbumClick} onRelatedAlbumPlay={playAlbumById} onRelatedAlbumPlayNext={queueAlbumNextById} onRelatedAlbumPlayLater={queueAlbumLaterById} onRelatedAlbumDownload={downloadAlbumById} onRelatedAlbumShareQobuz={shareAlbumQobuzLinkById} onRelatedAlbumShareSonglink={shareAlbumSonglinkById} onViewArtistDiscography={handleViewArtistDiscography} checkRelatedAlbumDownloaded={checkAlbumFullyDownloaded} onShowAlbumCredits={() => selectedAlbum && showAlbumCredits(selectedAlbum.id)} onCreateAlbumRadio={handleCreateAlbumRadio} {radioLoading} /> {:else if activeView === 'artist' && !selectedArtist}

{$t('toast.failedLoadArtist')}

{:else if activeView === 'artist' && selectedArtist} openAddToPlaylist([trackId])} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds)} onAddAlbumToPlaylist={addAlbumToPlaylistById} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onPlaylistClick={selectPlaylist} onLabelClick={handleLabelClick} onMusicianClick={handleMusicianClick} onLocationClick={handleLocationClick} onBuildArtistCollection={(artistId) => { discographyArtistId = artistId; navTo('discography-builder', artistId); }} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'musician' && selectedMusician} {:else if activeView === 'label' && selectedLabel} openAddToPlaylist([trackId])} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds)} onTrackAddFavorite={handleAddToFavorites} onTrackGoToAlbum={handleAlbumClick} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'label-releases' && selectedLabel} {:else if activeView === 'award' && selectedAward} {:else if activeView === 'award-albums' && selectedAward} {:else if activeView === 'library' || activeView === 'library-album'} openAddToPlaylist([trackId], true)} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds, true)} onTrackAddPlexToPlaylist={(ratingKey) => openAddPlexToPlaylist([ratingKey])} onBulkAddPlexToPlaylist={(ratingKeys) => openAddPlexToPlaylist(ratingKeys)} onSetLocalQueue={handleSetLocalQueue} onQobuzArtistClick={handleArtistClick} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'playlist' && !selectedPlaylistId}

{$t('toast.failedLoadPlaylist')}

{:else if activeView === 'playlist' && selectedPlaylistId} openAddToPlaylist([trackId])} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds)} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleDisplayTrackDownload} onTrackCreateQbzRadio={handleCreateQbzTrackRadio} onTrackCreateQobuzRadio={handleCreateQobuzTrackRadio} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} {downloadStateVersion} onLocalTrackPlay={handleLocalTrackPlay} onLocalTrackPlayNext={queueLocalTrackNext} onLocalTrackPlayLater={queueLocalTrackLater} onPlexTrackPlay={handleDisplayPlexTrackPlay} onSetLocalQueue={handleSetLocalQueue} onPlaylistCountUpdate={(playlistId, qobuzCount, localCount) => sidebarRef?.updatePlaylistCounts(playlistId, qobuzCount, localCount) } onPlaylistUpdated={() => { sidebarRef?.refreshPlaylists(); sidebarRef?.refreshPlaylistSettings(); sidebarRef?.refreshLocalTrackCounts(); }} onPlaylistDeleted={() => { sidebarRef?.refreshPlaylists(); sidebarRef?.refreshPlaylistSettings(); navGoBack(); }} /> {:else if isFavoritesView(activeView)} {#if offlineStatus.isOffline} navigateTo('library')} /> {:else} openAddToPlaylist([trackId])} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds)} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleDisplayTrackDownload} onTrackCreateQbzRadio={handleCreateQbzTrackRadio} onTrackCreateQobuzRadio={handleCreateQobuzTrackRadio} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} onPlaylistSelect={selectPlaylist} onPlaylistPlay={playPlaylistById} onPlaylistPlayNext={queuePlaylistNextById} onPlaylistPlayLater={queuePlaylistLaterById} onPlaylistRemoveFavorite={removePlaylistFavoriteById} onPlaylistShareQobuz={sharePlaylistQobuzLinkById} onRandomArtist={(artistId) => handleArtistClick(artistId)} onLabelClick={handleLabelClick} selectedTab={getFavoritesTabFromView(activeView) ?? favoritesDefaultTab} onTabNavigate={(tab) => navigateToFavorites(tab)} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {/if} {:else if activeView === 'playlist-manager'} { sidebarRef?.refreshPlaylists(); sidebarRef?.refreshPlaylistSettings(); sidebarRef?.refreshLocalTrackCounts(); }} /> {:else if activeView === 'blacklist-manager'} {:else if activeView === 'discover-new-releases'} {:else if activeView === 'discover-ideal-discography'} {:else if activeView === 'discover-top-albums'} {:else if activeView === 'discover-qobuzissimes'} {:else if activeView === 'discover-albums-of-the-week'} {:else if activeView === 'discover-press-accolades'} {:else if activeView === 'discover-playlists'} {:else if activeView === 'discover-release-watch'} {:else if activeView === 'dailyq'} openAddToPlaylist([trackId])} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleDisplayTrackDownload} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'weeklyq'} openAddToPlaylist([trackId])} onBulkAddToPlaylist={(trackIds) => openAddToPlaylist(trackIds)} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleDisplayTrackDownload} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'favq'} openAddToPlaylist([trackId])} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleDisplayTrackDownload} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'topq'} openAddToPlaylist([trackId])} onTrackShareQobuz={shareQobuzTrackLink} onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)} onTrackGoToAlbum={handleAlbumClick} onTrackGoToArtist={handleArtistClick} onTrackShowInfo={showTrackInfo} onTrackDownload={handleDisplayTrackDownload} onTrackRemoveDownload={handleTrackRemoveDownload} onTrackReDownload={handleDisplayTrackDownload} getTrackOfflineCacheStatus={getTrackOfflineCacheStatus} activeTrackId={currentTrack?.id ?? null} isPlaybackActive={isPlaying} /> {:else if activeView === 'purchases'} {:else if activeView === 'purchase-album' && selectedPurchaseAlbumId} {:else if activeView === 'artists-by-location' && artistsByLocationContext} {:else if activeView === 'mixtapes'} openMixtapeDetail(id)} onCreate={() => openCreateModal('mixtape')} onBack={navGoBack} /> {:else if activeView === 'collections'} openMixtapeDetail(id)} onCreate={() => openCreateModal('collection')} onBack={navGoBack} /> {:else if activeView === 'mixtape-detail'} {#if mixtapeDetailId} { const col = $collectionsStore.find((x) => x.id === mixtapeDetailId); if (col?.kind === 'collection' || col?.kind === 'artist_collection') { navigateTo('collections'); } else { navigateTo('mixtapes'); } mixtapeDetailId = null; }} onOpenItem={(source, itemType, sourceItemId) => { if (itemType === 'album') { if (source === 'qobuz') handleAlbumClick(sourceItemId); else selectLocalAlbum(sourceItemId); } else if (itemType === 'playlist') { const numericId = parseInt(sourceItemId, 10); if (!Number.isNaN(numericId)) selectPlaylist(numericId); } // tracks: item-level navigation is not yet a dedicated view }} onOpenArtist={(source, artistName) => { if (source === 'qobuz' && artistName) { handleOpenArtistByName(artistName); } }} onPlayItem={(item) => handleMixtapeItemAction(item, 'play')} onPlayItemNext={(item) => handleMixtapeItemAction(item, 'play_next')} onAddItemToQueueLater={(item) => handleMixtapeItemAction(item, 'queue_later')} onBulkPlayNext={async (items) => { for (const it of items) await handleMixtapeItemAction(it, 'play_next'); }} onBulkPlayLater={async (items) => { for (const it of items) await handleMixtapeItemAction(it, 'queue_later'); }} onBulkAddToPlaylist={(items) => { const trackIds: number[] = []; for (const it of items) { if (it.item_type === 'track' && it.source === 'qobuz') { const n = Number(it.source_item_id); if (!Number.isNaN(n)) trackIds.push(n); } } if (trackIds.length === 0) { showToast($t('toast.actionNotAvailableYet') || 'Add-to-playlist is only available for Qobuz tracks right now', 'info'); return; } userPlaylists = sidebarRef?.getPlaylists() ?? []; openPlaylistModal('addTrack', trackIds, false); }} onPlayTrackFromItem={(item, trackId) => handleMixtapePlayTrackFromAlbum(item, trackId)} onPlayTrackNext={(trackId) => handleMixtapeQueueTrack(trackId, 'play_next')} onPlayTrackLater={(trackId) => handleMixtapeQueueTrack(trackId, 'queue_later')} /> {:else}

No collection selected.

{/if} {:else if activeView === 'discography-builder'} {#if discographyArtistId} { const prevId = discographyArtistId; discographyArtistId = null; navigateTo('artist', prevId ?? undefined); }} onCreated={(col) => { discographyArtistId = null; mixtapeDetailId = col.id; navTo('mixtape-detail', col.id); }} onOpenAlbum={(source, sourceItemId) => { if (source === 'qobuz') { handleAlbumClick(sourceItemId); } else { // Both 'local' and 'plex' albums are addressable via the // local-album route (Plex albums are stored under the same // id scheme after LocalLibraryView's mapPlexAlbum). selectLocalAlbum(sourceItemId); } }} /> {:else}

No artist selected.

{/if} {:else if activeView === 'offline-manager'} navigateTo('settings')} onGoToAlbum={(albumId) => handleAlbumClick(albumId)} onGoToFavorites={() => navigateToFavorites()} /> {:else}

{$t('actions.loading')}

{/if}