feat(readarr): edit the shared indexer settings and expose the command on the CLI

This commit is contained in:
Dark-Alex-17 committed 2026-09-02 15:37:25 -06:00
1 parent 0867ae918e
commit dbd84d929d
6 files changed
+378 -5

No files matched your search

@@ -36,6 +36,23 @@ impl Network<'_, '_> {
.await
}
pub(in crate::network::readarr_network) async fn edit_all_readarr_indexer_settings(
&mut self,
params: IndexerSettings,
) -> Result<Value> {
info!("Updating Readarr indexer settings");
let event = ReadarrEvent::EditAllIndexerSettings(IndexerSettings::default());
debug!("Indexer settings body: {params:?}");
let request_props = self
.request_props_from(event, RequestMethod::Put, Some(params), None, None)
.await;
self
.handle_request::<IndexerSettings, Value>(request_props, |_, _| {})
.await
}
pub(in crate::network::readarr_network) async fn get_all_readarr_indexer_settings(
&mut self,
) -> Result<IndexerSettings> {
@@ -714,4 +714,40 @@ mod tests {
let app = app.lock().await;
assert_none!(&app.data.readarr_data.indexer_settings);
}
#[tokio::test]
async fn test_handle_edit_all_readarr_indexer_settings_event() {
let (mock, app, _server) = MockServarrApi::put()
.with_request_body(serde_json::from_str(INDEXER_SETTINGS_JSON).unwrap())
.build_for(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
.await;
app.lock().await.server_tabs.set_index(3);
let mut network = test_network(&app);
let result = network
.handle_readarr_event(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
.await;
mock.assert_async().await;
assert_ok!(&result);
}
#[tokio::test]
async fn test_handle_edit_all_readarr_indexer_settings_event_failure() {
let (mock, app, _server) = MockServarrApi::put()
.with_request_body(serde_json::from_str(INDEXER_SETTINGS_JSON).unwrap())
.returns(json!({ "message": "Internal Server Error" }))
.status(500)
.build_for(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
.await;
app.lock().await.server_tabs.set_index(3);
let mut network = test_network(&app);
let result = network
.handle_readarr_event(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
.await;
mock.assert_async().await;
assert_err!(result);
}
}
+9 -2
View File
@@ -8,7 +8,7 @@ use crate::models::readarr_models::{
ReadarrTaskName,
};
use crate::models::servarr_models::{
EditIndexerParams, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
EditIndexerParams, IndexerSettings, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
};
use crate::network::{Network, RequestMethod};
@@ -43,6 +43,7 @@ pub enum ReadarrEvent {
DeleteRootFolder(i64),
DeleteTag(i64),
DownloadRelease(ReleaseDownloadBody),
EditAllIndexerSettings(IndexerSettings),
EditAuthor(EditAuthorParams),
EditIndexer(EditIndexerParams),
GetAllIndexerSettings,
@@ -113,7 +114,9 @@ impl NetworkResource for ReadarrEvent {
| ReadarrEvent::UpdateAndScanAuthor(_)
| ReadarrEvent::UpdateDownloads => "/command",
ReadarrEvent::GetHostConfig | ReadarrEvent::GetSecurityConfig => "/config/host",
ReadarrEvent::GetAllIndexerSettings => "/config/indexer",
ReadarrEvent::GetAllIndexerSettings | ReadarrEvent::EditAllIndexerSettings(_) => {
"/config/indexer"
}
ReadarrEvent::GetDiskSpace => "/diskspace",
ReadarrEvent::GetBookEditions(_) => "/edition",
ReadarrEvent::HealthCheck => "/health",
@@ -201,6 +204,10 @@ impl Network<'_, '_> {
.download_readarr_release(release_download_body)
.await
.map(ReadarrSerdeable::from),
ReadarrEvent::EditAllIndexerSettings(params) => self
.edit_all_readarr_indexer_settings(params)
.await
.map(ReadarrSerdeable::from),
ReadarrEvent::EditAuthor(edit_author_params) => self
.edit_author(edit_author_params)
.await
@@ -5,7 +5,7 @@ mod tests {
AddAuthorBody, AddReadarrRootFolderBody, DeleteParams, EditAuthorParams, ReadarrSerdeable,
};
use crate::models::servarr_models::{
EditIndexerParams, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
EditIndexerParams, IndexerSettings, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
};
use crate::network::network_tests::test_utils::{MockServarrApi, test_network};
use crate::network::{NetworkEvent, NetworkResource, readarr_network::ReadarrEvent};
@@ -43,6 +43,10 @@ mod tests {
#[case(ReadarrEvent::GetHostConfig, "/config/host")]
#[case(ReadarrEvent::GetSecurityConfig, "/config/host")]
#[case(ReadarrEvent::GetAllIndexerSettings, "/config/indexer")]
#[case(
ReadarrEvent::EditAllIndexerSettings(IndexerSettings::default()),
"/config/indexer"
)]
#[case(ReadarrEvent::GetDiskSpace, "/diskspace")]
#[case(ReadarrEvent::GetBookEditions(1), "/edition")]
#[case(ReadarrEvent::HealthCheck, "/health")]