Implement AsObject07 for PostUpdate
This commit is contained in:
		
							parent
							
								
									e5a2850105
								
							
						
					
					
						commit
						8f976be998
					
				| @ -1432,6 +1432,78 @@ impl AsObject<User, Update, &DbConn> for PostUpdate { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl AsObject07<User, Update07, &DbConn> for PostUpdate { | ||||
|     type Error = Error; | ||||
|     type Output = (); | ||||
| 
 | ||||
|     fn activity07(self, conn: &DbConn, actor: User, _id: &str) -> Result<()> { | ||||
|         let mut post = | ||||
|             Post::from_id(conn, &self.ap_url, None, CONFIG.proxy()).map_err(|(_, e)| e)?; | ||||
| 
 | ||||
|         if !post.is_author(conn, actor.id)? { | ||||
|             // TODO: maybe the author was added in the meantime
 | ||||
|             return Err(Error::Unauthorized); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(title) = self.title { | ||||
|             post.slug = Post::slug(&title).to_string(); | ||||
|             post.title = title; | ||||
|         } | ||||
| 
 | ||||
|         if let Some(content) = self.content { | ||||
|             post.content = SafeString::new(&content); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(subtitle) = self.subtitle { | ||||
|             post.subtitle = subtitle; | ||||
|         } | ||||
| 
 | ||||
|         post.cover_id = self.cover; | ||||
| 
 | ||||
|         if let Some(source) = self.source { | ||||
|             post.source = source; | ||||
|         } | ||||
| 
 | ||||
|         if let Some(license) = self.license { | ||||
|             post.license = license; | ||||
|         } | ||||
| 
 | ||||
|         let mut txt_hashtags = md_to_html(&post.source, None, false, None) | ||||
|             .2 | ||||
|             .into_iter() | ||||
|             .collect::<HashSet<_>>(); | ||||
|         if let Some(serde_json::Value::Array(mention_tags)) = self.tags { | ||||
|             let mut mentions = vec![]; | ||||
|             let mut tags = vec![]; | ||||
|             let mut hashtags = vec![]; | ||||
|             for tag in mention_tags { | ||||
|                 serde_json::from_value::<link::Mention>(tag.clone()) | ||||
|                     .map(|m| mentions.push(m)) | ||||
|                     .ok(); | ||||
| 
 | ||||
|                 serde_json::from_value::<Hashtag>(tag.clone()) | ||||
|                     .map_err(Error::from) | ||||
|                     .and_then(|t| { | ||||
|                         let tag_name = t.name_string()?; | ||||
|                         if txt_hashtags.remove(&tag_name) { | ||||
|                             hashtags.push(t); | ||||
|                         } else { | ||||
|                             tags.push(t); | ||||
|                         } | ||||
|                         Ok(()) | ||||
|                     }) | ||||
|                     .ok(); | ||||
|             } | ||||
|             post.update_mentions(conn, mentions)?; | ||||
|             post.update_tags(conn, tags)?; | ||||
|             post.update_hashtags(conn, hashtags)?; | ||||
|         } | ||||
| 
 | ||||
|         post.update(conn)?; | ||||
|         Ok(()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl IntoId for Post { | ||||
|     fn into_id(self) -> Id { | ||||
|         Id::new(self.ap_url) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user