qbt-clean 0.124.0

Automated rules-based cleaning of qBittorrent torrents.
#[derive(Clone,Debug,PartialEq,Eq,PartialOrd,Ord,clap::ValueEnum)]
pub enum PinReasonKind {
	Activity,
	Category,
	Explicit,
	Seeders,
	SeedTime,
	State,
}

#[derive(Debug,PartialEq,Eq,PartialOrd,Ord)]
pub enum PinReason {
	Activity(std::time::Duration),
	Category(String),
	Explicit,
	Seeders(u64),
	SeedTime(std::time::Duration),
	State(crate::TorrentState),
}

impl PinReason {
	pub fn kind(&self) -> PinReasonKind {
		match self {
			PinReason::Activity(_) => PinReasonKind::Activity,
			PinReason::Category(_) => PinReasonKind::Category,
			PinReason::Explicit => PinReasonKind::Explicit,
			PinReason::Seeders(_) => PinReasonKind::Seeders,
			PinReason::SeedTime(_) => PinReasonKind::SeedTime,
			PinReason::State(_) => PinReasonKind::State,
		}
	}
}

impl std::fmt::Display for PinReason {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		match self {
			PinReason::Activity(d) => write!(f, "last active {}", crate::FmtDuration(*d)),
			PinReason::Category(category) => write!(f, "category {category:?}"),
			PinReason::Explicit => write!(f, "explicilt"),
			PinReason::Seeders(s) => write!(f, "seeders {s}"),
			PinReason::SeedTime(d) => write!(f, "seed time {}", crate::FmtDuration(*d)),
			PinReason::State(s) => write!(f, "state {s:?}"),
		}
	}
}