Phase 2: PostgreSQL, E2EE, channel CRUD, voice signaling, Slint migration
Server: - PostgreSQL backend (Pool enum over Sqlite/PgPool, all storage methods dual-dialect) - E2EE for DM (4 new protobuf packets, handlers, storage of ciphertext only) - ChannelEdit packet + server-authoritative channel create/delete - Gateway → voice-node membership signaling via broadcast channel Client: - E2EE crypto (X25519 from Ed25519, HKDF, ChaCha20-Poly1305) + UI lock icons - E2EE net layer (PID 0x0071-0x0074, JSON payloads, dispatch, session handlers) - Slint migration: all .slint files, bridge.rs, update.rs, main.rs rewritten - Removed egui UI (~50 files) and all dead code (clean clippy -D warnings)
This commit is contained in:
parent
c34ed2a192
commit
742cf03a5f
31 changed files with 2203 additions and 639 deletions
|
|
@ -1,38 +1,87 @@
|
|||
use anyhow::Result;
|
||||
|
||||
use super::Pool;
|
||||
|
||||
impl super::Storage {
|
||||
pub async fn increment_dm_unread(&self, dm_id: &str, recipient_id: &str) -> Result<()> {
|
||||
let (u1, _u2) = sqlx::query_as::<_, (String, String)>(
|
||||
"SELECT user1_id,user2_id FROM direct_messages WHERE id=?",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.fetch_one(&self.pool)
|
||||
.await?;
|
||||
if recipient_id == u1 {
|
||||
sqlx::query("UPDATE direct_messages SET unread_count_2=unread_count_2+1 WHERE id=?")
|
||||
match &self.pool {
|
||||
Pool::Sqlite(p) => {
|
||||
let (u1, _u2) = sqlx::query_as::<_, (String, String)>(
|
||||
"SELECT user1_id,user2_id FROM direct_messages WHERE id=?",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.execute(&self.pool)
|
||||
.fetch_one(p)
|
||||
.await?;
|
||||
} else {
|
||||
sqlx::query("UPDATE direct_messages SET unread_count_1=unread_count_1+1 WHERE id=?")
|
||||
if recipient_id == u1 {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET unread_count_2=unread_count_2+1 WHERE id=?",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.execute(p)
|
||||
.await?;
|
||||
} else {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET unread_count_1=unread_count_1+1 WHERE id=?",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.execute(p)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
Pool::Postgres(p) => {
|
||||
let (u1, _u2) = sqlx::query_as::<_, (String, String)>(
|
||||
"SELECT user1_id,user2_id FROM direct_messages WHERE id=$1",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.execute(&self.pool)
|
||||
.fetch_one(p)
|
||||
.await?;
|
||||
if recipient_id == u1 {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET unread_count_2=unread_count_2+1 WHERE id=$1",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.execute(p)
|
||||
.await?;
|
||||
} else {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET unread_count_1=unread_count_1+1 WHERE id=$1",
|
||||
)
|
||||
.bind(dm_id)
|
||||
.execute(p)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn reset_dm_unread(&self, dm_id: &str, user_id: &str) -> Result<()> {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET \
|
||||
unread_count_1 = CASE WHEN user1_id=? THEN 0 ELSE unread_count_1 END, \
|
||||
unread_count_2 = CASE WHEN user2_id=? THEN 0 ELSE unread_count_2 END WHERE id=?",
|
||||
)
|
||||
.bind(user_id)
|
||||
.bind(user_id)
|
||||
.bind(dm_id)
|
||||
.execute(&self.pool)
|
||||
.await?;
|
||||
match &self.pool {
|
||||
Pool::Sqlite(p) => {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET \
|
||||
unread_count_1 = CASE WHEN user1_id=? THEN 0 ELSE unread_count_1 END, \
|
||||
unread_count_2 = CASE WHEN user2_id=? THEN 0 ELSE unread_count_2 END WHERE id=?",
|
||||
)
|
||||
.bind(user_id)
|
||||
.bind(user_id)
|
||||
.bind(dm_id)
|
||||
.execute(p)
|
||||
.await?;
|
||||
}
|
||||
Pool::Postgres(p) => {
|
||||
sqlx::query(
|
||||
"UPDATE direct_messages SET \
|
||||
unread_count_1 = CASE WHEN user1_id=$1 THEN 0 ELSE unread_count_1 END, \
|
||||
unread_count_2 = CASE WHEN user2_id=$2 THEN 0 ELSE unread_count_2 END WHERE id=$3",
|
||||
)
|
||||
.bind(user_id)
|
||||
.bind(user_id)
|
||||
.bind(dm_id)
|
||||
.execute(p)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue