diff --git a/publish.sh b/publish.sh new file mode 100755 index 00000000..52482392 --- /dev/null +++ b/publish.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Tip: for subsequent builds, don't update Cargo.toml +# in order to not download all the crates again. +# Update Cargo.toml on major release. +version=0.4.1-alpha.4 +docker build -t revoltchat/server:${version} . && + docker push revoltchat/server:${version} diff --git a/src/notifications/websocket.rs b/src/notifications/websocket.rs index 28606728..9df9b1b0 100644 --- a/src/notifications/websocket.rs +++ b/src/notifications/websocket.rs @@ -220,14 +220,28 @@ async fn accept(stream: TcpStream) { info!("User {} disconnected.", &addr); CONNECTIONS.lock().unwrap().remove(&addr); - let session = session.lock().unwrap(); - if let Some(session) = session.as_ref() { - let mut users = USERS.write().unwrap(); - users.remove(&session.user_id, &addr); - if users.get_left(&session.user_id).is_none() { - get_hive().drop_client(&session.user_id).unwrap(); + let mut offline = None; + { + let session = session.lock().unwrap(); + if let Some(session) = session.as_ref() { + let mut users = USERS.write().unwrap(); + users.remove(&session.user_id, &addr); + if users.get_left(&session.user_id).is_none() { + get_hive().drop_client(&session.user_id).unwrap(); + offline = Some(session.user_id.clone()); + } } } + + if let Some(id) = offline { + ClientboundNotification::UserPresence { + id: id.clone(), + online: false, + } + .publish(id) + .await + .ok(); + } } pub fn publish(ids: Vec, notification: ClientboundNotification) { diff --git a/src/routes/root.rs b/src/routes/root.rs index 6dc77ec8..c25862cb 100644 --- a/src/routes/root.rs +++ b/src/routes/root.rs @@ -9,7 +9,7 @@ use rocket_contrib::json::JsonValue; #[get("/")] pub async fn root() -> JsonValue { json!({ - "revolt": "0.4.1-alpha.3", + "revolt": "0.4.1-alpha.4", "features": { "registration": !*DISABLE_REGISTRATION, "captcha": {