goosemusic 1.3.2

A music player with YouTube search, local playback, and OS media controls
use iced::widget::{Column, Space};

use super::{
    artist, lyrics, playlist, search, settings, track_list_search, Element, Message, MusicPlayer,
};
use crate::{
    app::{pane::PaneId, ui::search::browse_meta, ViewKind},
    theme::AppTheme,
};

pub(super) fn view_main_content(
    player: &MusicPlayer,
    pane: PaneId,
) -> Element<'_, Message, AppTheme> {
    let track_list_search = match &player.track_list_search {
        Some(fs) if fs.list == crate::app::TrackListKind::Active && fs.pane == pane => {
            track_list_search::view_track_list_search(player, fs)
        }
        _ => Space::new().into(),
    };

    let view = if let Some(lyrics_state) = player.pane(pane).lyrics.as_ref() {
        lyrics::view_lyrics(player, pane, lyrics_state)
    } else {
        match &player.view_data_in(pane).kind {
            ViewKind::Search(s) => search::view_search(player, pane, s),
            ViewKind::SongRadio(label) | ViewKind::ArtistRadio(label) => {
                search::view_search_radio(player, pane, label)
            }
            ViewKind::Artist(_) => artist::view_artist(player, pane),
            ViewKind::Album(r) => search::view_browse(
                player,
                pane,
                r.provider,
                &r.name,
                &r.id,
                browse_meta(&r.badge, &r.date),
            ),
            ViewKind::PlaylistView(r) => {
                search::view_browse(player, pane, r.provider, &r.name, &r.id, None)
            }
            ViewKind::Playlist(entry) => playlist::view_playlist(player, pane, entry),
            ViewKind::Downloads => playlist::view_downloads(player, pane),
            ViewKind::Settings => settings::view_settings(player),
        }
    };

    Column::with_children([
        search::view_search_bar(player, pane),
        track_list_search,
        view,
    ])
    .into()
}