Lidarr support #1

Merged
Dark-Alex-17 merged 61 commits from lidarr into main 2026-01-21 21:30:47 +00:00
2 changed files with 44 additions and 10 deletions
Showing only changes of commit 5fa9b08347 - Show all commits
@@ -75,11 +75,21 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrManualSearchCommand>
let result = match self.command {
SonarrManualSearchCommand::Episode { episode_id } => {
println!("Searching for episode releases. This may take a minute...");
let resp = self
match self
.network
.handle_network_event(SonarrEvent::GetEpisodeReleases(episode_id).into())
.await?;
serde_json::to_string_pretty(&resp)?
.await
{
Ok(Serdeable::Sonarr(SonarrSerdeable::Releases(releases_vec))) => {
let seasons_vec: Vec<SonarrRelease> = releases_vec
.into_iter()
.filter(|release| !release.full_season)
.collect();
serde_json::to_string_pretty(&seasons_vec)?
}
Err(e) => return Err(e),
_ => serde_json::to_string_pretty(&json!({"message": "Failed to parse response"}))?,
}
}
SonarrManualSearchCommand::Season {
series_id,
@@ -108,9 +108,13 @@ mod tests {
use std::sync::Arc;
use mockall::predicate::eq;
use serde_json::json;
use pretty_assertions::assert_str_eq;
use tokio::sync::Mutex;
use crate::models::sonarr_models::SonarrRelease;
use crate::network::sonarr_network::sonarr_network_test_utils::test_utils::{
torrent_release, usenet_release,
};
use crate::{
app::App,
cli::{
@@ -134,9 +138,13 @@ mod tests {
))
.times(1)
.returning(|_| {
Ok(Serdeable::Sonarr(SonarrSerdeable::Value(
json!({"testResponse": "response"}),
)))
Ok(Serdeable::Sonarr(SonarrSerdeable::Releases(vec![
torrent_release(),
SonarrRelease {
full_season: true,
..usenet_release()
},
])))
});
let app_arc = Arc::new(Mutex::new(App::test_default()));
let manual_episode_search_command = SonarrManualSearchCommand::Episode { episode_id: 1 };
@@ -150,10 +158,18 @@ mod tests {
.await;
assert_ok!(&result);
assert_str_eq!(
result.unwrap(),
serde_json::to_string_pretty(&[torrent_release()]).unwrap()
);
}
#[tokio::test]
async fn test_manual_season_search_command() {
let expected_release = SonarrRelease {
full_season: true,
..usenet_release()
};
let expected_series_id = 1;
let expected_season_number = 1;
let mut mock_network = MockNetworkTrait::new();
@@ -164,9 +180,13 @@ mod tests {
))
.times(1)
.returning(|_| {
Ok(Serdeable::Sonarr(SonarrSerdeable::Value(
json!({"testResponse": "response"}),
)))
Ok(Serdeable::Sonarr(SonarrSerdeable::Releases(vec![
torrent_release(),
SonarrRelease {
full_season: true,
..usenet_release()
},
])))
});
let app_arc = Arc::new(Mutex::new(App::test_default()));
let manual_season_search_command = SonarrManualSearchCommand::Season {
@@ -183,6 +203,10 @@ mod tests {
.await;
assert_ok!(&result);
assert_str_eq!(
result.unwrap(),
serde_json::to_string_pretty(&[expected_release]).unwrap()
);
}
}
}