From 5062a7541a3c8263aeb3f5ab32978d48d27e75bc Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 28 Apr 2020 21:23:23 +0200 Subject: Add App::new_post() method Signed-off-by: Matthias Beyer --- src/app.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/app.rs b/src/app.rs index 2368268..9a1e0d3 100644 --- a/src/app.rs +++ b/src/app.rs @@ -3,6 +3,7 @@ use std::collections::BTreeMap; use failure::Error; use crate::types::util::IPFSHash; +use crate::types::util::MimeType; use crate::types::util::IPNSHash; use crate::types::block::Block; use crate::repository::repository::Repository; @@ -39,6 +40,34 @@ impl App { Ok(App { repo, device_name, publishing_key: publishing_key.to_string() }) } + pub async fn new_post(&self, + content: Vec, + mime: MimeType, + reply_to: Option, + comments_will_be_propagated: Option, + comments_propagated_until: Option) + -> Result<(), Error> + { + let content_hash = self.repo.put_raw_bytes(content).await?; + + let payload = Payload::Post { + content_format: mime, + content: content_hash, + reply_to, + comments_will_be_propagated, + comments_propagated_until, + }; + let timestamp = Timestamp::now(); + let content = Content::new(vec![], Some(timestamp), payload); + + let content_hash = self.repo.put_content(content).await?; + + let head = self.repo.put_block(Block::new(protocol_version(), vec![], content_hash)).await?; + let device_name = self.repo.publish(&self.publishing_key, &head).await?; + + Ok(()) + } + } -- cgit v1.2.3