Adding CommunityJoin, PostJoin instead of joins from GetComments, etc.

- Fixes #1122
pull/1124/head
Dessalines 2020-09-13 10:45:07 -05:00
parent 2ab5172d35
commit 29a01ddaf1
12 changed files with 82 additions and 49 deletions

View File

@ -16,7 +16,7 @@ services:
- postgres
- iframely
lemmy-isomorphic-ui:
image: dessalines/lemmy-isomorphic-ui:v0.0.5
image: dessalines/lemmy-isomorphic-ui:v0.0.6
# image: lemmy-isomorphic-ui:latest
ports:
- "1235:1234"

View File

@ -26,7 +26,7 @@ services:
- iframely
lemmy-isomorphic-ui:
image: dessalines/lemmy-isomorphic-ui:v0.0.5
image: dessalines/lemmy-isomorphic-ui:v0.0.6
# image: lemmy-isomorphic-ui:latest
ports:
- "1235:1234"

View File

@ -129,3 +129,13 @@ pub struct TransferCommunity {
pub user_id: i32,
pub auth: String,
}
#[derive(Deserialize, Debug)]
pub struct CommunityJoin {
pub community_id: i32,
}
#[derive(Serialize, Clone)]
pub struct CommunityJoinResponse {
pub joined: bool,
}

View File

@ -103,3 +103,13 @@ pub struct SavePost {
pub save: bool,
pub auth: String,
}
#[derive(Deserialize, Debug)]
pub struct PostJoin {
pub post_id: i32,
}
#[derive(Serialize, Clone)]
pub struct PostJoinResponse {
pub joined: bool,
}

View File

@ -235,5 +235,5 @@ pub struct UserJoin {
#[derive(Serialize, Clone)]
pub struct UserJoinResponse {
pub user_id: i32,
pub joined: bool,
}

View File

@ -10,7 +10,7 @@ use crate::{
apub::{ApubLikeableType, ApubObjectType},
blocking,
websocket::{
messages::{JoinCommunityRoom, SendComment},
messages::SendComment,
UserOperation,
},
DbPool,
@ -664,7 +664,7 @@ impl Perform for GetComments {
async fn perform(
&self,
context: &Data<LemmyContext>,
websocket_id: Option<ConnectionId>,
_websocket_id: Option<ConnectionId>,
) -> Result<GetCommentsResponse, LemmyError> {
let data: &GetComments = &self;
let user = get_user_from_jwt_opt(&data.auth, context.pool()).await?;
@ -694,18 +694,6 @@ impl Perform for GetComments {
Err(_) => return Err(APIError::err("couldnt_get_comments").into()),
};
if let Some(id) = websocket_id {
// You don't need to join the specific community room, bc this is already handled by
// GetCommunity
if data.community_id.is_none() {
// 0 is the "all" community
context.chat_server().do_send(JoinCommunityRoom {
community_id: 0,
id,
});
}
}
Ok(GetCommentsResponse { comments })
}
}

View File

@ -56,7 +56,7 @@ impl Perform for GetCommunity {
async fn perform(
&self,
context: &Data<LemmyContext>,
websocket_id: Option<ConnectionId>,
_websocket_id: Option<ConnectionId>,
) -> Result<GetCommunityResponse, LemmyError> {
let data: &GetCommunity = &self;
let user = get_user_from_jwt_opt(&data.auth, context.pool()).await?;
@ -95,12 +95,6 @@ impl Perform for GetCommunity {
Err(_e) => return Err(APIError::err("couldnt_find_community").into()),
};
if let Some(id) = websocket_id {
context
.chat_server()
.do_send(JoinCommunityRoom { community_id, id });
}
let online = context
.chat_server()
.send(GetCommunityUsersOnline { community_id })
@ -856,3 +850,25 @@ pub fn send_community_websocket(
websocket_id,
});
}
#[async_trait::async_trait(?Send)]
impl Perform for CommunityJoin {
type Response = CommunityJoinResponse;
async fn perform(
&self,
context: &Data<LemmyContext>,
websocket_id: Option<ConnectionId>,
) -> Result<CommunityJoinResponse, LemmyError> {
let data: &CommunityJoin = &self;
if let Some(ws_id) = websocket_id {
context.chat_server().do_send(JoinCommunityRoom {
community_id: data.community_id,
id: ws_id,
});
}
Ok(CommunityJoinResponse { joined: true })
}
}

View File

@ -12,7 +12,7 @@ use crate::{
blocking,
fetch_iframely_and_pictrs_data,
websocket::{
messages::{GetPostUsersOnline, JoinCommunityRoom, JoinPostRoom, SendPost},
messages::{GetPostUsersOnline, JoinPostRoom, SendPost},
UserOperation,
},
LemmyContext,
@ -169,7 +169,7 @@ impl Perform for GetPost {
async fn perform(
&self,
context: &Data<LemmyContext>,
websocket_id: Option<ConnectionId>,
_websocket_id: Option<ConnectionId>,
) -> Result<GetPostResponse, LemmyError> {
let data: &GetPost = &self;
let user = get_user_from_jwt_opt(&data.auth, context.pool()).await?;
@ -207,13 +207,6 @@ impl Perform for GetPost {
})
.await??;
if let Some(id) = websocket_id {
context.chat_server().do_send(JoinPostRoom {
post_id: data.id,
id,
});
}
let online = context
.chat_server()
.send(GetPostUsersOnline { post_id: data.id })
@ -238,7 +231,7 @@ impl Perform for GetPosts {
async fn perform(
&self,
context: &Data<LemmyContext>,
websocket_id: Option<ConnectionId>,
_websocket_id: Option<ConnectionId>,
) -> Result<GetPostsResponse, LemmyError> {
let data: &GetPosts = &self;
let user = get_user_from_jwt_opt(&data.auth, context.pool()).await?;
@ -278,18 +271,6 @@ impl Perform for GetPosts {
Err(_e) => return Err(APIError::err("couldnt_get_posts").into()),
};
if let Some(id) = websocket_id {
// You don't need to join the specific community room, bc this is already handled by
// GetCommunity
if data.community_id.is_none() {
// 0 is the "all" community
context.chat_server().do_send(JoinCommunityRoom {
community_id: 0,
id,
});
}
}
Ok(GetPostsResponse { posts })
}
}
@ -749,3 +730,25 @@ impl Perform for SavePost {
Ok(PostResponse { post: post_view })
}
}
#[async_trait::async_trait(?Send)]
impl Perform for PostJoin {
type Response = PostJoinResponse;
async fn perform(
&self,
context: &Data<LemmyContext>,
websocket_id: Option<ConnectionId>,
) -> Result<PostJoinResponse, LemmyError> {
let data: &PostJoin = &self;
if let Some(ws_id) = websocket_id {
context.chat_server().do_send(JoinPostRoom {
post_id: data.post_id,
id: ws_id,
});
}
Ok(PostJoinResponse { joined: true })
}
}

View File

@ -1279,6 +1279,6 @@ impl Perform for UserJoin {
});
}
Ok(UserJoinResponse { user_id: user.id })
Ok(UserJoinResponse { joined: true })
}
}

View File

@ -55,7 +55,8 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
.route("/remove", web::post().to(route_post::<RemoveCommunity>))
.route("/transfer", web::post().to(route_post::<TransferCommunity>))
.route("/ban_user", web::post().to(route_post::<BanFromCommunity>))
.route("/mod", web::post().to(route_post::<AddModToCommunity>)),
.route("/mod", web::post().to(route_post::<AddModToCommunity>))
.route("/join", web::post().to(route_post::<CommunityJoin>)),
)
// Post
.service(
@ -76,7 +77,8 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
.route("/sticky", web::post().to(route_post::<StickyPost>))
.route("/list", web::get().to(route_get::<GetPosts>))
.route("/like", web::post().to(route_post::<CreatePostLike>))
.route("/save", web::put().to(route_post::<SavePost>)),
.route("/save", web::put().to(route_post::<SavePost>))
.route("/join", web::post().to(route_post::<PostJoin>)),
)
// Comment
.service(

View File

@ -398,6 +398,8 @@ impl ChatServer {
UserOperation::PasswordReset => do_user_operation::<PasswordReset>(args).await,
UserOperation::PasswordChange => do_user_operation::<PasswordChange>(args).await,
UserOperation::UserJoin => do_user_operation::<UserJoin>(args).await,
UserOperation::PostJoin => do_user_operation::<PostJoin>(args).await,
UserOperation::CommunityJoin => do_user_operation::<CommunityJoin>(args).await,
UserOperation::SaveUserSettings => do_user_operation::<SaveUserSettings>(args).await,
// Private Message ops

View File

@ -62,4 +62,6 @@ pub enum UserOperation {
GetComments,
GetSiteConfig,
SaveSiteConfig,
PostJoin,
CommunityJoin,
}