mtracker 0.5.0

cli movie tracker - keep track of watched movies and series
Documentation
use colored::Colorize;

use crate::media;

pub struct ListOptions {
    pub note: bool,
    pub tags: bool,
    pub max_rating: u8,
}

impl media::Media {
    pub fn as_line(&self, options: &ListOptions) -> String {
        let mut result = String::new();

        if options.max_rating > 0 {
            result += &format!("{} ", &self.rating_string(options.max_rating));
        };

        if self.on_watchlist() {
            result += &"WL: ".bold().to_string();
        }

        result += &self.name;

        if let Some(year) = self.year {
            result += &format!(" ({year})").dimmed().to_string();
        }

        if options.tags && !self.tags.is_empty() {
            result += &format!(" [{}]", self.tags.join(", "));
        }

        if options.note && !&self.note.is_empty() {
            result += &format!(": {}", self.note);
        }

        result
    }

    fn rating_string(&self, max_rating: u8) -> String {
        if let Some(r) = self.rating {
            let mut result = String::new();
            for i in 0..max_rating {
                result += if r > i { "+" } else { "-" };
            }
            result.replace('+', &"+".bold().to_string())
        } else {
            let mr: usize = max_rating.into();
            format!("{:?<mr$}", "").dimmed().to_string()
        }
    }
}