feat(api): name attention episodes and seasons
This commit is contained in:
+56
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n SELECT s.id AS \"series_id!: i64\", s.tmdb_id AS \"tmdb_id!: i64\",\n s.title AS \"title!: String\", s.year,\n e.id AS \"episode_id!: i64\",\n se.number AS \"season_number!: i64\", e.number AS \"episode_number!: i64\"\n FROM episodes e\n JOIN seasons se ON se.id = e.season_id\n JOIN series s ON s.id = se.series_id\n JOIN roots root ON root.id = s.root_id\n WHERE root.audience = 'kids'\n AND s.blocked = 0\n AND e.wanted = 1 AND e.state = 'missing' AND e.search_attempts > 0\n AND NOT EXISTS (\n SELECT 1 FROM episode_releases er\n JOIN releases r ON r.id = er.release_id\n WHERE er.episode_id = e.id AND r.verdict IN ('eligible', 'waived')\n )\n ORDER BY se.number, e.number\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"name": "series_id!: i64",
|
||||||
|
"ordinal": 0,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tmdb_id!: i64",
|
||||||
|
"ordinal": 1,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "title!: String",
|
||||||
|
"ordinal": 2,
|
||||||
|
"type_info": "Text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "year",
|
||||||
|
"ordinal": 3,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "episode_id!: i64",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "season_number!: i64",
|
||||||
|
"ordinal": 5,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "episode_number!: i64",
|
||||||
|
"ordinal": 6,
|
||||||
|
"type_info": "Integer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 0
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "29d6fdda533e0552f5da24a8e5180e5935b3550ee2c024e09aef9b76fd47a708"
|
||||||
|
}
|
||||||
+8
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n SELECT s.id AS \"series_id!: i64\", s.tmdb_id AS \"tmdb_id!: i64\",\n s.title AS \"title!: String\", s.year, g.target_id AS \"season_id!: i64\"\n FROM grabs g\n JOIN seasons se ON g.target_kind = 'season' AND se.id = g.target_id\n JOIN series s ON s.id = se.series_id\n WHERE g.state = 'failed'\n GROUP BY s.id, s.tmdb_id, s.title, s.year, se.id\n ",
|
"query": "\n SELECT s.id AS \"series_id!: i64\", s.tmdb_id AS \"tmdb_id!: i64\",\n s.title AS \"title!: String\", s.year,\n g.target_id AS \"season_id!: i64\", se.number AS \"season_number!: i64\"\n FROM grabs g\n JOIN seasons se ON g.target_kind = 'season' AND se.id = g.target_id\n JOIN series s ON s.id = se.series_id\n WHERE g.state = 'failed'\n GROUP BY s.id, s.tmdb_id, s.title, s.year, se.id, se.number\n ",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
@@ -27,6 +27,11 @@
|
|||||||
"name": "season_id!: i64",
|
"name": "season_id!: i64",
|
||||||
"ordinal": 4,
|
"ordinal": 4,
|
||||||
"type_info": "Integer"
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "season_number!: i64",
|
||||||
|
"ordinal": 5,
|
||||||
|
"type_info": "Integer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
@@ -37,8 +42,9 @@
|
|||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "cd09d4c34f0596319fa2ade088ea9009fa24e453f669bcc2357fdcd999b06193"
|
"hash": "7930e2d10b25627dcbf81f60a5ac077c27b647a6f0b411e13105398a2963cd51"
|
||||||
}
|
}
|
||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n SELECT s.id AS \"series_id!: i64\", s.tmdb_id AS \"tmdb_id!: i64\",\n s.title AS \"title!: String\", s.year, e.id AS \"episode_id!: i64\"\n FROM episodes e\n JOIN seasons se ON se.id = e.season_id\n JOIN series s ON s.id = se.series_id\n JOIN roots root ON root.id = s.root_id\n WHERE root.audience = 'kids'\n AND s.blocked = 0\n AND e.wanted = 1 AND e.state = 'missing' AND e.search_attempts > 0\n AND NOT EXISTS (\n SELECT 1 FROM episode_releases er\n JOIN releases r ON r.id = er.release_id\n WHERE er.episode_id = e.id AND r.verdict IN ('eligible', 'waived')\n )\n ORDER BY se.number, e.number\n ",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"name": "series_id!: i64",
|
|
||||||
"ordinal": 0,
|
|
||||||
"type_info": "Integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "tmdb_id!: i64",
|
|
||||||
"ordinal": 1,
|
|
||||||
"type_info": "Integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "title!: String",
|
|
||||||
"ordinal": 2,
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "year",
|
|
||||||
"ordinal": 3,
|
|
||||||
"type_info": "Integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "episode_id!: i64",
|
|
||||||
"ordinal": 4,
|
|
||||||
"type_info": "Integer"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 0
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "a36a611d7c587f1c1880113e334861867891d55dc8bb7fe79b1dc42e36054379"
|
|
||||||
}
|
|
||||||
+56
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n SELECT s.id AS \"series_id!: i64\", s.tmdb_id AS \"tmdb_id!: i64\",\n s.title AS \"title!: String\", s.year,\n g.target_id AS \"episode_id!: i64\",\n se.number AS \"season_number!: i64\", e.number AS \"episode_number!: i64\"\n FROM grabs g\n JOIN episodes e ON g.target_kind = 'episode' AND e.id = g.target_id\n JOIN seasons se ON se.id = e.season_id\n JOIN series s ON s.id = se.series_id\n WHERE g.state = 'failed'\n GROUP BY s.id, s.tmdb_id, s.title, s.year, e.id, se.number, e.number\n HAVING count(DISTINCT g.release_id) >= 2\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"name": "series_id!: i64",
|
||||||
|
"ordinal": 0,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tmdb_id!: i64",
|
||||||
|
"ordinal": 1,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "title!: String",
|
||||||
|
"ordinal": 2,
|
||||||
|
"type_info": "Text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "year",
|
||||||
|
"ordinal": 3,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "episode_id!: i64",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "season_number!: i64",
|
||||||
|
"ordinal": 5,
|
||||||
|
"type_info": "Integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "episode_number!: i64",
|
||||||
|
"ordinal": 6,
|
||||||
|
"type_info": "Integer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 0
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "aaafc2e7577fad8be202f0d27e16e5f88ffa4644999dee42af3e387dd2cf8702"
|
||||||
|
}
|
||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n SELECT s.id AS \"series_id!: i64\", s.tmdb_id AS \"tmdb_id!: i64\",\n s.title AS \"title!: String\", s.year, g.target_id AS \"episode_id!: i64\"\n FROM grabs g\n JOIN episodes e ON g.target_kind = 'episode' AND e.id = g.target_id\n JOIN seasons se ON se.id = e.season_id\n JOIN series s ON s.id = se.series_id\n WHERE g.state = 'failed'\n GROUP BY s.id, s.tmdb_id, s.title, s.year, e.id\n HAVING count(DISTINCT g.release_id) >= 2\n ",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"name": "series_id!: i64",
|
|
||||||
"ordinal": 0,
|
|
||||||
"type_info": "Integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "tmdb_id!: i64",
|
|
||||||
"ordinal": 1,
|
|
||||||
"type_info": "Integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "title!: String",
|
|
||||||
"ordinal": 2,
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "year",
|
|
||||||
"ordinal": 3,
|
|
||||||
"type_info": "Integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "episode_id!: i64",
|
|
||||||
"ordinal": 4,
|
|
||||||
"type_info": "Integer"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 0
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "b4b58a625ce7b57ba423d39296cb310c6b90c3feb283885b3573ee7666b1725b"
|
|
||||||
}
|
|
||||||
@@ -100,6 +100,22 @@ pub struct AttentionQueues {
|
|||||||
pub tv_needs_decision: Vec<SeriesAttention>,
|
pub tv_needs_decision: Vec<SeriesAttention>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// An episode that put its series in a TV attention queue, named for the
|
||||||
|
/// operator (`SxxEyy` comes from season and episode numbers, #140).
|
||||||
|
#[derive(Debug, Clone, Serialize, ToSchema)]
|
||||||
|
pub struct QueuedEpisode {
|
||||||
|
pub id: i64,
|
||||||
|
pub season_number: i64,
|
||||||
|
pub episode_number: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A season whose failed pack put its series in a TV attention queue.
|
||||||
|
#[derive(Debug, Clone, Serialize, ToSchema)]
|
||||||
|
pub struct QueuedSeason {
|
||||||
|
pub id: i64,
|
||||||
|
pub number: i64,
|
||||||
|
}
|
||||||
|
|
||||||
/// A series in a TV attention queue, with what put it there. One row per
|
/// A series in a TV attention queue, with what put it there. One row per
|
||||||
/// series — the notification rolls up the same way (§9.5).
|
/// series — the notification rolls up the same way (§9.5).
|
||||||
#[derive(Debug, Clone, Serialize, ToSchema)]
|
#[derive(Debug, Clone, Serialize, ToSchema)]
|
||||||
@@ -109,9 +125,9 @@ pub struct SeriesAttention {
|
|||||||
pub title: String,
|
pub title: String,
|
||||||
pub year: Option<i64>,
|
pub year: Option<i64>,
|
||||||
/// Episodes that put the series in this queue.
|
/// Episodes that put the series in this queue.
|
||||||
pub episodes: Vec<i64>,
|
pub episodes: Vec<QueuedEpisode>,
|
||||||
/// Seasons whose pack grab failed and fell back to per-episode grabbing.
|
/// Seasons whose pack grab failed and fell back to per-episode grabbing.
|
||||||
pub seasons: Vec<i64>,
|
pub seasons: Vec<QueuedSeason>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, ToSchema)]
|
#[derive(Debug, Clone, Serialize, ToSchema)]
|
||||||
@@ -667,7 +683,9 @@ async fn tv_attention(
|
|||||||
let no_pt_rows = sqlx::query!(
|
let no_pt_rows = sqlx::query!(
|
||||||
r#"
|
r#"
|
||||||
SELECT s.id AS "series_id!: i64", s.tmdb_id AS "tmdb_id!: i64",
|
SELECT s.id AS "series_id!: i64", s.tmdb_id AS "tmdb_id!: i64",
|
||||||
s.title AS "title!: String", s.year, e.id AS "episode_id!: i64"
|
s.title AS "title!: String", s.year,
|
||||||
|
e.id AS "episode_id!: i64",
|
||||||
|
se.number AS "season_number!: i64", e.number AS "episode_number!: i64"
|
||||||
FROM episodes e
|
FROM episodes e
|
||||||
JOIN seasons se ON se.id = e.season_id
|
JOIN seasons se ON se.id = e.season_id
|
||||||
JOIN series s ON s.id = se.series_id
|
JOIN series s ON s.id = se.series_id
|
||||||
@@ -688,13 +706,15 @@ async fn tv_attention(
|
|||||||
let episode_hard_fails = sqlx::query!(
|
let episode_hard_fails = sqlx::query!(
|
||||||
r#"
|
r#"
|
||||||
SELECT s.id AS "series_id!: i64", s.tmdb_id AS "tmdb_id!: i64",
|
SELECT s.id AS "series_id!: i64", s.tmdb_id AS "tmdb_id!: i64",
|
||||||
s.title AS "title!: String", s.year, g.target_id AS "episode_id!: i64"
|
s.title AS "title!: String", s.year,
|
||||||
|
g.target_id AS "episode_id!: i64",
|
||||||
|
se.number AS "season_number!: i64", e.number AS "episode_number!: i64"
|
||||||
FROM grabs g
|
FROM grabs g
|
||||||
JOIN episodes e ON g.target_kind = 'episode' AND e.id = g.target_id
|
JOIN episodes e ON g.target_kind = 'episode' AND e.id = g.target_id
|
||||||
JOIN seasons se ON se.id = e.season_id
|
JOIN seasons se ON se.id = e.season_id
|
||||||
JOIN series s ON s.id = se.series_id
|
JOIN series s ON s.id = se.series_id
|
||||||
WHERE g.state = 'failed'
|
WHERE g.state = 'failed'
|
||||||
GROUP BY s.id, s.tmdb_id, s.title, s.year, e.id
|
GROUP BY s.id, s.tmdb_id, s.title, s.year, e.id, se.number, e.number
|
||||||
HAVING count(DISTINCT g.release_id) >= 2
|
HAVING count(DISTINCT g.release_id) >= 2
|
||||||
"#
|
"#
|
||||||
)
|
)
|
||||||
@@ -703,12 +723,13 @@ async fn tv_attention(
|
|||||||
let season_pack_fails = sqlx::query!(
|
let season_pack_fails = sqlx::query!(
|
||||||
r#"
|
r#"
|
||||||
SELECT s.id AS "series_id!: i64", s.tmdb_id AS "tmdb_id!: i64",
|
SELECT s.id AS "series_id!: i64", s.tmdb_id AS "tmdb_id!: i64",
|
||||||
s.title AS "title!: String", s.year, g.target_id AS "season_id!: i64"
|
s.title AS "title!: String", s.year,
|
||||||
|
g.target_id AS "season_id!: i64", se.number AS "season_number!: i64"
|
||||||
FROM grabs g
|
FROM grabs g
|
||||||
JOIN seasons se ON g.target_kind = 'season' AND se.id = g.target_id
|
JOIN seasons se ON g.target_kind = 'season' AND se.id = g.target_id
|
||||||
JOIN series s ON s.id = se.series_id
|
JOIN series s ON s.id = se.series_id
|
||||||
WHERE g.state = 'failed'
|
WHERE g.state = 'failed'
|
||||||
GROUP BY s.id, s.tmdb_id, s.title, s.year, se.id
|
GROUP BY s.id, s.tmdb_id, s.title, s.year, se.id, se.number
|
||||||
"#
|
"#
|
||||||
)
|
)
|
||||||
.fetch_all(database)
|
.fetch_all(database)
|
||||||
@@ -722,7 +743,11 @@ async fn tv_attention(
|
|||||||
row.tmdb_id,
|
row.tmdb_id,
|
||||||
row.title,
|
row.title,
|
||||||
row.year,
|
row.year,
|
||||||
row.episode_id,
|
QueuedEpisode {
|
||||||
|
id: row.episode_id,
|
||||||
|
season_number: row.season_number,
|
||||||
|
episode_number: row.episode_number,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -734,22 +759,30 @@ async fn tv_attention(
|
|||||||
row.tmdb_id,
|
row.tmdb_id,
|
||||||
row.title,
|
row.title,
|
||||||
row.year,
|
row.year,
|
||||||
row.episode_id,
|
QueuedEpisode {
|
||||||
|
id: row.episode_id,
|
||||||
|
season_number: row.season_number,
|
||||||
|
episode_number: row.episode_number,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
for row in season_pack_fails {
|
for row in season_pack_fails {
|
||||||
|
let season = QueuedSeason {
|
||||||
|
id: row.season_id,
|
||||||
|
number: row.season_number,
|
||||||
|
};
|
||||||
match tv_needs_decision
|
match tv_needs_decision
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.find(|entry| entry.series_id == row.series_id)
|
.find(|entry| entry.series_id == row.series_id)
|
||||||
{
|
{
|
||||||
Some(entry) => entry.seasons.push(row.season_id),
|
Some(entry) => entry.seasons.push(season),
|
||||||
None => tv_needs_decision.push(SeriesAttention {
|
None => tv_needs_decision.push(SeriesAttention {
|
||||||
series_id: row.series_id,
|
series_id: row.series_id,
|
||||||
tmdb_id: row.tmdb_id,
|
tmdb_id: row.tmdb_id,
|
||||||
title: row.title,
|
title: row.title,
|
||||||
year: row.year,
|
year: row.year,
|
||||||
episodes: Vec::new(),
|
episodes: Vec::new(),
|
||||||
seasons: vec![row.season_id],
|
seasons: vec![season],
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -765,13 +798,13 @@ fn merge_episode(
|
|||||||
tmdb_id: i64,
|
tmdb_id: i64,
|
||||||
title: String,
|
title: String,
|
||||||
year: Option<i64>,
|
year: Option<i64>,
|
||||||
episode_id: i64,
|
episode: QueuedEpisode,
|
||||||
) {
|
) {
|
||||||
if let Some(entry) = entries
|
if let Some(entry) = entries
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.find(|entry| entry.series_id == series_id)
|
.find(|entry| entry.series_id == series_id)
|
||||||
{
|
{
|
||||||
entry.episodes.push(episode_id);
|
entry.episodes.push(episode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
entries.push(SeriesAttention {
|
entries.push(SeriesAttention {
|
||||||
@@ -779,7 +812,7 @@ fn merge_episode(
|
|||||||
tmdb_id,
|
tmdb_id,
|
||||||
title,
|
title,
|
||||||
year,
|
year,
|
||||||
episodes: vec![episode_id],
|
episodes: vec![episode],
|
||||||
seasons: Vec::new(),
|
seasons: Vec::new(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1350,21 +1383,32 @@ mod tests {
|
|||||||
.json()
|
.json()
|
||||||
.await
|
.await
|
||||||
.expect("queues json");
|
.expect("queues json");
|
||||||
|
let episode_ids: Vec<i64> = sqlx::query_scalar(
|
||||||
|
"SELECT id FROM episodes WHERE season_id = ? ORDER BY number",
|
||||||
|
)
|
||||||
|
.bind(season_id)
|
||||||
|
.fetch_all(pool)
|
||||||
|
.await
|
||||||
|
.expect("episode ids");
|
||||||
|
|
||||||
assert_eq!(queues["tv_no_pt_source"][0]["series_id"], series_id);
|
assert_eq!(queues["tv_no_pt_source"][0]["series_id"], series_id);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
queues["tv_no_pt_source"][0]["episodes"]
|
queues["tv_no_pt_source"][0]["episodes"],
|
||||||
.as_array()
|
serde_json::json!([
|
||||||
.map(Vec::len),
|
{ "id": episode_ids[0], "season_number": 1, "episode_number": 1 },
|
||||||
Some(2)
|
{ "id": episode_ids[1], "season_number": 1, "episode_number": 2 },
|
||||||
|
])
|
||||||
);
|
);
|
||||||
assert_eq!(queues["tv_needs_decision"][0]["series_id"], series_id);
|
assert_eq!(queues["tv_needs_decision"][0]["series_id"], series_id);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
queues["tv_needs_decision"][0]["episodes"],
|
queues["tv_needs_decision"][0]["episodes"],
|
||||||
serde_json::json!([episode_id])
|
serde_json::json!([
|
||||||
|
{ "id": episode_id, "season_number": 1, "episode_number": 3 },
|
||||||
|
])
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
queues["tv_needs_decision"][0]["seasons"],
|
queues["tv_needs_decision"][0]["seasons"],
|
||||||
serde_json::json!([season_id])
|
serde_json::json!([{ "id": season_id, "number": 1 }])
|
||||||
);
|
);
|
||||||
|
|
||||||
// Blocking the series empties its no-PT-source lane.
|
// Blocking the series empties its no-PT-source lane.
|
||||||
|
|||||||
Reference in New Issue
Block a user