mirror of
https://github.com/SinTan1729/movie-rename.git
synced 2025-04-19 10:20:00 -05:00
96 lines
2.8 KiB
Rust
96 lines
2.8 KiB
Rust
use std::fmt;
|
|
use tmdb::model::*;
|
|
|
|
// Struct for movie entries
|
|
pub struct MovieEntry {
|
|
pub title: String,
|
|
pub id: u64,
|
|
pub director: String,
|
|
pub year: String,
|
|
pub language: String,
|
|
}
|
|
|
|
impl MovieEntry {
|
|
// Create movie entry from results
|
|
pub fn from(movie: SearchMovie) -> MovieEntry {
|
|
MovieEntry {
|
|
title: movie.title,
|
|
id: movie.id,
|
|
director: String::from("N/A"),
|
|
year: String::from(movie.release_date.split('-').next().unwrap_or("N/A")),
|
|
language: get_long_lang(movie.original_language.as_str()),
|
|
}
|
|
}
|
|
|
|
// Generate desired filename from movie entry
|
|
pub fn rename_format(&self, mut format: String) -> String {
|
|
format = format.replace("{title}", self.title.as_str());
|
|
if self.year.as_str() != "N/A" {
|
|
format = format.replace("{year}", self.year.as_str());
|
|
} else {
|
|
format = format.replace("{year}", "");
|
|
}
|
|
if self.director.as_str() != "N/A" {
|
|
format = format.replace("{director}", self.director.as_str());
|
|
} else {
|
|
format = format.replace("{director}", "");
|
|
}
|
|
format
|
|
}
|
|
}
|
|
|
|
// Implement display trait for movie entries
|
|
impl fmt::Display for MovieEntry {
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
let mut buffer = String::new();
|
|
buffer.push_str(&format!("{} ", self.title));
|
|
buffer.push_str(&format!("({}), ", self.year));
|
|
buffer.push_str(&format!("Language: {}, ", self.language));
|
|
buffer.push_str(&format!("Directed by: {}, ", self.director));
|
|
buffer.push_str(&format!("TMDb ID: {}", self.id));
|
|
// buffer.push_str(&format!("Synopsis: {}", self.overview));
|
|
write!(f, "{}", buffer)
|
|
}
|
|
}
|
|
|
|
pub struct Language {
|
|
pub short: String,
|
|
pub long: String,
|
|
}
|
|
|
|
impl Language {
|
|
// Generate a vector of Language entries of all supported languages
|
|
pub fn generate_list() -> Vec<Language> {
|
|
let mut list = Vec::new();
|
|
for lang in ["en", "hi", "bn", "fr", "ja", "de", "sp", "none"] {
|
|
list.push(Language {
|
|
short: lang.to_string(),
|
|
long: get_long_lang(lang),
|
|
});
|
|
}
|
|
list
|
|
}
|
|
}
|
|
|
|
// Implement display trait for Language
|
|
impl fmt::Display for Language {
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
write!(f, "{}", self.long)
|
|
}
|
|
}
|
|
|
|
// Get long name of a language
|
|
fn get_long_lang(short: &str) -> String {
|
|
let long = match short {
|
|
"en" => "English",
|
|
"hi" => "Hindi",
|
|
"bn" => "Bengali",
|
|
"fr" => "French",
|
|
"ja" => "Japanese",
|
|
"de" => "German",
|
|
"sp" => "Spanish",
|
|
"none" => "None",
|
|
other => other,
|
|
};
|
|
long.to_string()
|
|
}
|