use iced::{Point, Rectangle};
use super::ViewData;
use crate::{
app::{
interaction::{self, ContextMenuFocus, DefaultCtxAction, TrackListKind, TrackPos},
update::operation::CaptureBounds,
CsvPreset, ImportCsvField, ImportMethod, ViewKind,
},
data::library,
deps::DepKind,
lyrics::Lyrics,
providers::ProviderId,
types::{QueueTab, Track},
};
#[derive(Debug, Clone)]
pub enum BackendResult {
SearchResults(u64, Vec<Track>, crate::providers::SearchTab),
SearchResultsAppend(u64, Vec<Track>),
RadioResults(u64, String, Vec<Track>),
BrowseResults(u64, Vec<Track>, Option<crate::providers::AlbumMeta>),
DownloadComplete(Track, String),
DownloadError(String),
SearchError(String),
ThumbnailDownloaded(String),
LyricsFetched(Result<Lyrics, String>, String),
NormalizationComputed(String, f32),
CardPlaylistReady(usize, String, Vec<Track>),
ArtistIdResolved {
rid: u64,
provider: ProviderId,
resolved_id: String,
},
ArtistSectionLoaded {
rid: u64,
provider: ProviderId,
kind: crate::providers::ArtistDataKind,
data: Box<Result<crate::providers::ArtistKindData, String>>,
},
LocalFilesPicked(Vec<std::path::PathBuf>),
ImportPathsPicked {
method: ImportMethod,
paths: Vec<std::path::PathBuf>,
},
DependencyInstalled(DepKind, Result<(), String>),
DependencyProgress(DepKind, u64, u64),
DependencyDeleted(DepKind, Result<(), String>),
ProviderResolved {
original: Track,
provider: ProviderId,
resolved: Option<Track>,
pos: Option<TrackPos>,
play: bool,
},
ProviderResolveError {
title: String,
provider: ProviderId,
message: String,
},
EditTrackProviderResolved(ProviderId, Option<Track>),
EditTrackProviderError(ProviderId, String),
VersionChecked {
current: String,
latest: Option<String>,
release_url: String,
asset_url: Option<String>,
sha256: Option<String>,
package_managed: bool,
error: Option<String>,
},
UpdateProgress(u64, u64),
UpdateComplete(Result<String, String>),
}
#[derive(Debug, Clone)]
pub enum Message {
Tick,
WindowClose,
WindowResized(iced::Size),
WindowOpened(iced::window::Id),
MediaHwnd(Option<u64>),
CursorMoved(Point),
LeftButtonReleased,
ListBoundsCaptured(Box<CaptureBounds>),
SearchHistoryBoundsCaptured(crate::app::update::operation::ListGeometry),
ContextMenuBoundsCaptured {
panel: Rectangle,
row_offsets: Vec<f32>,
},
ListScrolled {
list: TrackListKind,
translation_y: f32,
},
KeyPressed {
key: iced::keyboard::key::Physical,
modifiers: iced::keyboard::Modifiers,
},
SearchInputChanged(String),
SearchExecute,
SearchScopeChanged(crate::providers::SearchScope),
SearchProviderChanged(ProviderId),
SearchLoadMore,
SearchHistorySelected(usize),
DeleteSearchHistory(usize),
Browse(ViewKind, ProviderId),
OpenArtist {
id: String,
name: String,
source: ProviderId,
},
ArtistSectionProviderChanged(crate::providers::ArtistSectionKind, ProviderId),
ArtistHeaderProviderChanged(ProviderId),
DragPress(interaction::Pressed),
HoverStart(interaction::HoverTarget),
HoverEnd(interaction::HoverTarget),
ToggleLibrarySave(library::LibraryItem),
ToggleLibraryExpanded,
TrackRightClicked(TrackPos),
PlayTrackAt(TrackPos),
TogglePlayPause,
NextTrack,
PreviousTrack,
SetVolume(f32),
Seek(f32),
CreatePlaylist,
NewPlaylistNameChanged(String),
RenamePlaylist(String),
AddLocalMusic,
AddToPlaylist(usize),
TogglePicker(Vec<usize>),
ClosePicker,
ShowDeleteConfirm(usize),
ConfirmDeletePlaylist,
HideDeleteConfirm,
OpenAndPlayPlaylist(usize),
OpenImportPlaylist,
CloseImportPlaylist,
ImportMethodChanged(ImportMethod),
ImportCsvColChanged(ImportCsvField, String),
ImportCsvPresetChanged(CsvPreset),
ImportPlaylistNameChanged(String),
ImportPatternChanged(usize, String),
ImportAddPattern,
ImportRemovePattern(usize),
ImportSelectFiles,
TrackListSearchInput(String),
TrackListSearchNext,
TrackListSearchPrev,
TrackListSearchClose,
ToggleQueue,
SwitchQueueTab(QueueTab),
RevealNowPlaying,
ToggleRepeat,
ShowLyrics,
SetLyricsViewMode(crate::app::LyricsViewMode),
LyricsLineClicked(f32),
SelectLyricsProvider(crate::lyrics::LyricsProvider),
LyricsEditorAction(iced::widget::text_editor::Action),
CopyLyrics,
NavigateTo(ViewData),
SidebarSearch,
NavigateBack,
NavigateForward,
SettingsDownloadDirChanged(String),
SettingsMaxHistoryVisibleChanged(String),
SettingsMaxHistoryStoredChanged(String),
SettingsCacheMaxSizeChanged(String),
SettingsMaxRecentlyPlayedChanged(String),
SettingsVolumeNormalizationToggled(bool),
SettingsDefaultProviderChanged(ProviderId),
SettingsLanguageChanged(crate::i18n::Language),
SettingsThemeChanged(crate::theme::ThemeKind),
SettingsResetDefaults,
ContextMenuPlayTrack(TrackPos),
ContextMenuHover(Option<ContextMenuFocus>),
ContextMenuGoToArtist,
ContextMenuGoToArtistProvider(ProviderId),
ContextMenuDefault(DefaultCtxAction),
ContextMenuPlayViaProvider(ProviderId, TrackPos),
ContextMenuDownloadViaProvider(ProviderId),
ContextMenuSongRadioProvider(ProviderId),
ContextMenuArtistRadioProvider(ProviderId),
ContextMenuRemoveFromPlaylist(Vec<usize>),
ContextMenuRemoveFromQueue(Vec<usize>),
ContextMenuEditTrack,
EditTrackField(EditTrackField, String),
EditTrackSelectProvider(ProviderId),
EditTrackFindProvider(ProviderId),
SaveEditTrack,
CloseEditTrack,
CloseContextMenu,
DepToggle(DepKind),
DepInstall,
DepDismiss,
DepSettingsInstall(DepKind),
DepSettingsDelete(DepKind),
CheckForUpdates,
UpdateApp,
}
#[derive(Debug, Clone, Copy)]
pub enum EditTrackField {
Title,
Artist,
}