12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- use std::error::Error;
-
- use e621::{response::E621Post, E621Client};
- use e621_tags::{
- order::{Order, OrderKind},
- post::Post,
- range::Range,
- tags::Tags,
- };
-
- use super::State;
-
- pub(crate) fn get_newer_posts(
- state: &State,
- most_recent_post: i64,
- ) -> Result<Vec<E621Post>, Box<Error>> {
- get_posts(
- &state.e621,
- state
- .tags
- .clone()
- .add_tag(Post::Id(Range::GreaterThan(most_recent_post))),
- |post_id| most_recent_post < post_id,
- )
- }
-
- pub(crate) fn get_earlier_posts(
- state: &State,
- least_recent_post: i64,
- ) -> Result<Vec<E621Post>, Box<Error>> {
- get_posts(
- &state.e621,
- state
- .tags
- .clone()
- .add_tag(Post::Id(Range::LessThan(least_recent_post))),
- |post_id| least_recent_post > post_id,
- )
- }
-
- pub(crate) fn get_newest_posts(state: &State) -> Result<Vec<E621Post>, Box<Error>> {
- get_posts(
- &state.e621,
- state.tags.clone().add_tag(Order::Descending(OrderKind::Id)),
- |_| true,
- )
- }
-
- pub(crate) fn get_post_by_id(state: &State, id: i64) -> Result<Option<E621Post>, Box<Error>> {
- info!("Getting post {}", id);
- let tags = Tags::new()
- .add_tag(Post::Id(Range::Exactly(id)))
- .to_string();
-
- let posts = state.e621.list(tags, 1)?;
-
- Ok(posts.into_iter().next())
- }
-
- fn get_posts(
- e621_client: &E621Client,
- tags: impl ToString,
- compare: impl Fn(i64) -> bool,
- ) -> Result<Vec<E621Post>, Box<Error>> {
- let posts = e621_client.list(tags.to_string(), 50)?;
-
- let posts = posts
- .into_iter()
- .filter(|post| compare(post.id))
- .filter(|post| meets_criteria(&post))
- .collect();
-
- Ok(posts)
- }
-
- pub(crate) fn meets_criteria(post: &E621Post) -> bool {
- let filesize = if post.file_ext == "webm" {
- post.file_size < 20 * 1028 * 1028
- } else {
- post.file_size < 8 * 1028 * 1028
- };
-
- filesize && {
- let tags = post.tags.split(" ").collect::<Vec<_>>();
-
- !tags.contains(&"child") && !tags.contains(&"loli") && !tags.contains(&"cub")
- }
- }
|