add: client streams api
fix: mobile chats ui
This commit is contained in:
parent
094dd5fdb5
commit
58d206eb81
12 changed files with 152 additions and 19 deletions
|
@ -454,7 +454,7 @@ pub async fn handle_socket(socket: WebSocket, db: DataManager, user_id: String,
|
|||
let (mut sink, mut stream) = socket.split();
|
||||
|
||||
// get channel permissions
|
||||
let channel = format!("{user_id}_{stream_id}");
|
||||
let channel = format!("{user_id}/{stream_id}");
|
||||
|
||||
// ...
|
||||
let mut recv_task = tokio::spawn(async move {
|
||||
|
@ -510,8 +510,8 @@ pub async fn handle_socket(socket: WebSocket, db: DataManager, user_id: String,
|
|||
let mut heartbeat = tokio::time::interval(Duration::from_secs(10));
|
||||
|
||||
loop {
|
||||
con.publish::<String, String, ()>(
|
||||
format!("{channel_c}_heartbeat"),
|
||||
con.publish::<&str, String, ()>(
|
||||
&channel_c,
|
||||
serde_json::to_string(&SocketMessage {
|
||||
method: SocketMethod::Forward(PacketType::Ping),
|
||||
data: "Ping".to_string(),
|
||||
|
@ -532,3 +532,33 @@ pub async fn handle_socket(socket: WebSocket, db: DataManager, user_id: String,
|
|||
heartbeat_task.abort(); // kill
|
||||
tracing::info!("socket terminate");
|
||||
}
|
||||
|
||||
pub async fn post_to_socket_request(
|
||||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Path((user_id, id)): Path<(String, String)>,
|
||||
Json(msg): Json<SocketMessage>,
|
||||
) -> impl IntoResponse {
|
||||
let data = &(data.read().await).0;
|
||||
let user = match get_user_from_token!(jar, data) {
|
||||
Some(ua) => ua,
|
||||
None => return Json(Error::NotAllowed.into()),
|
||||
};
|
||||
|
||||
if user.id.to_string() != user_id {
|
||||
return Json(Error::NotAllowed.into());
|
||||
}
|
||||
|
||||
let mut con = data.2.get_con().await;
|
||||
con.publish::<String, String, ()>(
|
||||
format!("{user_id}/{id}"),
|
||||
serde_json::to_string(&msg).unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
Json(ApiReturn {
|
||||
ok: true,
|
||||
message: "Data sent to socket".to_string(),
|
||||
payload: (),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -193,7 +193,11 @@ pub fn routes() -> Router {
|
|||
.route("/auth/ip/{ip}/block", post(auth::social::ip_block_request))
|
||||
.route(
|
||||
"/auth/user/{id}/_connect/{stream}",
|
||||
get(auth::profile::subscription_handler),
|
||||
any(auth::profile::subscription_handler),
|
||||
)
|
||||
.route(
|
||||
"/auth/user/{id}/_connect/{stream}/send",
|
||||
post(auth::profile::post_to_socket_request),
|
||||
)
|
||||
// warnings
|
||||
.route("/warnings/{id}", post(auth::user_warnings::create_request))
|
||||
|
|
|
@ -14,3 +14,4 @@ serve_asset!(style_css_request: STYLE_CSS("text/css"));
|
|||
serve_asset!(loader_js_request: LOADER_JS("text/javascript"));
|
||||
serve_asset!(atto_js_request: ATTO_JS("text/javascript"));
|
||||
serve_asset!(me_js_request: ME_JS("text/javascript"));
|
||||
serve_asset!(streams_js_request: STREAMS_JS("text/javascript"));
|
||||
|
|
|
@ -15,6 +15,7 @@ pub fn routes(config: &Config) -> Router {
|
|||
.route("/js/loader.js", get(assets::loader_js_request))
|
||||
.route("/js/atto.js", get(assets::atto_js_request))
|
||||
.route("/js/me.js", get(assets::me_js_request))
|
||||
.route("/js/streams.js", get(assets::streams_js_request))
|
||||
.nest_service(
|
||||
"/public",
|
||||
get_service(tower_http::services::ServeDir::new(&config.dirs.assets)),
|
||||
|
|
|
@ -158,7 +158,7 @@ pub async fn stream_request(
|
|||
let ignore_users = data.0.get_userblocks_receivers(user.id).await;
|
||||
let messages = match data
|
||||
.0
|
||||
.get_messages_by_channel(channel, 12, props.page)
|
||||
.get_messages_by_channel(channel, 24, props.page)
|
||||
.await
|
||||
{
|
||||
Ok(p) => match data.0.fill_messages(p, &ignore_users).await {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue