use std::ops::Range;
use serde::Deserialize;
use url::Url;
use crate::types::streams::StreamItemState;
use crate::{
models::{
addon_details::Selected as AddonDetailsSelected,
catalog_with_filters::Selected as CatalogWithFiltersSelected,
catalogs_with_extra::Selected as CatalogsWithExtraSelected,
installed_addons_with_filters::Selected as InstalledAddonsWithFiltersSelected,
library_by_type::Selected as LibraryByTypeSelected,
library_with_filters::Selected as LibraryWithFiltersSelected,
meta_details::Selected as MetaDetailsSelected,
player::{Selected as PlayerSelected, VideoParams},
},
types::{
addon::Descriptor,
api::AuthRequest,
library::LibraryItemId,
profile::Settings as ProfileSettings,
resource::{MetaItemId, MetaItemPreview, Video},
streaming_server::{
Settings as StreamingServerSettings,
StatisticsRequest as StreamingServerStatisticsRequest,
},
},
};
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionCtx {
Authenticate(AuthRequest),
Logout,
InstallAddon(Descriptor),
InstallTraktAddon,
LogoutTrakt,
UpgradeAddon(Descriptor),
UninstallAddon(Descriptor),
UpdateSettings(ProfileSettings),
AddToLibrary(MetaItemPreview),
RemoveFromLibrary(String),
RewindLibraryItem(String),
LibraryItemMarkAsWatched {
id: LibraryItemId,
is_watched: bool,
},
ToggleLibraryItemNotifications(LibraryItemId, bool),
DismissNotificationItem(MetaItemId),
ClearSearchHistory,
PushUserToAPI,
PullUserFromAPI,
PushAddonsToAPI,
PullAddonsFromAPI,
SyncLibraryWithAPI,
PullNotifications,
GetEvents,
DismissEvent(String),
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionCatalogWithFilters {
LoadNextPage,
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionCatalogsWithExtra {
LoadRange(Range<usize>),
LoadNextPage(usize),
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionLibraryByType {
LoadNextPage(usize),
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionLibraryWithFilters {
LoadNextPage,
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionMetaDetails {
MarkAsWatched(bool),
MarkVideoAsWatched(Video, bool),
}
#[derive(Clone, Deserialize, Debug)]
#[serde(untagged)]
pub enum CreateTorrentArgs {
File(Vec<u8>),
Magnet(Url),
}
#[derive(Clone, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct PlayOnDeviceArgs {
pub device: String,
pub source: String,
pub time: Option<u64>,
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionStreamingServer {
Reload,
UpdateSettings(StreamingServerSettings),
CreateTorrent(CreateTorrentArgs),
GetStatistics(StreamingServerStatisticsRequest),
PlayOnDevice(PlayOnDeviceArgs),
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionLink {
ReadData,
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionPlayer {
#[serde(rename_all = "camelCase")]
VideoParamsChanged {
video_params: Option<VideoParams>,
},
StreamStateChanged {
state: StreamItemState,
},
TimeChanged {
time: u64,
duration: u64,
device: String,
},
PausedChanged {
paused: bool,
},
NextVideo,
Ended,
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "model", content = "args")]
pub enum ActionLoad {
AddonDetails(AddonDetailsSelected),
CatalogWithFilters(Option<CatalogWithFiltersSelected>),
CatalogsWithExtra(CatalogsWithExtraSelected),
DataExport,
InstalledAddonsWithFilters(InstalledAddonsWithFiltersSelected),
LibraryWithFilters(LibraryWithFiltersSelected),
LibraryByType(LibraryByTypeSelected),
LocalSearch,
MetaDetails(MetaDetailsSelected),
Player(Box<PlayerSelected>),
Link,
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum ActionSearch {
#[serde(rename_all = "camelCase")]
Search {
search_query: String,
max_results: usize,
},
}
#[derive(Clone, Deserialize, Debug)]
#[serde(tag = "action", content = "args")]
pub enum Action {
Ctx(ActionCtx),
Link(ActionLink),
CatalogWithFilters(ActionCatalogWithFilters),
CatalogsWithExtra(ActionCatalogsWithExtra),
LibraryByType(ActionLibraryByType),
LibraryWithFilters(ActionLibraryWithFilters),
MetaDetails(ActionMetaDetails),
StreamingServer(ActionStreamingServer),
Player(ActionPlayer),
Load(ActionLoad),
Search(ActionSearch),
Unload,
}