feat: Bulk added CLI support for tracks and album functionalities in Lidarr

This commit is contained in:
2026-01-16 14:38:08 -07:00
parent 5e70d70758
commit bc6ecc39f4
26 changed files with 2058 additions and 34 deletions
+66
View File
@@ -256,6 +256,8 @@ pub struct LidarrCommandBody {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub artist_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub album_ids: Option<Vec<i64>>,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, Eq, PartialEq)]
@@ -495,6 +497,67 @@ pub struct LidarrReleaseDownloadBody {
pub indexer_id: i64,
}
#[derive(Default, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct TrackFile {
#[serde(deserialize_with = "super::from_i64")]
pub id: i64,
pub path: String,
#[serde(deserialize_with = "super::from_i64")]
pub size: i64,
pub quality: QualityWrapper,
pub date_added: DateTime<Utc>,
pub media_info: Option<MediaInfo>,
pub audio_tags: Option<AudioTags>,
}
#[derive(Serialize, Deserialize, Derivative, Debug, Clone, PartialEq, Eq)]
#[derivative(Default)]
#[serde(rename_all = "camelCase")]
pub struct MediaInfo {
pub audio_bitrate: Option<String>,
#[serde(deserialize_with = "super::from_i64")]
pub audio_channels: i64,
pub audio_codec: Option<String>,
pub audio_bits: Option<String>,
pub audio_sample_rate: Option<String>,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct AudioTags {
pub title: String,
pub artist_title: String,
pub album_title: String,
#[serde(deserialize_with = "super::from_i64")]
pub disc_number: i64,
#[serde(deserialize_with = "super::from_i64")]
pub disc_count: i64,
#[serde(deserialize_with = "super::from_i64")]
pub year: i64,
pub duration: String,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Track {
pub id: i64,
#[serde(deserialize_with = "super::from_i64")]
pub artist_id: i64,
pub foreign_track_id: String,
#[serde(deserialize_with = "super::from_i64")]
pub track_file_id: i64,
#[serde(deserialize_with = "super::from_i64")]
pub album_id: i64,
pub explicit: bool,
pub track_number: String,
pub title: String,
#[serde(deserialize_with = "super::from_i64")]
pub duration: i64,
pub has_file: bool,
pub ratings: Ratings,
}
impl From<LidarrSerdeable> for Serdeable {
fn from(value: LidarrSerdeable) -> Serdeable {
Serdeable::Lidarr(value)
@@ -527,6 +590,9 @@ serde_enum_from!(
Tag(Tag),
Tags(Vec<Tag>),
Tasks(Vec<LidarrTask>),
Track(Track),
Tracks(Vec<Track>),
TrackFiles(Vec<TrackFile>),
Updates(Vec<Update>),
Value(Value),
}