use crate::api::rockbox::v1alpha1::library_service_client::LibraryServiceClient; use crate::api::rockbox::v1alpha1::playback_service_client::PlaybackServiceClient; use crate::api::rockbox::v1alpha1::system_service_client::SystemServiceClient; use crate::api::rockbox::v1alpha1::{ GetGlobalStatusRequest, GetGlobalStatusResponse, PlayAllTracksRequest, PlayLikedTracksRequest, ScanLibraryRequest, SearchRequest, SearchResponse, }; use crate::app::RbApplication; use crate::config; use crate::state::AppState; use crate::types::track::Track; use crate::ui::media_controls::MediaControls; use crate::ui::pages::album_details::AlbumDetails; use crate::ui::pages::albums::Albums; use crate::ui::pages::artist_details::ArtistDetails; use crate::ui::pages::current_playlist::CurrentPlaylist; use crate::ui::pages::search::Search; use crate::ui::pages::songs::Songs; use crate::ui::pages::{artists::Artists, files::Files, likes::Likes}; use crate::ui::{about_dialog, preferences_dialog}; use adw::prelude::*; use adw::subclass::prelude::*; use adw::{ NavigationPage, NavigationView, OverlaySplitView, StatusPage, TabBar, TabView, ToastOverlay, ViewStack, ViewStackPage, }; use anyhow::Error; use glib::subclass; use gtk::{ gio, glib, Box, Button, CompositeTemplate, ListBox, MenuButton, Overlay, ScrolledWindow, SearchBar, SearchEntry, ToggleButton, }; use preferences_dialog::RbPreferencesDialog; use std::cell::{Cell, RefCell}; use std::env; use std::thread; use tokio::sync::mpsc; mod imp { use super::*; #[derive(Debug, Default, CompositeTemplate)] #[template(resource = "/io/github/tsirysndr/Rockbox/gtk/window.ui")] pub struct RbApplicationWindow { #[template_child] pub show_sidebar_button: TemplateChild