Files
managarr/src/app/radarr/mod.rs

204 lines
5.9 KiB
Rust

use crate::app::App;
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
use crate::network::radarr_network::RadarrEvent;
pub mod radarr_context_clues;
#[cfg(test)]
#[path = "radarr_tests.rs"]
mod radarr_tests;
impl<'a> App<'a> {
pub(super) async fn dispatch_by_radarr_block(&mut self, active_radarr_block: &ActiveRadarrBlock) {
match active_radarr_block {
ActiveRadarrBlock::Collections => {
self
.dispatch_network_event(RadarrEvent::GetCollections.into())
.await;
}
ActiveRadarrBlock::CollectionDetails => {
self.is_loading = true;
self.populate_movie_collection_table().await;
self.is_loading = false;
}
ActiveRadarrBlock::Downloads => {
self
.dispatch_network_event(RadarrEvent::GetDownloads.into())
.await;
}
ActiveRadarrBlock::RootFolders => {
self
.dispatch_network_event(RadarrEvent::GetRootFolders.into())
.await;
}
ActiveRadarrBlock::Movies => {
self
.dispatch_network_event(RadarrEvent::GetMovies.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetDownloads.into())
.await;
}
ActiveRadarrBlock::Indexers => {
self
.dispatch_network_event(RadarrEvent::GetIndexers.into())
.await;
}
ActiveRadarrBlock::IndexerSettingsPrompt => {
self
.dispatch_network_event(RadarrEvent::GetIndexerSettings.into())
.await;
}
ActiveRadarrBlock::System => {
self
.dispatch_network_event(RadarrEvent::GetTasks.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetQueuedEvents.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetLogs.into())
.await;
}
ActiveRadarrBlock::SystemUpdates => {
self
.dispatch_network_event(RadarrEvent::GetUpdates.into())
.await;
}
ActiveRadarrBlock::AddMovieSearchResults => {
self
.dispatch_network_event(RadarrEvent::SearchNewMovie.into())
.await;
}
ActiveRadarrBlock::MovieDetails | ActiveRadarrBlock::FileInfo => {
self
.dispatch_network_event(RadarrEvent::GetMovieDetails.into())
.await;
}
ActiveRadarrBlock::MovieHistory => {
self
.dispatch_network_event(RadarrEvent::GetMovieHistory.into())
.await;
}
ActiveRadarrBlock::Cast | ActiveRadarrBlock::Crew => {
match self.data.radarr_data.movie_details_modal.as_ref() {
Some(movie_details_modal)
if movie_details_modal.movie_cast.items.is_empty()
|| movie_details_modal.movie_crew.items.is_empty() =>
{
self
.dispatch_network_event(RadarrEvent::GetMovieCredits.into())
.await;
}
_ => (),
}
}
ActiveRadarrBlock::ManualSearch => match self.data.radarr_data.movie_details_modal.as_ref() {
Some(movie_details_modal) if movie_details_modal.movie_releases.items.is_empty() => {
self
.dispatch_network_event(RadarrEvent::GetReleases.into())
.await;
}
_ => (),
},
_ => (),
}
self.check_for_prompt_action().await;
self.reset_tick_count();
}
async fn check_for_prompt_action(&mut self) {
if self.data.radarr_data.prompt_confirm {
self.data.radarr_data.prompt_confirm = false;
if let Some(radarr_event) = &self.data.radarr_data.prompt_confirm_action {
self.dispatch_network_event((*radarr_event).into()).await;
self.should_refresh = true;
self.data.radarr_data.prompt_confirm_action = None;
}
}
}
pub(super) async fn radarr_on_tick(
&mut self,
active_radarr_block: ActiveRadarrBlock,
is_first_render: bool,
) {
if is_first_render {
self
.dispatch_network_event(RadarrEvent::GetQualityProfiles.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetTags.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetRootFolders.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetOverview.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetStatus.into())
.await;
self.dispatch_by_radarr_block(&active_radarr_block).await;
}
if self.should_refresh {
self.dispatch_by_radarr_block(&active_radarr_block).await;
}
if self.is_routing {
if self.is_loading && !self.should_refresh {
self.cancellation_token.cancel();
}
self.dispatch_by_radarr_block(&active_radarr_block).await;
self.refresh_metadata().await;
}
if self.tick_count % self.tick_until_poll == 0 {
self.refresh_metadata().await;
}
}
async fn refresh_metadata(&mut self) {
self
.dispatch_network_event(RadarrEvent::GetQualityProfiles.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetTags.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetRootFolders.into())
.await;
self
.dispatch_network_event(RadarrEvent::GetDownloads.into())
.await;
}
async fn populate_movie_collection_table(&mut self) {
let collection_movies =
if let Some(filtered_collections) = self.data.radarr_data.filtered_collections.as_ref() {
filtered_collections
.current_selection()
.clone()
.movies
.unwrap_or_default()
} else {
self
.data
.radarr_data
.collections
.current_selection()
.clone()
.movies
.unwrap_or_default()
};
self
.data
.radarr_data
.collection_movies
.set_items(collection_movies);
}
}