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