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 { | impl IntoId for Post { | ||||||
|     fn into_id(self) -> Id { |     fn into_id(self) -> Id { | ||||||
|         Id::new(self.ap_url) |         Id::new(self.ap_url) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user