]> Untitled Git - lemmy.git/commitdiff
Fix community description federation (ref #647)
authorFelix Ableitner <me@nutomic.com>
Tue, 16 Jun 2020 11:35:26 +0000 (13:35 +0200)
committerFelix Ableitner <me@nutomic.com>
Tue, 16 Jun 2020 11:35:26 +0000 (13:35 +0200)
Also disable the actor refetch interval in debug builds.

docker/federation/Dockerfile
server/src/apub/community.rs
server/src/apub/fetcher.rs

index d8302ea7adfa1bf167eaecdd92b01c78a19cf628..ec7bf2d22343a16b6249a69f434b12d49ab616a7 100644 (file)
@@ -1,4 +1,4 @@
-FROM ekidd/rust-musl-builder:1.38.0-openssl11
+FROM ekidd/rust-musl-builder:1.42.0-openssl11
 
 USER root
 RUN mkdir /app/dist/documentation/ -p \
index 3752798f2c1ca50c6d2668ba0952249d1c032347..8c8c3b2809379d2b3337b0bdbd8f020400e34f1d 100644 (file)
@@ -76,7 +76,7 @@ impl ToApub for Community {
     if let Some(d) = self.description.to_owned() {
       // TODO: this should be html, also add source field with raw markdown
       //       -> same for post.content and others
-      oprops.set_summary_xsd_string(d)?;
+      oprops.set_content_xsd_string(d)?;
     }
 
     let mut endpoint_props = EndpointProperties::default();
index 05b7492eebdc13399df90b225bca105db4af461c..7f7a3f971751821ee3e6de66ac2120ac92ebdbff 100644 (file)
@@ -38,6 +38,9 @@ use crate::{
   },
   db::user_view::UserView,
 };
+use chrono::NaiveDateTime;
+
+static ACTOR_REFETCH_INTERVAL_SECONDS: i64 = 24 * 60 * 60;
 
 // Fetch nodeinfo metadata from a remote instance.
 fn _fetch_node_info(domain: &str) -> Result<NodeInfo, Error> {
@@ -166,14 +169,7 @@ pub fn get_or_fetch_and_upsert_remote_user(
   match User_::read_from_actor_id(&conn, &apub_id) {
     Ok(u) => {
       // If its older than a day, re-fetch it
-      if !u.local
-        && u
-          .last_refreshed_at
-          // TODO it won't pick up new avatars, summaries etc until a day after.
-          // Both user and community need an "update" action pushed to other servers
-          // to fix this
-          .lt(&(naive_now() - chrono::Duration::days(1)))
-      {
+      if !u.local && should_refetch_actor(u.last_refreshed_at) {
         debug!("Fetching and updating from remote user: {}", apub_id);
         let person = fetch_remote_object::<PersonExt>(&Url::parse(apub_id)?)?;
         let mut uf = UserForm::from_apub(&person, &conn)?;
@@ -193,6 +189,20 @@ pub fn get_or_fetch_and_upsert_remote_user(
   }
 }
 
+/// Determines when a remote actor should be refetched from its instance. In release builds, this is
+/// ACTOR_REFETCH_INTERVAL_SECONDS after the last refetch, in debug builds always.
+///
+/// TODO it won't pick up new avatars, summaries etc until a day after.
+/// Actors need an "update" activity pushed to other servers to fix this.
+fn should_refetch_actor(last_refreshed: NaiveDateTime) -> bool {
+  if cfg!(debug_assertions) {
+    true
+  } else {
+    let update_interval = chrono::Duration::seconds(ACTOR_REFETCH_INTERVAL_SECONDS);
+    last_refreshed.lt(&(naive_now() - update_interval))
+  }
+}
+
 /// Check if a remote community exists, create if not found, if its too old update it.Fetch a community, insert/update it in the database and return the community.
 pub fn get_or_fetch_and_upsert_remote_community(
   apub_id: &str,
@@ -200,12 +210,7 @@ pub fn get_or_fetch_and_upsert_remote_community(
 ) -> Result<Community, Error> {
   match Community::read_from_actor_id(&conn, &apub_id) {
     Ok(c) => {
-      // If its older than a day, re-fetch it
-      if !c.local
-        && c
-          .last_refreshed_at
-          .lt(&(naive_now() - chrono::Duration::days(1)))
-      {
+      if !c.local && should_refetch_actor(c.last_refreshed_at) {
         debug!("Fetching and updating from remote community: {}", apub_id);
         let group = fetch_remote_object::<GroupExt>(&Url::parse(apub_id)?)?;
         let mut cf = CommunityForm::from_apub(&group, conn)?;