use url::Url;
use crate::models::common::ResourceLoadable;
use crate::models::ctx::CtxError;
use crate::models::link::LinkError;
use crate::models::local_search::Searchable;
use crate::models::streaming_server::PlaybackDevice;
use crate::runtime::EnvError;
use crate::types::addon::{Descriptor, Manifest, ResourceRequest, ResourceResponse};
use crate::types::api::{
APIRequest, AuthRequest, DataExportResponse, DatastoreRequest, GetModalResponse,
GetNotificationResponse, LinkCodeResponse, LinkDataResponse, SeekLogRequest, SkipGapsRequest,
SkipGapsResponse, SuccessResponse,
};
use crate::types::library::{LibraryBucket, LibraryItem, LibraryItemId};
use crate::types::profile::{Auth, AuthKey, Profile, User};
use crate::types::streaming_server::{
DeviceInfo, GetHTTPSResponse, NetworkInfo, SettingsResponse, Statistics, StatisticsRequest,
};
use crate::types::streams::StreamItemState;
use crate::types::{
resource::{MetaItem, Stream},
torrent::InfoHash,
};
pub type CtxStorageResponse = (
Option<Profile>,
Option<LibraryBucket>,
Option<LibraryBucket>,
);
#[derive(Debug)]
pub struct CtxAuthResponse {
pub auth: Auth,
pub addons_result: Result<Vec<Descriptor>, CtxError>,
pub library_items_result: Result<Vec<LibraryItem>, CtxError>,
}
pub type LibraryPlanResponse = (Vec<String>, Vec<String>);
#[derive(Debug)]
pub enum Internal {
CtxAuthResult(AuthRequest, Result<CtxAuthResponse, CtxError>),
AddonsAPIResult(APIRequest, Result<Vec<Descriptor>, CtxError>),
UserAPIResult(APIRequest, Result<User, CtxError>),
LibrarySyncPlanResult(DatastoreRequest, Result<LibraryPlanResponse, CtxError>),
LibraryPullResult(DatastoreRequest, Result<Vec<LibraryItem>, CtxError>),
Logout,
InstallTraktAddon,
InstallAddon(Descriptor),
UninstallAddon(Descriptor),
UninstallTraktAddon,
StreamLoaded {
stream: Stream,
stream_request: Option<ResourceRequest>,
meta_item: ResourceLoadable<MetaItem>,
},
StreamStateChanged {
state: StreamItemState,
stream_request: Option<ResourceRequest>,
meta_request: Option<ResourceRequest>,
},
CatalogsWithExtraSearch {
query: String,
},
UpdateLibraryItem(LibraryItem),
ProfileChanged,
LibraryChanged(bool),
StreamsChanged(bool),
SearchHistoryChanged,
NotificationsChanged,
PullNotifications,
DismissNotificationItem(LibraryItemId),
LinkCodeResult(Result<LinkCodeResponse, LinkError>),
LinkDataResult(String, Result<LinkDataResponse, LinkError>),
StreamingServerSettingsResult(Url, Result<SettingsResponse, EnvError>),
StreamingServerBaseURLResult(Url, Result<Url, EnvError>),
StreamingServerPlaybackDevicesResult(Url, Result<Vec<PlaybackDevice>, EnvError>),
StreamingServerNetworkInfoResult(Url, Result<NetworkInfo, EnvError>),
StreamingServerDeviceInfoResult(Url, Result<DeviceInfo, EnvError>),
StreamingServerUpdateSettingsResult(Url, Result<(), EnvError>),
StreamingServerCreateTorrentResult(InfoHash, Result<(), EnvError>),
StreamingServerPlayOnDeviceResult(String, Result<(), EnvError>),
StreamingServerGetHTTPSResult(Url, Result<GetHTTPSResponse, EnvError>),
StreamingServerStatisticsResult(
(Url, StatisticsRequest),
Result<Option<Statistics>, EnvError>,
),
ResourceRequestResult(ResourceRequest, Box<Result<ResourceResponse, EnvError>>),
ManifestRequestResult(Url, Result<Manifest, EnvError>),
NotificationsRequestResult(ResourceRequest, Box<Result<ResourceResponse, EnvError>>),
DataExportResult(AuthKey, Result<DataExportResponse, CtxError>),
SeekLogsResult(SeekLogRequest, Result<SuccessResponse, CtxError>),
SkipGapsResult(SkipGapsRequest, Result<SkipGapsResponse, CtxError>),
LoadLocalSearchResult(Url, Result<Vec<Searchable>, EnvError>),
GetModalResult(APIRequest, Result<Option<GetModalResponse>, CtxError>),
GetNotificationResult(
APIRequest,
Result<Option<GetNotificationResponse>, CtxError>,
),
DismissedEventsChanged,
}