From 274d6f2b5a1c540aaf047eb3eb9f0183efd22334 Mon Sep 17 00:00:00 2001 From: Paul <paulmakles@gmail.com> Date: Sun, 9 May 2021 19:30:55 +0100 Subject: [PATCH] Update January definitions. (special embeds) --- set_version.sh | 2 +- src/database/entities/january.rs | 80 ++++++++++++++++++++++++++++---- src/version.rs | 2 +- 3 files changed, 74 insertions(+), 10 deletions(-) diff --git a/set_version.sh b/set_version.sh index f3e28f9..ef9bef8 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.4.1-alpha.9 +export version=0.4.1-alpha.10 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/database/entities/january.rs b/src/database/entities/january.rs index 043561a..c530b75 100644 --- a/src/database/entities/january.rs +++ b/src/database/entities/january.rs @@ -3,30 +3,77 @@ use linkify::{LinkFinder, LinkKind}; use crate::util::{result::{Error, Result}, variables::JANUARY_URL}; #[derive(Serialize, Deserialize, Debug, Clone)] -pub enum MediaSize { +pub enum ImageSize { Large, Preview, } #[derive(Serialize, Deserialize, Debug, Clone)] -pub struct Media { +pub struct Image { pub url: String, pub width: isize, pub height: isize, - pub size: MediaSize, + pub size: ImageSize, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Video { + pub url: String, + pub width: isize, + pub height: isize, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub enum TwitchType { + Channel, + Video, + Clip, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub enum BandcampType { + Album, + Track +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +#[serde(tag = "type")] +pub enum Special { + None, + YouTube { + id: String, + }, + Twitch { + content_type: TwitchType, + id: String, + }, + Spotify { + content_type: String, + id: String, + }, + Soundcloud, + Bandcamp { + content_type: BandcampType, + id: String + } } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Metadata { - #[serde(skip_serializing_if = "Option::is_none")] url: Option<String>, + special: Option<Special>, + #[serde(skip_serializing_if = "Option::is_none")] title: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] description: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] - image: Option<Media>, - + image: Option<Image>, + #[serde(skip_serializing_if = "Option::is_none")] + video: Option<Video>, + + // #[serde(skip_serializing_if = "Option::is_none")] + // opengraph_type: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] site_name: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] @@ -39,13 +86,30 @@ pub struct Metadata { #[serde(tag = "type")] pub enum Embed { Website(Metadata), - Image(Media), + Image(Image), None, } impl Embed { pub async fn generate(content: String) -> Result<Vec<Embed>> { - // FIXME: allow multiple links + let content = content + .split("\n") + .map(|v| { + // Ignore quoted lines. + if let Some(c) = v.chars().next() { + if c == '>' { + return "" + } + } + + v + }) + // This will also remove newlines, but + // that isn't important here. + .collect::<String>(); + + // ! FIXME: allow multiple links + // ! FIXME: prevent generation if link is surrounded with < > let mut finder = LinkFinder::new(); finder.kinds(&[LinkKind::Url]); let links: Vec<_> = finder.links(&content).collect(); diff --git a/src/version.rs b/src/version.rs index 5716a7d..0efb35a 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.4.1-alpha.9"; +pub const VERSION: &str = "0.4.1-alpha.10"; -- GitLab