249 lines
7.2 KiB
Rust
249 lines
7.2 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 App<'_> {
|
|
pub(super) async fn dispatch_by_radarr_block(&mut self, active_radarr_block: &ActiveRadarrBlock) {
|
|
match active_radarr_block {
|
|
ActiveRadarrBlock::Blocklist => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetBlocklist.into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::Collections => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetQualityProfiles.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetCollections.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetMovies.into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::CollectionDetails => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetQualityProfiles.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetTags.into())
|
|
.await;
|
|
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::GetQualityProfiles.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetTags.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetMovies.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetDownloads.into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::Indexers => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetTags.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetIndexers.into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::AllIndexerSettingsPrompt => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetAllIndexerSettings.into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::TestIndexer => {
|
|
self
|
|
.dispatch_network_event(
|
|
RadarrEvent::TestIndexer(self.extract_radarr_indexer_id().await).into(),
|
|
)
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::TestAllIndexers => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::TestAllIndexers.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(500).into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::SystemUpdates => {
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetUpdates.into())
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::AddMovieSearchResults => {
|
|
self
|
|
.dispatch_network_event(
|
|
RadarrEvent::SearchNewMovie(self.extract_movie_search_query().await).into(),
|
|
)
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::MovieDetails | ActiveRadarrBlock::FileInfo => {
|
|
self
|
|
.dispatch_network_event(
|
|
RadarrEvent::GetMovieDetails(self.extract_movie_id().await).into(),
|
|
)
|
|
.await;
|
|
}
|
|
ActiveRadarrBlock::MovieHistory => {
|
|
self
|
|
.dispatch_network_event(
|
|
RadarrEvent::GetMovieHistory(self.extract_movie_id().await).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(self.extract_movie_id().await).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(self.extract_movie_id().await).into())
|
|
.await;
|
|
}
|
|
_ => (),
|
|
},
|
|
_ => (),
|
|
}
|
|
|
|
self.check_for_radarr_prompt_action().await;
|
|
self.reset_tick_count();
|
|
}
|
|
|
|
async fn check_for_radarr_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.take() {
|
|
self.dispatch_network_event(radarr_event.into()).await;
|
|
self.should_refresh = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
pub(super) async fn radarr_on_tick(&mut self, active_radarr_block: ActiveRadarrBlock) {
|
|
if self.is_first_render {
|
|
self.refresh_radarr_metadata().await;
|
|
self.dispatch_by_radarr_block(&active_radarr_block).await;
|
|
self.is_first_render = false;
|
|
return;
|
|
}
|
|
|
|
if self.should_refresh {
|
|
self.dispatch_by_radarr_block(&active_radarr_block).await;
|
|
self.refresh_radarr_metadata().await;
|
|
}
|
|
|
|
if self.is_routing {
|
|
if !self.should_refresh {
|
|
self.cancellation_token.cancel();
|
|
} else {
|
|
self.dispatch_by_radarr_block(&active_radarr_block).await;
|
|
}
|
|
}
|
|
|
|
if self.tick_count % self.tick_until_poll == 0 {
|
|
self.refresh_radarr_metadata().await;
|
|
}
|
|
}
|
|
|
|
async fn refresh_radarr_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;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetDiskSpace.into())
|
|
.await;
|
|
self
|
|
.dispatch_network_event(RadarrEvent::GetStatus.into())
|
|
.await;
|
|
}
|
|
|
|
async fn populate_movie_collection_table(&mut self) {
|
|
let collection_movies = self
|
|
.data
|
|
.radarr_data
|
|
.collections
|
|
.current_selection()
|
|
.clone()
|
|
.movies
|
|
.unwrap_or_default();
|
|
self
|
|
.data
|
|
.radarr_data
|
|
.collection_movies
|
|
.set_items(collection_movies);
|
|
}
|
|
|
|
async fn extract_movie_id(&self) -> i64 {
|
|
self.data.radarr_data.movies.current_selection().id
|
|
}
|
|
|
|
async fn extract_movie_search_query(&self) -> String {
|
|
self
|
|
.data
|
|
.radarr_data
|
|
.add_movie_search
|
|
.as_ref()
|
|
.expect("Add movie search is empty")
|
|
.text
|
|
.clone()
|
|
}
|
|
|
|
async fn extract_radarr_indexer_id(&self) -> i64 {
|
|
self.data.radarr_data.indexers.current_selection().id
|
|
}
|
|
}
|