diff --git a/src/ilias.rs b/src/ilias.rs index 4ffb25a..3c758c8 100644 --- a/src/ilias.rs +++ b/src/ilias.rs @@ -10,7 +10,7 @@ use reqwest_cookie_store::CookieStoreMutex; use scraper::{ElementRef, Html, Selector}; use serde_json::json; -use crate::{cli::Opt, queue, util::wrap_html, ILIAS_URL, iliasignore::IliasIgnore}; +use crate::{cli::Opt, iliasignore::IliasIgnore, queue, util::wrap_html, ILIAS_URL}; pub mod course; pub mod exercise; @@ -221,7 +221,7 @@ impl ILIAS { } unreachable!() } - + pub fn is_error_response(html: &Html) -> bool { html.select(&ALERT_DANGER).next().is_some() } @@ -285,7 +285,13 @@ impl ILIAS { } else { None }; - Ok((ILIAS::get_items(&html), main_text, html.select(&LINKS).flat_map(|x| x.value().attr("href").map(|x| x.to_owned())).collect())) + Ok(( + ILIAS::get_items(&html), + main_text, + html.select(&LINKS) + .flat_map(|x| x.value().attr("href").map(|x| x.to_owned())) + .collect(), + )) } pub async fn get_course_content_tree(&self, ref_id: &str, cmd_node: &str) -> Result> { diff --git a/src/iliasignore.rs b/src/iliasignore.rs index eaf5129..1f35516 100644 --- a/src/iliasignore.rs +++ b/src/iliasignore.rs @@ -1,66 +1,67 @@ -use std::{path::{Path, PathBuf, Component}, ffi::OsString}; +use std::{ + ffi::OsString, + path::{Component, Path, PathBuf}, +}; use anyhow::Result; use ignore::gitignore::Gitignore; #[derive(Clone, Debug)] pub struct IliasIgnore { - ignores: Vec + ignores: Vec, } impl IliasIgnore { - pub fn load(mut path: PathBuf) -> Result { - let mut ignores = Vec::new(); - let mut prefix = Vec::new(); - // example scenario: - // path = /KIT/ILIAS/SS 23/Next Generation Internet - // iliasignore in ILIAS/.iliasignore: prefix = SS 23/Next Generation Internet/ - // iliasignore in Next Generation Internet/.iliasignore: prefix = "" - loop { - let (ignore, error) = Gitignore::new(path.join(".iliasignore")); - if let Some(err) = error { - warning!(err); - } - if ignore.len() > 0 { - ignores.push(IgnoreFile { - ignore, - prefix: prefix.iter().fold(OsString::new(), |mut acc, el| { - acc.push(el); - acc.push("/"); - acc - }) - }); - } - if let Some(last) = path.components().last() { - match last { - Component::Normal(name) => prefix.insert(0, name.to_owned()), - _ => break - } - } - path.pop(); - } - Ok(IliasIgnore { - ignores - }) - } + pub fn load(mut path: PathBuf) -> Result { + let mut ignores = Vec::new(); + let mut prefix = Vec::new(); + // example scenario: + // path = /KIT/ILIAS/SS 23/Next Generation Internet + // iliasignore in ILIAS/.iliasignore: prefix = SS 23/Next Generation Internet/ + // iliasignore in Next Generation Internet/.iliasignore: prefix = "" + loop { + let (ignore, error) = Gitignore::new(path.join(".iliasignore")); + if let Some(err) = error { + warning!(err); + } + if ignore.len() > 0 { + ignores.push(IgnoreFile { + ignore, + prefix: prefix.iter().fold(OsString::new(), |mut acc, el| { + acc.push(el); + acc.push("/"); + acc + }), + }); + } + if let Some(last) = path.components().last() { + match last { + Component::Normal(name) => prefix.insert(0, name.to_owned()), + _ => break, + } + } + path.pop(); + } + Ok(IliasIgnore { ignores }) + } - pub fn should_ignore(&self, path: &Path, is_dir: bool) -> bool { - for ignore_file in &self.ignores { - let mut full_path = ignore_file.prefix.clone(); - full_path.push(path.as_os_str()); - let matched = ignore_file.ignore.matched(&full_path, is_dir); - if matched.is_whitelist() { - return false; - } else if matched.is_ignore() { - return true; - } - } - false - } + pub fn should_ignore(&self, path: &Path, is_dir: bool) -> bool { + for ignore_file in &self.ignores { + let mut full_path = ignore_file.prefix.clone(); + full_path.push(path.as_os_str()); + let matched = ignore_file.ignore.matched(&full_path, is_dir); + if matched.is_whitelist() { + return false; + } else if matched.is_ignore() { + return true; + } + } + false + } } #[derive(Clone, Debug)] struct IgnoreFile { - ignore: Gitignore, - prefix: OsString -} \ No newline at end of file + ignore: Gitignore, + prefix: OsString, +}