Skip to content

Commit 51d3bbe

Browse files
committed
Allow filtering on media type
1 parent 1827a00 commit 51d3bbe

3 files changed

Lines changed: 36 additions & 1 deletion

File tree

mlm_db/src/impls/categories.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::str::FromStr;
2+
13
use crate::{Category, MainCat, MediaType, OldMainCat};
24

35
impl MediaType {
@@ -59,6 +61,29 @@ impl std::fmt::Display for MediaType {
5961
}
6062
}
6163

64+
impl FromStr for MediaType {
65+
type Err = String;
66+
67+
fn from_str(value: &str) -> Result<Self, Self::Err> {
68+
match value.to_lowercase().as_str() {
69+
"audiobook" => Ok(MediaType::Audiobook),
70+
"ebook" => Ok(MediaType::Ebook),
71+
"musicology" => Ok(MediaType::Musicology),
72+
"radio" => Ok(MediaType::Radio),
73+
"manga" => Ok(MediaType::Manga),
74+
"comic book / graphic novel" => Ok(MediaType::ComicBook),
75+
"comic book" => Ok(MediaType::ComicBook),
76+
"comics" => Ok(MediaType::ComicBook),
77+
"graphic novel" => Ok(MediaType::ComicBook),
78+
"periodical_ebook" => Ok(MediaType::PeriodicalEbook),
79+
"periodical ebook" => Ok(MediaType::PeriodicalEbook),
80+
"periodical_audiobook" => Ok(MediaType::PeriodicalAudiobook),
81+
"periodical audiobook" => Ok(MediaType::PeriodicalAudiobook),
82+
_ => Err(format!("Unknown media type: {}", value)),
83+
}
84+
}
85+
}
86+
6287
impl From<OldMainCat> for MediaType {
6388
fn from(value: OldMainCat) -> Self {
6489
match value {

server/src/config.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{collections::BTreeMap, path::PathBuf};
22

33
use mlm_db::{
4-
Flags, Language, OldDbMainCat, Size,
4+
Flags, Language, MediaType, OldDbMainCat, Size,
55
impls::{parse, parse_opt, parse_vec},
66
};
77
use mlm_mam::{
@@ -212,6 +212,9 @@ pub struct TorrentFilter {
212212
#[serde(default)]
213213
pub name: Option<String>,
214214

215+
#[serde(default)]
216+
#[serde(deserialize_with = "parse_vec")]
217+
pub media_type: Vec<MediaType>,
215218
#[serde(default)]
216219
pub categories: Categories,
217220
#[serde(default)]

server/src/config_impl.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ impl Config {
2828

2929
impl TorrentFilter {
3030
pub fn matches(&self, torrent: &MaMTorrent) -> bool {
31+
if !self.media_type.is_empty()
32+
&& MediaType::from_id(torrent.mediatype)
33+
.is_none_or(|media_type| !self.media_type.contains(&media_type))
34+
{
35+
return false;
36+
}
37+
3138
if !self.categories.matches(torrent.category) {
3239
return false;
3340
}

0 commit comments

Comments
 (0)