fix: Modified the Sonarr DownloadRecord so that the episode_id is optional to prevent crashes for weird downloads
This commit is contained in:
+1
-1
@@ -133,7 +133,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
}
|
||||
} else {
|
||||
let status = response.status();
|
||||
let whitespace_regex = Regex::new(r"\s+").unwrap();
|
||||
let whitespace_regex = Regex::new(r"\s+")?;
|
||||
let response_body = response.text().await.unwrap_or_default();
|
||||
let error_body = whitespace_regex
|
||||
.replace_all(&response_body.replace('\n', " "), " ")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use anyhow::Result;
|
||||
use indoc::formatdoc;
|
||||
use log::{debug, info, warn};
|
||||
use serde_json::{json, Value};
|
||||
use serde_json::{json, Number, Value};
|
||||
use urlencoding::encode;
|
||||
|
||||
use super::{Network, NetworkEvent, NetworkResource};
|
||||
@@ -2321,10 +2321,16 @@ impl Network<'_, '_> {
|
||||
|
||||
fn get_episode_status(has_file: bool, downloads_vec: &[DownloadRecord], episode_id: i64) -> String {
|
||||
if !has_file {
|
||||
if let Some(download) = downloads_vec
|
||||
.iter()
|
||||
.find(|&download| download.episode_id == episode_id)
|
||||
{
|
||||
let default_episode_id = Number::from(-1i64);
|
||||
if let Some(download) = downloads_vec.iter().find(|&download| {
|
||||
download
|
||||
.episode_id
|
||||
.as_ref()
|
||||
.unwrap_or(&default_episode_id)
|
||||
.as_i64()
|
||||
.unwrap()
|
||||
== episode_id
|
||||
}) {
|
||||
if download.status == DownloadStatus::Downloading {
|
||||
return "Downloading".to_owned();
|
||||
}
|
||||
|
||||
@@ -5438,7 +5438,7 @@ mod test {
|
||||
#[test]
|
||||
fn test_get_episode_status_missing() {
|
||||
let download_record = DownloadRecord {
|
||||
episode_id: 1,
|
||||
episode_id: Some(Number::from(1i64)),
|
||||
..DownloadRecord::default()
|
||||
};
|
||||
|
||||
@@ -5450,13 +5450,25 @@ mod test {
|
||||
assert_str_eq!(get_episode_status(false, &[download_record], 1), "Missing");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_episode_status_missing_if_episode_id_is_missing() {
|
||||
let download_record = DownloadRecord::default();
|
||||
|
||||
assert_str_eq!(
|
||||
get_episode_status(false, &[download_record.clone()], 0),
|
||||
"Missing"
|
||||
);
|
||||
|
||||
assert_str_eq!(get_episode_status(false, &[download_record], 1), "Missing");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_episode_status_downloading() {
|
||||
assert_str_eq!(
|
||||
get_episode_status(
|
||||
false,
|
||||
&[DownloadRecord {
|
||||
episode_id: 1,
|
||||
episode_id: Some(Number::from(1i64)),
|
||||
status: DownloadStatus::Downloading,
|
||||
..DownloadRecord::default()
|
||||
}],
|
||||
@@ -5472,7 +5484,7 @@ mod test {
|
||||
get_episode_status(
|
||||
false,
|
||||
&[DownloadRecord {
|
||||
episode_id: 1,
|
||||
episode_id: Some(Number::from(1i64)),
|
||||
status: DownloadStatus::Completed,
|
||||
..DownloadRecord::default()
|
||||
}],
|
||||
@@ -5523,7 +5535,7 @@ mod test {
|
||||
title: "Test Download Title".to_owned(),
|
||||
status: DownloadStatus::Downloading,
|
||||
id: 1,
|
||||
episode_id: 1,
|
||||
episode_id: Some(Number::from(1i64)),
|
||||
size: 3543348019f64,
|
||||
sizeleft: 1771674009f64,
|
||||
output_path: Some(HorizontallyScrollableText::from(
|
||||
|
||||
Reference in New Issue
Block a user