]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
Adding GetUnreadCount to the API. Fixes #1794 (#1842)
[lemmy.git] / crates / websocket / src / lib.rs
1 #[macro_use]
2 extern crate strum_macros;
3
4 use crate::chat_server::ChatServer;
5 use actix::Addr;
6 use background_jobs::QueueHandle;
7 use lemmy_db_queries::DbPool;
8 use lemmy_db_schema::source::secret::Secret;
9 use lemmy_utils::{settings::structs::Settings, LemmyError};
10 use reqwest::Client;
11 use serde::Serialize;
12
13 pub mod chat_server;
14 pub mod handlers;
15 pub mod messages;
16 pub mod routes;
17 pub mod send;
18
19 pub struct LemmyContext {
20   pub pool: DbPool,
21   pub chat_server: Addr<ChatServer>,
22   pub client: Client,
23   pub activity_queue: QueueHandle,
24   pub settings: Settings,
25   pub secret: Secret,
26 }
27
28 impl LemmyContext {
29   pub fn create(
30     pool: DbPool,
31     chat_server: Addr<ChatServer>,
32     client: Client,
33     activity_queue: QueueHandle,
34     settings: Settings,
35     secret: Secret,
36   ) -> LemmyContext {
37     LemmyContext {
38       pool,
39       chat_server,
40       client,
41       activity_queue,
42       settings,
43       secret,
44     }
45   }
46   pub fn pool(&self) -> &DbPool {
47     &self.pool
48   }
49   pub fn chat_server(&self) -> &Addr<ChatServer> {
50     &self.chat_server
51   }
52   pub fn client(&self) -> &Client {
53     &self.client
54   }
55   pub fn activity_queue(&self) -> &QueueHandle {
56     &self.activity_queue
57   }
58   pub fn settings(&self) -> Settings {
59     // TODO hacky solution to be able to hotload the settings.
60     Settings::get()
61   }
62   pub fn secret(&self) -> &Secret {
63     &self.secret
64   }
65 }
66
67 impl Clone for LemmyContext {
68   fn clone(&self) -> Self {
69     LemmyContext {
70       pool: self.pool.clone(),
71       chat_server: self.chat_server.clone(),
72       client: self.client.clone(),
73       activity_queue: self.activity_queue.clone(),
74       settings: self.settings.clone(),
75       secret: self.secret.clone(),
76     }
77   }
78 }
79
80 #[derive(Serialize)]
81 struct WebsocketResponse<T> {
82   op: String,
83   data: T,
84 }
85
86 pub fn serialize_websocket_message<OP, Response>(
87   op: &OP,
88   data: &Response,
89 ) -> Result<String, LemmyError>
90 where
91   Response: Serialize,
92   OP: ToString,
93 {
94   let response = WebsocketResponse {
95     op: op.to_string(),
96     data,
97   };
98   Ok(serde_json::to_string(&response)?)
99 }
100
101 #[derive(EnumString, ToString, Debug, Clone)]
102 pub enum UserOperation {
103   Login,
104   GetCaptcha,
105   MarkCommentAsRead,
106   SaveComment,
107   CreateCommentLike,
108   CreateCommentReport,
109   ResolveCommentReport,
110   ListCommentReports,
111   CreatePostLike,
112   LockPost,
113   StickyPost,
114   SavePost,
115   CreatePostReport,
116   ResolvePostReport,
117   ListPostReports,
118   GetReportCount,
119   GetUnreadCount,
120   FollowCommunity,
121   GetReplies,
122   GetPersonMentions,
123   MarkPersonMentionAsRead,
124   GetModlog,
125   BanFromCommunity,
126   AddModToCommunity,
127   AddAdmin,
128   BanPerson,
129   Search,
130   ResolveObject,
131   MarkAllAsRead,
132   SaveUserSettings,
133   TransferCommunity,
134   TransferSite,
135   PasswordReset,
136   PasswordChange,
137   MarkPrivateMessageAsRead,
138   UserJoin,
139   GetSiteConfig,
140   SaveSiteConfig,
141   PostJoin,
142   CommunityJoin,
143   ModJoin,
144   ChangePassword,
145   GetSiteMetadata,
146   BlockCommunity,
147   BlockPerson,
148 }
149
150 #[derive(EnumString, ToString, Debug, Clone)]
151 pub enum UserOperationCrud {
152   // Site
153   CreateSite,
154   GetSite,
155   EditSite,
156   // Community
157   CreateCommunity,
158   ListCommunities,
159   GetCommunity,
160   EditCommunity,
161   DeleteCommunity,
162   RemoveCommunity,
163   // Post
164   CreatePost,
165   GetPost,
166   GetPosts,
167   EditPost,
168   DeletePost,
169   RemovePost,
170   // Comment
171   CreateComment,
172   GetComments,
173   EditComment,
174   DeleteComment,
175   RemoveComment,
176   // User
177   Register,
178   GetPersonDetails,
179   DeleteAccount,
180   // Private Message
181   CreatePrivateMessage,
182   GetPrivateMessages,
183   EditPrivateMessage,
184   DeletePrivateMessage,
185 }
186
187 pub trait OperationType {}
188
189 impl OperationType for UserOperationCrud {}
190
191 impl OperationType for UserOperation {}