about summary refs log tree commit diff
path: root/kittybox-rs/src
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2023-06-15 17:03:53 +0300
committerVika <vika@fireburn.ru>2023-06-15 17:03:53 +0300
commited7049048cc4d12422c07ddbaa15fbb3662c0260 (patch)
tree7dc37332b8868a7a7f067056026a8d662bc0571d /kittybox-rs/src
parenteca7687439c2b6f804603de75501b6737a82e5a2 (diff)
downloadkittybox-ed7049048cc4d12422c07ddbaa15fbb3662c0260.tar.zst
Add support for the IndieWeb Webring πŸ•ΈπŸ’
Optional at first. Onboarding UI not yet exposed.
Diffstat (limited to 'kittybox-rs/src')
-rw-r--r--kittybox-rs/src/database/mod.rs20
-rw-r--r--kittybox-rs/src/frontend/mod.rs6
-rw-r--r--kittybox-rs/src/frontend/onboarding.rs4
3 files changed, 29 insertions, 1 deletions
diff --git a/kittybox-rs/src/database/mod.rs b/kittybox-rs/src/database/mod.rs
index 2039ac0..db0e360 100644
--- a/kittybox-rs/src/database/mod.rs
+++ b/kittybox-rs/src/database/mod.rs
@@ -48,6 +48,11 @@ pub mod settings {
         fn from(settings: Settings) -> Self {
             settings.site_name
         }
+    }
+    impl From<Settings> for Webring {
+        fn from(settings: Settings) -> Self {
+            settings.webring
+        }
     }*/
 
     /// A trait for various settings that should be contained here.
@@ -96,6 +101,21 @@ pub mod settings {
         }
     }
 
+    /// Participation status in the IndieWeb Webring: https://πŸ•ΈπŸ’.ws/dashboard
+    #[derive(Debug, Default, serde::Deserialize, serde::Serialize, Clone, Copy, PartialEq, Eq)]
+    pub struct Webring(bool);
+    impl private::Sealed for Webring {}
+    impl Setting<'_> for Webring {
+        type Data = bool;
+        const ID: &'static str = "webring";
+
+        fn into_inner(self) -> Self::Data {
+            self.0
+        }
+
+        fn new(data: Self::Data) -> Self {
+            Self(data)
+        }
     }
 }
 
diff --git a/kittybox-rs/src/frontend/mod.rs b/kittybox-rs/src/frontend/mod.rs
index 9d5c164..b90d57c 100644
--- a/kittybox-rs/src/frontend/mod.rs
+++ b/kittybox-rs/src/frontend/mod.rs
@@ -131,10 +131,13 @@ pub async fn homepage<D: Storage>(
             // other requests anyway if it's serious...)
             //
             // btw is it more efficient to fetch these in parallel?
-            let (blogname, channels) = tokio::join!(
+            let (blogname, webring, channels) = tokio::join!(
                 db.get_setting::<crate::database::settings::SiteName>(&path)
                 .map(Result::unwrap_or_default),
 
+                db.get_setting::<crate::database::settings::Webring>(&path)
+                .map(Result::unwrap_or_default),
+
                 db.get_channels(&path).map(|i| i.unwrap_or_default())
             );
             // Render the homepage
@@ -152,6 +155,7 @@ pub async fn homepage<D: Storage>(
                     content: MainPage {
                         feed: &hfeed,
                         card: &hcard,
+                        webring: crate::database::settings::Setting::into_inner(webring)
                     }
                     .to_string(),
                 }
diff --git a/kittybox-rs/src/frontend/onboarding.rs b/kittybox-rs/src/frontend/onboarding.rs
index 88b533b..f797abd 100644
--- a/kittybox-rs/src/frontend/onboarding.rs
+++ b/kittybox-rs/src/frontend/onboarding.rs
@@ -72,6 +72,10 @@ async fn onboard<D: Storage + 'static>(
         .await
         .map_err(FrontendError::from)?;
 
+    db.set_setting::<settings::Webring>(user.me.as_str(), false)
+        .await
+        .map_err(FrontendError::from)?;
+
     let (_, hcard) = {
         let mut hcard = data.user;
         hcard["properties"]["uid"] = serde_json::json!([&user_uid]);