mirror of
https://github.com/FluxaMedia/fluxa-core.git
synced 2026-08-09 00:17:34 +00:00
111 lines
4.5 KiB
Rust
111 lines
4.5 KiB
Rust
use super::HeadlessEngine;
|
|
use super::contracts::EffectResultInput;
|
|
use super::{
|
|
addons, auth, calendar, detail, discover, home, library, offline, player, plugins, search,
|
|
settings, sync, trailer,
|
|
};
|
|
use crate::runtime::{EffectEnvelope, EffectKind};
|
|
|
|
impl HeadlessEngine {
|
|
pub(super) fn complete_effect(&mut self, result: EffectResultInput) -> Vec<EffectEnvelope> {
|
|
let Some(effect) = self.take_pending_effect(&result.effect_id) else {
|
|
return vec![];
|
|
};
|
|
let generation = effect.generation;
|
|
// A stale build mismatch still needs to clear the runtime registry entry. The FFI
|
|
// boundary has no structured logging facility yet, so keep this non-fatal while making
|
|
// the mismatch observable to hosts that collect stderr.
|
|
let Some(kind) = EffectKind::from_str(&effect.kind) else {
|
|
eprintln!(
|
|
"fluxa-core contract mismatch: completion for unknown effect type '{}' (id '{}', generation {})",
|
|
effect.kind, effect.id, effect.generation
|
|
);
|
|
return vec![];
|
|
};
|
|
let effect_type = kind.as_str();
|
|
|
|
// No wildcard arm: adding an EffectKind variant without handling it here is a compile error.
|
|
match kind {
|
|
EffectKind::FetchMetaDetail
|
|
| EffectKind::ReadPlaybackProgress
|
|
| EffectKind::ReadDetailLocalState
|
|
| EffectKind::FetchDetailSecondary
|
|
| EffectKind::PrefetchDetailStreams
|
|
| EffectKind::FetchDetailStreams
|
|
| EffectKind::FetchMetaDetailLookup
|
|
| EffectKind::FetchSeasonEpisodes => {
|
|
detail::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::LoadStreams
|
|
| EffectKind::StartTorrentStream
|
|
| EffectKind::EnqueueTraktScrobble
|
|
| EffectKind::StopTorrent
|
|
| EffectKind::FetchIntroSegments
|
|
| EffectKind::ResolveIntroImdbId
|
|
| EffectKind::FetchSubtitles
|
|
| EffectKind::PrefetchNextEpisodeStreams => {
|
|
player::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::ReadHomeBootstrap
|
|
| EffectKind::RefreshContinueWatching
|
|
| EffectKind::PrepareDirectPlayback
|
|
| EffectKind::FetchCatalogPage => {
|
|
home::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::ReadLibraryState
|
|
| EffectKind::WriteLibraryCommand
|
|
| EffectKind::WriteFeedback
|
|
| EffectKind::ClearPlaybackProgress
|
|
| EffectKind::WritePlaybackProgress
|
|
| EffectKind::SyncWatchedState => {
|
|
library::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::FetchAddonManifest
|
|
| EffectKind::RefreshInstalledAddons
|
|
| EffectKind::FetchAddonResource => {
|
|
addons::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::RunSearch => search::complete(self, generation, &result),
|
|
|
|
EffectKind::RunDiscover
|
|
| EffectKind::ReadDiscoverCatalogFilters
|
|
| EffectKind::FetchDiscoverPage => {
|
|
discover::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::ReadCalendarMonth => calendar::complete(self, generation, &result, &effect),
|
|
|
|
EffectKind::EnqueueOfflineDownload => offline::complete(self, generation, &result),
|
|
|
|
EffectKind::WriteSettings => settings::complete(self, generation, &result),
|
|
|
|
EffectKind::RunExternalSync | EffectKind::SyncExternalIntegration => {
|
|
sync::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::RunAuthFlow
|
|
| EffectKind::ExchangeAuthCode
|
|
| EffectKind::RefreshAuthToken => {
|
|
auth::complete(self, effect_type, generation, &result)
|
|
}
|
|
|
|
EffectKind::FetchYoutubeTrailerWatchConfig
|
|
| EffectKind::FetchYoutubeTrailerPlayer
|
|
| EffectKind::FetchYoutubeTrailerPlayerScript => {
|
|
trailer::complete(self, effect_type, generation, &effect, &result)
|
|
}
|
|
|
|
EffectKind::FetchPluginManifest => plugins::complete(self, generation, &result),
|
|
|
|
EffectKind::UpdateCalendarWidget
|
|
| EffectKind::NotifyReleasedEpisodes
|
|
| EffectKind::ReplaceExternalContinueWatching
|
|
| EffectKind::ExecutePlugin => vec![],
|
|
}
|
|
}
|
|
}
|