feat(readarr): add Readarr root folders and expose the command on the CLI

This commit is contained in:
Dark-Alex-17 committed 2026-08-26 10:31:40 -06:00
1 parent e8e3376327
commit 3475660eb2
7 files changed
+426 -7

No files matched your search

+43 -2
View File
@@ -3,7 +3,7 @@ use log::info;
use serde_json::{Value, json};
use super::{NetworkEvent, NetworkResource};
use crate::models::readarr_models::{ReadarrSerdeable, ReadarrTaskName};
use crate::models::readarr_models::{AddReadarrRootFolderBody, ReadarrSerdeable, ReadarrTaskName};
use crate::models::servarr_models::{MetadataProfile, QualityProfile, Tag};
use crate::network::{Network, RequestMethod};
@@ -16,6 +16,7 @@ mod readarr_network_tests;
#[derive(Debug, Eq, PartialEq, Clone)]
pub enum ReadarrEvent {
AddRootFolder(AddReadarrRootFolderBody),
AddTag(String),
DeleteTag(i64),
GetDiskSpace,
@@ -44,7 +45,7 @@ impl NetworkResource for ReadarrEvent {
ReadarrEvent::GetLogs(_) => "/log",
ReadarrEvent::GetMetadataProfiles => "/metadataprofile",
ReadarrEvent::GetQualityProfiles => "/qualityprofile",
ReadarrEvent::GetRootFolders => "/rootfolder",
ReadarrEvent::AddRootFolder(_) | ReadarrEvent::GetRootFolders => "/rootfolder",
ReadarrEvent::GetStatus => "/system/status",
ReadarrEvent::GetTasks => "/system/task",
ReadarrEvent::AddTag(_) | ReadarrEvent::DeleteTag(_) | ReadarrEvent::GetTags => "/tag",
@@ -65,6 +66,10 @@ impl Network<'_, '_> {
readarr_event: ReadarrEvent,
) -> Result<ReadarrSerdeable> {
match readarr_event {
ReadarrEvent::AddRootFolder(add_root_folder_body) => self
.add_readarr_root_folder(add_root_folder_body)
.await
.map(ReadarrSerdeable::from),
ReadarrEvent::AddTag(tag) => self.add_readarr_tag(tag).await.map(ReadarrSerdeable::from),
ReadarrEvent::DeleteTag(tag_id) => self
.delete_readarr_tag(tag_id)
@@ -225,4 +230,40 @@ impl Network<'_, '_> {
.handle_request::<(), ()>(request_props, |_, _| ())
.await
}
pub(in crate::network::readarr_network) async fn extract_and_add_readarr_tag_ids_vec(
&mut self,
edit_tags: &str,
) -> Vec<i64> {
let missing_tags_vec = {
let tags_map = &self.app.lock().await.data.readarr_data.tags_map;
edit_tags
.split(',')
.filter(|&tag| {
!tag.is_empty() && tags_map.get_by_right(tag.to_lowercase().trim()).is_none()
})
.collect::<Vec<&str>>()
};
for tag in missing_tags_vec {
self
.add_readarr_tag(tag.trim().to_owned())
.await
.expect("Unable to add tag");
}
let app = self.app.lock().await;
edit_tags
.split(',')
.filter(|tag| !tag.is_empty())
.map(|tag| {
*app
.data
.readarr_data
.tags_map
.get_by_right(tag.to_lowercase().trim())
.unwrap()
})
.collect()
}
}