use crate::api::rockbox::v1alpha1::browse_service_client::BrowseServiceClient; use crate::api::rockbox::v1alpha1::playback_service_client::PlaybackServiceClient; use crate::api::rockbox::v1alpha1::playlist_service_client::PlaylistServiceClient; use crate::api::rockbox::v1alpha1::{ InsertDirectoryRequest, InsertTracksRequest, PlayDirectoryRequest, PlayTrackRequest, TreeGetEntriesRequest, TreeGetEntriesResponse, }; use crate::constants::*; use crate::state::AppState; use adw::prelude::*; use adw::subclass::prelude::*; use anyhow::Error; use glib::subclass; use gtk::glib; use gtk::{CompositeTemplate, Image, Label, ListBox, MenuButton}; use std::cell::{Cell, RefCell}; use std::{env, thread}; mod imp { use super::*; #[derive(Debug, Default, CompositeTemplate)] #[template(resource = "/io/github/tsirysndr/Rockbox/gtk/file.ui")] pub struct File { #[template_child] pub file_icon: TemplateChild, #[template_child] pub file_name: TemplateChild