From 9c370b46e1d2b7ec8e1bcec6cc72a3a358315849 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Sat, 27 May 2023 01:17:02 +0900
Subject: [PATCH 1/3] refs #90 Add announcement entity
---
src/entities/announcement.rs | 44 ++++++++++++
src/entities/emoji.rs | 1 +
src/entities/mod.rs | 2 +
src/entities/status.rs | 11 ++-
src/entities/tag.rs | 2 +-
src/friendica/entities/emoji.rs | 1 +
src/friendica/entities/status.rs | 16 ++++-
src/friendica/entities/tag.rs | 6 +-
src/mastodon/entities/announcement.rs | 98 +++++++++++++++++++++++++++
src/mastodon/entities/emoji.rs | 3 +
src/mastodon/entities/mod.rs | 2 +
src/mastodon/entities/status.rs | 16 ++++-
src/mastodon/entities/tag.rs | 6 +-
src/pleroma/entities/emoji.rs | 3 +
src/pleroma/entities/status.rs | 17 ++++-
src/pleroma/entities/tag.rs | 6 +-
16 files changed, 215 insertions(+), 19 deletions(-)
create mode 100644 src/entities/announcement.rs
create mode 100644 src/mastodon/entities/announcement.rs
diff --git a/src/entities/announcement.rs b/src/entities/announcement.rs
new file mode 100644
index 0000000..b72a308
--- /dev/null
+++ b/src/entities/announcement.rs
@@ -0,0 +1,44 @@
+use super::{status, Emoji};
+use chrono::{DateTime, Utc};
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Announcement {
+ pub id: String,
+ pub conent: String,
+ pub starts_at: Option>,
+ pub ends_at: Option>,
+ pub published: bool,
+ pub all_day: bool,
+ pub published_at: DateTime,
+ pub updated_at: DateTime,
+ pub read: Option,
+ pub mentions: Vec,
+ pub statuses: Vec,
+ pub tags: Vec,
+ pub emojis: Vec,
+ pub reactions: Vec,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Account {
+ pub id: String,
+ pub username: String,
+ pub url: String,
+ pub acct: String,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Status {
+ pub id: String,
+ pub url: String,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Reaction {
+ pub name: String,
+ pub count: i64,
+ pub me: Option,
+ pub url: Option,
+ pub static_url: Option,
+}
diff --git a/src/entities/emoji.rs b/src/entities/emoji.rs
index 2aea013..36896f6 100644
--- a/src/entities/emoji.rs
+++ b/src/entities/emoji.rs
@@ -6,4 +6,5 @@ pub struct Emoji {
pub static_url: String,
pub url: String,
pub visible_in_picker: bool,
+ pub category: String,
}
diff --git a/src/entities/mod.rs b/src/entities/mod.rs
index 05a1bae..0919383 100644
--- a/src/entities/mod.rs
+++ b/src/entities/mod.rs
@@ -2,6 +2,7 @@
pub mod account;
pub mod activity;
+pub mod announcement;
pub mod application;
pub mod async_attachment;
pub mod attachment;
@@ -39,6 +40,7 @@ pub mod urls;
pub use account::Account;
pub use activity::Activity;
+pub use announcement::Announcement;
pub use application::Application;
pub use async_attachment::AsyncAttachment;
pub use async_attachment::UploadMedia;
diff --git a/src/entities/status.rs b/src/entities/status.rs
index 597f7b1..41a29ed 100644
--- a/src/entities/status.rs
+++ b/src/entities/status.rs
@@ -1,9 +1,8 @@
-use serde::{Deserialize, Serialize};
-
-use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll, Reaction, Tag};
+use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll, Reaction};
use crate::error::{Error, Kind};
use chrono::{DateTime, Utc};
use core::fmt;
+use serde::{Deserialize, Serialize};
use std::str::FromStr;
#[derive(Debug, Clone, Deserialize, Serialize)]
@@ -74,3 +73,9 @@ impl FromStr for StatusVisibility {
}
}
}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Tag {
+ pub name: String,
+ pub url: String,
+}
diff --git a/src/entities/tag.rs b/src/entities/tag.rs
index 12c853d..5f7a95f 100644
--- a/src/entities/tag.rs
+++ b/src/entities/tag.rs
@@ -6,6 +6,6 @@ use super::History;
pub struct Tag {
pub name: String,
pub url: String,
- pub history: Option>,
+ pub history: Vec,
pub following: Option,
}
diff --git a/src/friendica/entities/emoji.rs b/src/friendica/entities/emoji.rs
index 0377441..f238de8 100644
--- a/src/friendica/entities/emoji.rs
+++ b/src/friendica/entities/emoji.rs
@@ -27,6 +27,7 @@ impl Into for Emoji {
static_url: self.static_url,
url: self.url,
visible_in_picker: self.visible_in_picker,
+ category: "".to_string(),
}
}
}
diff --git a/src/friendica/entities/status.rs b/src/friendica/entities/status.rs
index 59ed047..d71bfc4 100644
--- a/src/friendica/entities/status.rs
+++ b/src/friendica/entities/status.rs
@@ -1,7 +1,7 @@
use core::fmt;
use std::str::FromStr;
-use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll, Tag};
+use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll};
use crate::error::{Error, Kind};
use crate::{entities as MegalodonEntities, megalodon};
use chrono::{DateTime, Utc};
@@ -72,6 +72,20 @@ impl FromStr for StatusVisibility {
}
}
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Tag {
+ pub name: String,
+ pub url: String,
+}
+
+impl Into for Tag {
+ fn into(self) -> MegalodonEntities::status::Tag {
+ MegalodonEntities::status::Tag {
+ name: self.name,
+ url: self.url,
+ }
+ }
+}
impl Into for StatusVisibility {
fn into(self) -> MegalodonEntities::status::StatusVisibility {
match self {
diff --git a/src/friendica/entities/tag.rs b/src/friendica/entities/tag.rs
index ea15f43..374e73a 100644
--- a/src/friendica/entities/tag.rs
+++ b/src/friendica/entities/tag.rs
@@ -6,7 +6,7 @@ use serde::Deserialize;
pub struct Tag {
name: String,
url: String,
- history: Option>,
+ history: Vec,
following: Option,
}
@@ -15,9 +15,7 @@ impl Into for Tag {
MegalodonEntities::Tag {
name: self.name,
url: self.url,
- history: self
- .history
- .map(|i| i.into_iter().map(|j| j.into()).collect()),
+ history: self.history.into_iter().map(|j| j.into()).collect(),
following: self.following,
}
}
diff --git a/src/mastodon/entities/announcement.rs b/src/mastodon/entities/announcement.rs
new file mode 100644
index 0000000..ea51b14
--- /dev/null
+++ b/src/mastodon/entities/announcement.rs
@@ -0,0 +1,98 @@
+use super::{status, Emoji};
+use crate::entities as MegalodonEntities;
+use chrono::{DateTime, Utc};
+use serde::Deserialize;
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Announcement {
+ id: String,
+ conent: String,
+ starts_at: Option>,
+ ends_at: Option>,
+ published: bool,
+ all_day: bool,
+ published_at: DateTime,
+ updated_at: DateTime,
+ read: Option,
+ mentions: Vec,
+ statuses: Vec,
+ tags: Vec,
+ emojis: Vec,
+ reactions: Vec,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Account {
+ id: String,
+ username: String,
+ url: String,
+ acct: String,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Status {
+ id: String,
+ url: String,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Reaction {
+ name: String,
+ count: i64,
+ me: Option,
+ url: Option,
+ static_url: Option,
+}
+
+impl Into for Announcement {
+ fn into(self) -> MegalodonEntities::Announcement {
+ MegalodonEntities::Announcement {
+ id: self.id,
+ conent: self.conent,
+ starts_at: self.starts_at,
+ ends_at: self.ends_at,
+ published: self.published,
+ all_day: self.all_day,
+ published_at: self.published_at,
+ updated_at: self.updated_at,
+ read: self.read,
+ mentions: self.mentions.into_iter().map(|i| i.into()).collect(),
+ statuses: self.statuses.into_iter().map(|i| i.into()).collect(),
+ tags: self.tags.into_iter().map(|i| i.into()).collect(),
+ emojis: self.emojis.into_iter().map(|i| i.into()).collect(),
+ reactions: self.reactions.into_iter().map(|i| i.into()).collect(),
+ }
+ }
+}
+
+impl Into for Account {
+ fn into(self) -> MegalodonEntities::announcement::Account {
+ MegalodonEntities::announcement::Account {
+ id: self.id,
+ username: self.username,
+ url: self.url,
+ acct: self.acct,
+ }
+ }
+}
+
+impl Into for Status {
+ fn into(self) -> MegalodonEntities::announcement::Status {
+ MegalodonEntities::announcement::Status {
+ id: self.id,
+ url: self.url,
+ }
+ }
+}
+
+impl Into for Reaction {
+ fn into(self) -> MegalodonEntities::announcement::Reaction {
+ MegalodonEntities::announcement::Reaction {
+ name: self.name,
+ count: self.count,
+ me: self.me,
+ url: self.url,
+ static_url: self.static_url,
+ }
+ }
+}
diff --git a/src/mastodon/entities/emoji.rs b/src/mastodon/entities/emoji.rs
index 0377441..d4943e2 100644
--- a/src/mastodon/entities/emoji.rs
+++ b/src/mastodon/entities/emoji.rs
@@ -7,6 +7,7 @@ pub struct Emoji {
static_url: String,
url: String,
visible_in_picker: bool,
+ category: String,
}
impl From for Emoji {
@@ -16,6 +17,7 @@ impl From for Emoji {
static_url: item.static_url,
url: item.url,
visible_in_picker: item.visible_in_picker,
+ category: item.category,
}
}
}
@@ -27,6 +29,7 @@ impl Into for Emoji {
static_url: self.static_url,
url: self.url,
visible_in_picker: self.visible_in_picker,
+ category: self.category,
}
}
}
diff --git a/src/mastodon/entities/mod.rs b/src/mastodon/entities/mod.rs
index ec2f92f..9707a70 100644
--- a/src/mastodon/entities/mod.rs
+++ b/src/mastodon/entities/mod.rs
@@ -1,5 +1,6 @@
pub mod account;
pub mod activity;
+pub mod announcement;
pub mod application;
pub mod attachment;
pub mod card;
@@ -34,6 +35,7 @@ pub mod urls;
pub use account::Account;
pub use activity::Activity;
+pub use announcement::Announcement;
pub use application::Application;
pub use attachment::Attachment;
pub use card::Card;
diff --git a/src/mastodon/entities/status.rs b/src/mastodon/entities/status.rs
index 8100268..68cecbc 100644
--- a/src/mastodon/entities/status.rs
+++ b/src/mastodon/entities/status.rs
@@ -1,7 +1,7 @@
use core::fmt;
use std::str::FromStr;
-use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll, Tag};
+use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll};
use crate::error::{Error, Kind};
use crate::{entities as MegalodonEntities, megalodon};
use chrono::{DateTime, Utc};
@@ -74,6 +74,20 @@ impl FromStr for StatusVisibility {
}
}
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Tag {
+ pub name: String,
+ pub url: String,
+}
+impl Into for Tag {
+ fn into(self) -> MegalodonEntities::status::Tag {
+ MegalodonEntities::status::Tag {
+ name: self.name,
+ url: self.url,
+ }
+ }
+}
+
impl Into for StatusVisibility {
fn into(self) -> MegalodonEntities::status::StatusVisibility {
match self {
diff --git a/src/mastodon/entities/tag.rs b/src/mastodon/entities/tag.rs
index ea15f43..374e73a 100644
--- a/src/mastodon/entities/tag.rs
+++ b/src/mastodon/entities/tag.rs
@@ -6,7 +6,7 @@ use serde::Deserialize;
pub struct Tag {
name: String,
url: String,
- history: Option>,
+ history: Vec,
following: Option,
}
@@ -15,9 +15,7 @@ impl Into for Tag {
MegalodonEntities::Tag {
name: self.name,
url: self.url,
- history: self
- .history
- .map(|i| i.into_iter().map(|j| j.into()).collect()),
+ history: self.history.into_iter().map(|j| j.into()).collect(),
following: self.following,
}
}
diff --git a/src/pleroma/entities/emoji.rs b/src/pleroma/entities/emoji.rs
index 0377441..d4943e2 100644
--- a/src/pleroma/entities/emoji.rs
+++ b/src/pleroma/entities/emoji.rs
@@ -7,6 +7,7 @@ pub struct Emoji {
static_url: String,
url: String,
visible_in_picker: bool,
+ category: String,
}
impl From for Emoji {
@@ -16,6 +17,7 @@ impl From for Emoji {
static_url: item.static_url,
url: item.url,
visible_in_picker: item.visible_in_picker,
+ category: item.category,
}
}
}
@@ -27,6 +29,7 @@ impl Into for Emoji {
static_url: self.static_url,
url: self.url,
visible_in_picker: self.visible_in_picker,
+ category: self.category,
}
}
}
diff --git a/src/pleroma/entities/status.rs b/src/pleroma/entities/status.rs
index 795ec65..fe812f9 100644
--- a/src/pleroma/entities/status.rs
+++ b/src/pleroma/entities/status.rs
@@ -1,4 +1,4 @@
-use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll, Reaction, Tag};
+use super::{Account, Application, Attachment, Card, Emoji, Mention, Poll, Reaction};
use crate::{entities as MegalodonEntities, megalodon};
use chrono::{DateTime, Utc};
use serde::{de, Deserialize, Serialize};
@@ -76,6 +76,21 @@ impl Into for StatusVisibility {
}
}
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct Tag {
+ pub name: String,
+ pub url: String,
+}
+
+impl Into for Tag {
+ fn into(self) -> MegalodonEntities::status::Tag {
+ MegalodonEntities::status::Tag {
+ name: self.name,
+ url: self.url,
+ }
+ }
+}
+
impl Into for Status {
fn into(self) -> MegalodonEntities::Status {
let mut reblog_status: Option> = None;
diff --git a/src/pleroma/entities/tag.rs b/src/pleroma/entities/tag.rs
index ea15f43..374e73a 100644
--- a/src/pleroma/entities/tag.rs
+++ b/src/pleroma/entities/tag.rs
@@ -6,7 +6,7 @@ use serde::Deserialize;
pub struct Tag {
name: String,
url: String,
- history: Option>,
+ history: Vec,
following: Option,
}
@@ -15,9 +15,7 @@ impl Into for Tag {
MegalodonEntities::Tag {
name: self.name,
url: self.url,
- history: self
- .history
- .map(|i| i.into_iter().map(|j| j.into()).collect()),
+ history: self.history.into_iter().map(|j| j.into()).collect(),
following: self.following,
}
}
From 3edba5d72a02a4262bd229b2e6d6a085f2f25008 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Mon, 29 May 2023 23:09:40 +0900
Subject: [PATCH 2/3] refs #90 Add announcement endpoints
---
src/friendica/friendica.rs | 46 +++++++++++++
src/mastodon/mastodon.rs | 81 +++++++++++++++++++++++
src/megalodon.rs | 25 +++++++
src/pleroma/entities/announcement.rs | 98 ++++++++++++++++++++++++++++
src/pleroma/entities/mod.rs | 2 +
src/pleroma/pleroma.rs | 63 +++++++++++++++++-
6 files changed, 314 insertions(+), 1 deletion(-)
create mode 100644 src/pleroma/entities/announcement.rs
diff --git a/src/friendica/friendica.rs b/src/friendica/friendica.rs
index 3b94d37..84c9d2f 100644
--- a/src/friendica/friendica.rs
+++ b/src/friendica/friendica.rs
@@ -2582,6 +2582,52 @@ impl megalodon::Megalodon for Friendica {
))
}
+ async fn get_instance_announcements(
+ &self,
+ ) -> Result>, Error> {
+ Ok(Response::>::new(
+ [].to_vec(),
+ 200,
+ "200".to_string(),
+ HeaderMap::new(),
+ ))
+ }
+
+ async fn dismiss_instance_announcement(&self, _id: String) -> Result, Error> {
+ Err(Error::new_own(
+ "Friendica doest not support".to_string(),
+ error::Kind::NoImplementedError,
+ None,
+ None,
+ ))
+ }
+
+ async fn add_reaction_to_announcement(
+ &self,
+ _id: String,
+ _name: String,
+ ) -> Result, Error> {
+ Err(Error::new_own(
+ "Friendica doest not support".to_string(),
+ error::Kind::NoImplementedError,
+ None,
+ None,
+ ))
+ }
+
+ async fn remove_reaction_from_announcement(
+ &self,
+ _id: String,
+ _name: String,
+ ) -> Result, Error> {
+ Err(Error::new_own(
+ "Friendica doest not support".to_string(),
+ error::Kind::NoImplementedError,
+ None,
+ None,
+ ))
+ }
+
async fn create_emoji_reaction(
&self,
_id: String,
diff --git a/src/mastodon/mastodon.rs b/src/mastodon/mastodon.rs
index ac1efd3..7e21e1e 100644
--- a/src/mastodon/mastodon.rs
+++ b/src/mastodon/mastodon.rs
@@ -2870,6 +2870,87 @@ impl megalodon::Megalodon for Mastodon {
))
}
+ async fn get_instance_announcements(
+ &self,
+ ) -> Result>, Error> {
+ let res = self
+ .client
+ .get::>("/api/v1/announcements", None)
+ .await?;
+
+ Ok(Response::>::new(
+ res.json.into_iter().map(|j| j.into()).collect(),
+ res.status,
+ res.status_text,
+ res.header,
+ ))
+ }
+
+ async fn dismiss_instance_announcement(&self, id: String) -> Result, Error> {
+ let params = HashMap::<&str, Value>::new();
+ let res = self
+ .client
+ .post::<()>(
+ format!("/api/v1/announcements/{}/dismiss", id).as_str(),
+ ¶ms,
+ None,
+ )
+ .await?;
+
+ Ok(Response::<()>::new(
+ (),
+ res.status,
+ res.status_text,
+ res.header,
+ ))
+ }
+
+ async fn add_reaction_to_announcement(
+ &self,
+ id: String,
+ name: String,
+ ) -> Result, Error> {
+ let params = HashMap::<&str, Value>::new();
+ let res = self
+ .client
+ .put::<()>(
+ format!("/api/v1/announcements/{}/reactions/{}", id, name).as_str(),
+ ¶ms,
+ None,
+ )
+ .await?;
+
+ Ok(Response::<()>::new(
+ (),
+ res.status,
+ res.status_text,
+ res.header,
+ ))
+ }
+
+ async fn remove_reaction_from_announcement(
+ &self,
+ id: String,
+ name: String,
+ ) -> Result, Error> {
+ let params = HashMap::<&str, Value>::new();
+ let res = self
+ .client
+ .delete::<()>(
+ format!("/api/v1/announcements/{}/reactions/{}", id, name).as_str(),
+ ¶ms,
+ None,
+ )
+ .await?;
+
+ Ok(Response::<()>::new(
+ (),
+ res.status,
+ res.status_text,
+ res.header,
+ ))
+ }
+
async fn create_emoji_reaction(
&self,
_id: String,
diff --git a/src/megalodon.rs b/src/megalodon.rs
index 638f488..759ba69 100644
--- a/src/megalodon.rs
+++ b/src/megalodon.rs
@@ -670,6 +670,31 @@ pub trait Megalodon {
/// Returns custom emojis that are available on the server.
async fn get_instance_custom_emojis(&self) -> Result>, Error>;
+ // ======================================
+ // instance/announcements
+ // ======================================
+ /// Get all currently active announcements set by admins.
+ async fn get_instance_announcements(
+ &self,
+ ) -> Result>, Error>;
+
+ /// Dismiss an announcement
+ async fn dismiss_instance_announcement(&self, id: String) -> Result, Error>;
+
+ /// Add a reaction to an announcement.
+ async fn add_reaction_to_announcement(
+ &self,
+ id: String,
+ name: String,
+ ) -> Result, Error>;
+
+ /// Remove a reaction from an announcement.
+ async fn remove_reaction_from_announcement(
+ &self,
+ id: String,
+ name: String,
+ ) -> Result, Error>;
+
// ======================================
// Emoji reactions
// ======================================
diff --git a/src/pleroma/entities/announcement.rs b/src/pleroma/entities/announcement.rs
new file mode 100644
index 0000000..ea51b14
--- /dev/null
+++ b/src/pleroma/entities/announcement.rs
@@ -0,0 +1,98 @@
+use super::{status, Emoji};
+use crate::entities as MegalodonEntities;
+use chrono::{DateTime, Utc};
+use serde::Deserialize;
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Announcement {
+ id: String,
+ conent: String,
+ starts_at: Option>,
+ ends_at: Option>,
+ published: bool,
+ all_day: bool,
+ published_at: DateTime,
+ updated_at: DateTime,
+ read: Option,
+ mentions: Vec,
+ statuses: Vec,
+ tags: Vec,
+ emojis: Vec,
+ reactions: Vec,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Account {
+ id: String,
+ username: String,
+ url: String,
+ acct: String,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Status {
+ id: String,
+ url: String,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Reaction {
+ name: String,
+ count: i64,
+ me: Option,
+ url: Option,
+ static_url: Option,
+}
+
+impl Into for Announcement {
+ fn into(self) -> MegalodonEntities::Announcement {
+ MegalodonEntities::Announcement {
+ id: self.id,
+ conent: self.conent,
+ starts_at: self.starts_at,
+ ends_at: self.ends_at,
+ published: self.published,
+ all_day: self.all_day,
+ published_at: self.published_at,
+ updated_at: self.updated_at,
+ read: self.read,
+ mentions: self.mentions.into_iter().map(|i| i.into()).collect(),
+ statuses: self.statuses.into_iter().map(|i| i.into()).collect(),
+ tags: self.tags.into_iter().map(|i| i.into()).collect(),
+ emojis: self.emojis.into_iter().map(|i| i.into()).collect(),
+ reactions: self.reactions.into_iter().map(|i| i.into()).collect(),
+ }
+ }
+}
+
+impl Into for Account {
+ fn into(self) -> MegalodonEntities::announcement::Account {
+ MegalodonEntities::announcement::Account {
+ id: self.id,
+ username: self.username,
+ url: self.url,
+ acct: self.acct,
+ }
+ }
+}
+
+impl Into for Status {
+ fn into(self) -> MegalodonEntities::announcement::Status {
+ MegalodonEntities::announcement::Status {
+ id: self.id,
+ url: self.url,
+ }
+ }
+}
+
+impl Into for Reaction {
+ fn into(self) -> MegalodonEntities::announcement::Reaction {
+ MegalodonEntities::announcement::Reaction {
+ name: self.name,
+ count: self.count,
+ me: self.me,
+ url: self.url,
+ static_url: self.static_url,
+ }
+ }
+}
diff --git a/src/pleroma/entities/mod.rs b/src/pleroma/entities/mod.rs
index d39f4be..77fc6c3 100644
--- a/src/pleroma/entities/mod.rs
+++ b/src/pleroma/entities/mod.rs
@@ -1,5 +1,6 @@
pub mod account;
pub mod activity;
+pub mod announcement;
pub mod application;
pub mod attachment;
pub mod card;
@@ -35,6 +36,7 @@ pub mod urls;
pub use account::Account;
pub use activity::Activity;
+pub use announcement::Announcement;
pub use application::Application;
pub use attachment::Attachment;
pub use card::Card;
diff --git a/src/pleroma/pleroma.rs b/src/pleroma/pleroma.rs
index 06e40fd..54dd1c1 100644
--- a/src/pleroma/pleroma.rs
+++ b/src/pleroma/pleroma.rs
@@ -3,11 +3,11 @@ use super::entities;
use super::oauth;
use super::web_socket::WebSocket;
use crate::megalodon::FollowRequestOutput;
-use crate::Streaming;
use crate::{
default, entities as MegalodonEntities, error::Error, megalodon, oauth as MegalodonOAuth,
response::Response,
};
+use crate::{error, Streaming};
use async_trait::async_trait;
use chrono::{DateTime, Utc};
use oauth2::basic::BasicClient;
@@ -2824,6 +2824,67 @@ impl megalodon::Megalodon for Pleroma {
))
}
+ async fn get_instance_announcements(
+ &self,
+ ) -> Result>, Error> {
+ let res = self
+ .client
+ .get::>("/api/v1/announcements", None)
+ .await?;
+
+ Ok(Response::>::new(
+ res.json.into_iter().map(|j| j.into()).collect(),
+ res.status,
+ res.status_text,
+ res.header,
+ ))
+ }
+
+ async fn dismiss_instance_announcement(&self, id: String) -> Result, Error> {
+ let params = HashMap::<&str, Value>::new();
+ let res = self
+ .client
+ .post::<()>(
+ format!("/api/v1/announcements/{}/dismiss", id).as_str(),
+ ¶ms,
+ None,
+ )
+ .await?;
+
+ Ok(Response::<()>::new(
+ (),
+ res.status,
+ res.status_text,
+ res.header,
+ ))
+ }
+
+ async fn add_reaction_to_announcement(
+ &self,
+ _id: String,
+ _name: String,
+ ) -> Result, Error> {
+ Err(Error::new_own(
+ "Pleroma doest not support".to_string(),
+ error::Kind::NoImplementedError,
+ None,
+ None,
+ ))
+ }
+
+ async fn remove_reaction_from_announcement(
+ &self,
+ _id: String,
+ _name: String,
+ ) -> Result, Error> {
+ Err(Error::new_own(
+ "Pleroma doest not support".to_string(),
+ error::Kind::NoImplementedError,
+ None,
+ None,
+ ))
+ }
+
async fn create_emoji_reaction(
&self,
id: String,
From a86680ef97a868e27b38fdf06e33cfdf6ada6b59 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Mon, 29 May 2023 23:12:34 +0900
Subject: [PATCH 3/3] refs #90 Fix pleroma announcement entity
---
src/pleroma/entities/announcement.rs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/pleroma/entities/announcement.rs b/src/pleroma/entities/announcement.rs
index ea51b14..ebfc7ed 100644
--- a/src/pleroma/entities/announcement.rs
+++ b/src/pleroma/entities/announcement.rs
@@ -13,7 +13,6 @@ pub struct Announcement {
all_day: bool,
published_at: DateTime,
updated_at: DateTime,
- read: Option,
mentions: Vec,
statuses: Vec,
tags: Vec,
@@ -55,7 +54,7 @@ impl Into for Announcement {
all_day: self.all_day,
published_at: self.published_at,
updated_at: self.updated_at,
- read: self.read,
+ read: None,
mentions: self.mentions.into_iter().map(|i| i.into()).collect(),
statuses: self.statuses.into_iter().map(|i| i.into()).collect(),
tags: self.tags.into_iter().map(|i| i.into()).collect(),