mirror of
https://framagit.org/veretcle/oolatoocs.git
synced 2025-12-06 14:53:15 +01:00
✨: copy aspect ratio for images & video
This commit is contained in:
114
src/utils.rs
114
src/utils.rs
@@ -1,7 +1,8 @@
|
||||
use atrium_api::{app::bsky::embed::defs::AspectRatioData, types::Object};
|
||||
use html_escape::decode_html_entities;
|
||||
use megalodon::entities::status::Tag;
|
||||
use megalodon::entities::{attachment::MetaSub, status::Tag};
|
||||
use regex::Regex;
|
||||
use std::error::Error;
|
||||
use std::{error::Error, num::NonZeroU64};
|
||||
|
||||
/// Generate 2 contents out of 1 if that content is > 300 chars, None else
|
||||
pub fn generate_multi_tweets(content: &str) -> Option<(String, String)> {
|
||||
@@ -110,10 +111,119 @@ fn strip_html_tags(input: &str) -> String {
|
||||
data
|
||||
}
|
||||
|
||||
pub fn convert_aspect_ratio(m: &Option<MetaSub>) -> Option<Object<AspectRatioData>> {
|
||||
match m {
|
||||
Some(ms) => {
|
||||
if ms.height.is_some_and(|x| x > 0) && ms.width.is_some_and(|x| x > 0) {
|
||||
Some(
|
||||
AspectRatioData {
|
||||
// unwrap is safe here
|
||||
height: NonZeroU64::new(ms.height.unwrap().into()).unwrap(),
|
||||
width: NonZeroU64::new(ms.width.unwrap().into()).unwrap(),
|
||||
}
|
||||
.into(),
|
||||
)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_convert_aspect_ratio() {
|
||||
// test None orig aspect ratio
|
||||
let metasub: Option<MetaSub> = None;
|
||||
|
||||
let result = convert_aspect_ratio(&metasub);
|
||||
|
||||
assert_eq!(result, None);
|
||||
|
||||
// test complet with image
|
||||
let metasub = Some(MetaSub {
|
||||
width: Some(1920),
|
||||
height: Some(1080),
|
||||
size: Some(String::from("1920x1080")),
|
||||
aspect: Some(1.7777777777777777),
|
||||
frame_rate: None,
|
||||
duration: None,
|
||||
bitrate: None,
|
||||
});
|
||||
|
||||
let expected_result = Some(
|
||||
AspectRatioData {
|
||||
height: NonZeroU64::new(1080).unwrap(),
|
||||
width: NonZeroU64::new(1920).unwrap(),
|
||||
}
|
||||
.into(),
|
||||
);
|
||||
|
||||
let result = convert_aspect_ratio(&metasub);
|
||||
|
||||
assert_eq!(result, expected_result);
|
||||
|
||||
// test complete with video
|
||||
let metasub = Some(MetaSub {
|
||||
width: Some(500),
|
||||
height: Some(278),
|
||||
size: None,
|
||||
aspect: None,
|
||||
frame_rate: Some(String::from("10/1")),
|
||||
duration: Some(0.9),
|
||||
bitrate: Some(973191),
|
||||
});
|
||||
|
||||
let expected_result = Some(
|
||||
AspectRatioData {
|
||||
height: NonZeroU64::new(278).unwrap(),
|
||||
width: NonZeroU64::new(500).unwrap(),
|
||||
}
|
||||
.into(),
|
||||
);
|
||||
|
||||
let result = convert_aspect_ratio(&metasub);
|
||||
|
||||
assert_eq!(result, expected_result);
|
||||
|
||||
/* test broken shit
|
||||
* that should never happened but you never know
|
||||
*/
|
||||
// zero width
|
||||
let metasub = Some(MetaSub {
|
||||
width: Some(0),
|
||||
height: Some(278),
|
||||
size: None,
|
||||
aspect: None,
|
||||
frame_rate: Some(String::from("10/1")),
|
||||
duration: Some(0.9),
|
||||
bitrate: Some(973191),
|
||||
});
|
||||
|
||||
let result = convert_aspect_ratio(&metasub);
|
||||
|
||||
assert_eq!(result, None);
|
||||
|
||||
// None height
|
||||
let metasub = Some(MetaSub {
|
||||
width: Some(500),
|
||||
height: None,
|
||||
size: None,
|
||||
aspect: None,
|
||||
frame_rate: Some(String::from("10/1")),
|
||||
duration: Some(0.9),
|
||||
bitrate: Some(973191),
|
||||
});
|
||||
|
||||
let result = convert_aspect_ratio(&metasub);
|
||||
|
||||
assert_eq!(result, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_twitter_count() {
|
||||
let content = "tamerelol?! 🐵";
|
||||
|
||||
Reference in New Issue
Block a user