diff options
author | Joscha <joscha@plugh.de> | 2022-09-26 10:20:47 +0200 |
---|---|---|
committer | Joscha <joscha@plugh.de> | 2022-09-26 10:20:47 +0200 |
commit | 374c4c4f799d05017d4903ca808442ec923ede65 (patch) | |
tree | b1814f2a04a3b80d5c2f155d758ab569b7131749 | |
parent | 2d88513a283594187c2ce57827dc8d232a94794c (diff) |
Update euphoxide to version with id newtype wrappers
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/euph/room.rs | 14 | ||||
-rw-r--r-- | src/euph/small_message.rs | 10 | ||||
-rw-r--r-- | src/export/text.rs | 4 | ||||
-rw-r--r-- | src/ui/euph/inspect.rs | 6 | ||||
-rw-r--r-- | src/ui/euph/nick_list.rs | 12 | ||||
-rw-r--r-- | src/ui/euph/room.rs | 8 | ||||
-rw-r--r-- | src/vault/euph.rs | 186 |
10 files changed, 131 insertions, 114 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b6005e..c7318d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ Procedure when bumping the version number: ### Fixed - Cursor being visible through popups - Cursor in lists when highlighted item moves off-screen +- User disappearing from nick list when only one of their sessions disconnects ## v0.4.0 - 2022-09-01 @@ -294,7 +294,7 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "euphoxide" version = "0.1.0" -source = "git+https://github.com/Garmelon/euphoxide.git?rev=01a442c1f0695bd11b8f54db406b3a3a03d61983#01a442c1f0695bd11b8f54db406b3a3a03d61983" +source = "git+https://github.com/Garmelon/euphoxide.git?rev=e59216809a3d372b48681061a32b0e3e5973ce85#e59216809a3d372b48681061a32b0e3e5973ce85" dependencies = [ "futures", "serde", @@ -34,7 +34,7 @@ features = ["rustls-tls-native-roots"] [dependencies.euphoxide] git = "https://github.com/Garmelon/euphoxide.git" -rev = "01a442c1f0695bd11b8f54db406b3a3a03d61983" +rev = "e59216809a3d372b48681061a32b0e3e5973ce85" # [patch."https://github.com/Garmelon/euphoxide.git"] # euphoxide = { path = "../euphoxide/" } diff --git a/src/euph/room.rs b/src/euph/room.rs index a07dced..0d33e6a 100644 --- a/src/euph/room.rs +++ b/src/euph/room.rs @@ -7,7 +7,7 @@ use anyhow::bail; use cookie::{Cookie, CookieJar}; use euphoxide::api::packet::ParsedPacket; use euphoxide::api::{ - Auth, AuthOption, Data, Log, Login, Logout, Nick, Send, Snowflake, Time, UserId, + Auth, AuthOption, Data, Log, Login, Logout, MessageId, Nick, Send, Time, UserId, }; use euphoxide::conn::{ConnRx, ConnTx, Joining, Status}; use log::{error, info, warn}; @@ -50,7 +50,7 @@ enum Event { RequestLogs, Auth(String), Nick(String), - Send(Option<Snowflake>, String, oneshot::Sender<Snowflake>), + Send(Option<MessageId>, String, oneshot::Sender<MessageId>), Login { email: String, password: String }, Logout, } @@ -66,7 +66,7 @@ struct State { conn_tx: Option<ConnTx>, /// `None` before any `snapshot-event`, then either `Some(None)` or /// `Some(Some(id))`. - last_msg_id: Option<Option<Snowflake>>, + last_msg_id: Option<Option<MessageId>>, requesting_logs: Arc<Mutex<bool>>, } @@ -419,9 +419,9 @@ impl State { fn on_send( &self, - parent: Option<Snowflake>, + parent: Option<MessageId>, content: String, - id_tx: oneshot::Sender<Snowflake>, + id_tx: oneshot::Sender<MessageId>, ) { if let Some(conn_tx) = &self.conn_tx { let conn_tx = conn_tx.clone(); @@ -527,9 +527,9 @@ impl Room { pub fn send( &self, - parent: Option<Snowflake>, + parent: Option<MessageId>, content: String, - ) -> Result<oneshot::Receiver<Snowflake>, Error> { + ) -> Result<oneshot::Receiver<MessageId>, Error> { let (id_tx, id_rx) = oneshot::channel(); self.event_tx .send(Event::Send(parent, content, id_tx)) diff --git a/src/euph/small_message.rs b/src/euph/small_message.rs index 4aa45c2..f2e8901 100644 --- a/src/euph/small_message.rs +++ b/src/euph/small_message.rs @@ -1,5 +1,5 @@ use crossterm::style::{Color, ContentStyle, Stylize}; -use euphoxide::api::{Snowflake, Time}; +use euphoxide::api::{MessageId, Snowflake, Time}; use time::OffsetDateTime; use toss::styled::Styled; @@ -89,8 +89,8 @@ fn highlight_content(content: &str, base_style: ContentStyle) -> Styled { #[derive(Debug, Clone)] pub struct SmallMessage { - pub id: Snowflake, - pub parent: Option<Snowflake>, + pub id: MessageId, + pub parent: Option<MessageId>, pub time: Time, pub nick: String, pub content: String, @@ -135,7 +135,7 @@ fn styled_editor_content(content: &str) -> Styled { } impl Msg for SmallMessage { - type Id = Snowflake; + type Id = MessageId; fn id(&self) -> Self::Id { self.id @@ -150,7 +150,7 @@ impl Msg for SmallMessage { } fn last_possible_id() -> Self::Id { - Snowflake::MAX + MessageId(Snowflake::MAX) } } diff --git a/src/export/text.rs b/src/export/text.rs index ac25a5e..b4b55db 100644 --- a/src/export/text.rs +++ b/src/export/text.rs @@ -1,7 +1,7 @@ use std::fs::File; use std::io::{BufWriter, Write}; -use euphoxide::api::Snowflake; +use euphoxide::api::MessageId; use time::format_description::FormatItem; use time::macros::format_description; use unicode_width::UnicodeWidthStr; @@ -41,7 +41,7 @@ pub async fn export_to_file( fn write_tree( file: &mut BufWriter<File>, tree: &Tree<SmallMessage>, - id: Snowflake, + id: MessageId, indent: usize, ) -> anyhow::Result<()> { let indent_string = "| ".repeat(indent); diff --git a/src/ui/euph/inspect.rs b/src/ui/euph/inspect.rs index 99a605f..70917c6 100644 --- a/src/ui/euph/inspect.rs +++ b/src/ui/euph/inspect.rs @@ -44,7 +44,7 @@ fn session_lines(mut text: Styled, session: &SessionView) -> Styled { line!(text, "name (raw)", session.name, debug); line!(text, "server_id", session.server_id); line!(text, "server_era", session.server_era); - line!(text, "session_id", session.session_id); + line!(text, "session_id", session.session_id.0); line!(text, "is_staff", session.is_staff, yes or no); line!(text, "is_manager", session.is_manager, yes or no); line!( @@ -64,8 +64,8 @@ fn session_lines(mut text: Styled, session: &SessionView) -> Styled { } fn message_lines(mut text: Styled, msg: &Message) -> Styled { - line!(text, "id", msg.id); - line!(text, "parent", msg.parent, optional); + line!(text, "id", msg.id.0); + line!(text, "parent", msg.parent.map(|p| p.0), optional); line!(text, "previous_edit_id", msg.previous_edit_id, optional); line!(text, "time", msg.time.0); line!(text, "encryption_key_id", &msg.encryption_key_id, optional); diff --git a/src/ui/euph/nick_list.rs b/src/ui/euph/nick_list.rs index 2b00c59..78c6c67 100644 --- a/src/ui/euph/nick_list.rs +++ b/src/ui/euph/nick_list.rs @@ -1,7 +1,7 @@ use std::iter; use crossterm::style::{Color, ContentStyle, Stylize}; -use euphoxide::api::{SessionType, SessionView, UserId}; +use euphoxide::api::{SessionId, SessionType, SessionView}; use euphoxide::conn::Joined; use toss::styled::Styled; @@ -12,13 +12,13 @@ use crate::ui::widgets::list::{List, ListState}; use crate::ui::widgets::text::Text; use crate::ui::widgets::BoxedWidget; -pub fn widget(state: &ListState<UserId>, joined: &Joined, focused: bool) -> BoxedWidget { +pub fn widget(state: &ListState<SessionId>, joined: &Joined, focused: bool) -> BoxedWidget { let mut list = state.widget().focus(focused); render_rows(&mut list, joined); list.into() } -fn render_rows(list: &mut List<UserId>, joined: &Joined) { +fn render_rows(list: &mut List<SessionId>, joined: &Joined) { let mut people = vec![]; let mut bots = vec![]; let mut lurkers = vec![]; @@ -49,7 +49,7 @@ fn render_rows(list: &mut List<UserId>, joined: &Joined) { } fn render_section( - list: &mut List<UserId>, + list: &mut List<SessionId>, name: &str, sessions: &[&SessionView], own_session: &SessionView, @@ -74,7 +74,7 @@ fn render_section( } } -fn render_row(list: &mut List<UserId>, session: &SessionView, own_session: &SessionView) { +fn render_row(list: &mut List<SessionId>, session: &SessionView, own_session: &SessionView) { let (name, style, style_inv, perms_style_inv) = if session.name.is_empty() { let name = "lurk"; let style = ContentStyle::default().grey(); @@ -111,7 +111,7 @@ fn render_row(list: &mut List<UserId>, session: &SessionView, own_session: &Sess .then(name, style_inv) .then(perms, perms_style_inv); list.add_sel( - session.id.clone(), + session.session_id.clone(), Text::new(normal), Background::new(Text::new(selected)).style(style_inv), ); diff --git a/src/ui/euph/room.rs b/src/ui/euph/room.rs index 467f68d..d2007df 100644 --- a/src/ui/euph/room.rs +++ b/src/ui/euph/room.rs @@ -2,7 +2,7 @@ use std::collections::VecDeque; use std::sync::Arc; use crossterm::style::{ContentStyle, Stylize}; -use euphoxide::api::{Data, Message, PacketType, SessionView, Snowflake, UserId}; +use euphoxide::api::{Data, Message, MessageId, PacketType, SessionId, SessionView}; use euphoxide::conn::{Joined, Joining, Status}; use parking_lot::FairMutex; use tokio::sync::oneshot::error::TryRecvError; @@ -78,9 +78,9 @@ pub struct EuphRoom { popups: VecDeque<RoomPopup>, chat: ChatState<euph::SmallMessage, EuphRoomVault>, - last_msg_sent: Option<oneshot::Receiver<Snowflake>>, + last_msg_sent: Option<oneshot::Receiver<MessageId>>, - nick_list: ListState<UserId>, + nick_list: ListState<SessionId>, } impl EuphRoom { @@ -501,7 +501,7 @@ impl EuphRoom { if let RoomStatus::Connected(Status::Joined(joined)) = status { // TODO Fix euphoxide to use session_id as hash if let Some(id) = self.nick_list.cursor() { - if id == joined.session.id { + if id == joined.session.session_id { self.state = State::InspectSession(joined.session.clone()); } else if let Some(session) = joined.listing.get(&id) { self.state = State::InspectSession(session.clone()); diff --git a/src/vault/euph.rs b/src/vault/euph.rs index 1088aeb..897a2fd 100644 --- a/src/vault/euph.rs +++ b/src/vault/euph.rs @@ -3,7 +3,7 @@ use std::str::FromStr; use async_trait::async_trait; use cookie::{Cookie, CookieJar}; -use euphoxide::api::{Message, SessionView, Snowflake, Time, UserId}; +use euphoxide::api::{Message, MessageId, SessionId, SessionView, Snowflake, Time, UserId}; use rusqlite::types::{FromSql, FromSqlError, ToSqlOutput, Value, ValueRef}; use rusqlite::{named_params, params, Connection, OptionalExtension, ToSql, Transaction}; use time::OffsetDateTime; @@ -86,63 +86,63 @@ impl EuphRoomVault { #[async_trait] impl MsgStore<SmallMessage> for EuphRoomVault { - async fn path(&self, id: &Snowflake) -> Path<Snowflake> { + async fn path(&self, id: &MessageId) -> Path<MessageId> { self.path(*id).await } - async fn msg(&self, id: &Snowflake) -> Option<SmallMessage> { + async fn msg(&self, id: &MessageId) -> Option<SmallMessage> { self.msg(*id).await } - async fn tree(&self, root_id: &Snowflake) -> Tree<SmallMessage> { + async fn tree(&self, root_id: &MessageId) -> Tree<SmallMessage> { self.tree(*root_id).await } - async fn first_root_id(&self) -> Option<Snowflake> { + async fn first_root_id(&self) -> Option<MessageId> { self.first_root_id().await } - async fn last_root_id(&self) -> Option<Snowflake> { + async fn last_root_id(&self) -> Option<MessageId> { self.last_root_id().await } - async fn prev_root_id(&self, root_id: &Snowflake) -> Option<Snowflake> { + async fn prev_root_id(&self, root_id: &MessageId) -> Option<MessageId> { self.prev_root_id(*root_id).await } - async fn next_root_id(&self, root_id: &Snowflake) -> Option<Snowflake> { + async fn next_root_id(&self, root_id: &MessageId) -> Option<MessageId> { self.next_root_id(*root_id).await } - async fn oldest_msg_id(&self) -> Option<Snowflake> { + async fn oldest_msg_id(&self) -> Option<MessageId> { self.oldest_msg_id().await } - async fn newest_msg_id(&self) -> Option<Snowflake> { + async fn newest_msg_id(&self) -> Option<MessageId> { self.newest_msg_id().await } - async fn older_msg_id(&self, id: &Snowflake) -> Option<Snowflake> { + async fn older_msg_id(&self, id: &MessageId) -> Option<MessageId> { self.older_msg_id(*id).await } - async fn newer_msg_id(&self, id: &Snowflake) -> Option<Snowflake> { + async fn newer_msg_id(&self, id: &MessageId) -> Option<MessageId> { self.newer_msg_id(*id).await } - async fn oldest_unseen_msg_id(&self) -> Option<Snowflake> { + async fn oldest_unseen_msg_id(&self) -> Option<MessageId> { self.oldest_unseen_msg_id().await } - async fn newest_unseen_msg_id(&self) -> Option<Snowflake> { + async fn newest_unseen_msg_id(&self) -> Option<MessageId> { self.newest_unseen_msg_id().await } - async fn older_unseen_msg_id(&self, id: &Snowflake) -> Option<Snowflake> { + async fn older_unseen_msg_id(&self, id: &MessageId) -> Option<MessageId> { self.older_unseen_msg_id(*id).await } - async fn newer_unseen_msg_id(&self, id: &Snowflake) -> Option<Snowflake> { + async fn newer_unseen_msg_id(&self, id: &MessageId) -> Option<MessageId> { self.newer_unseen_msg_id(*id).await } @@ -150,11 +150,11 @@ impl MsgStore<SmallMessage> for EuphRoomVault { self.unseen_msgs_count().await } - async fn set_seen(&self, id: &Snowflake, seen: bool) { + async fn set_seen(&self, id: &MessageId, seen: bool) { self.set_seen(*id, seen); } - async fn set_older_seen(&self, id: &Snowflake, seen: bool) { + async fn set_older_seen(&self, id: &MessageId, seen: bool) { self.set_older_seen(*id, seen); } } @@ -247,28 +247,28 @@ requests! { Delete : delete(room: String); // Message - AddMsg : add_msg(room: String, msg: Box<Message>, prev_msg_id: Option<Snowflake>, own_user_id: Option<UserId>); - AddMsgs : add_msgs(room: String, msgs: Vec<Message>, next_msg_id: Option<Snowflake>, own_user_id: Option<UserId>); - GetLastSpan : last_span(room: String) -> Option<(Option<Snowflake>, Option<Snowflake>)>; - GetPath : path(room: String, id: Snowflake) -> Path<Snowflake>; - GetMsg : msg(room: String, id: Snowflake) -> Option<SmallMessage>; - GetFullMsg : full_msg(room: String, id: Snowflake) -> Option<Message>; - GetTree : tree(room: String, root_id: Snowflake) -> Tree<SmallMessage>; - GetFirstRootId : first_root_id(room: String) -> Option<Snowflake>; - GetLastRootId : last_root_id(room: String) -> Option<Snowflake>; - GetPrevRootId : prev_root_id(room: String, root_id: Snowflake) -> Option<Snowflake>; - GetNextRootId : next_root_id(room: String, root_id: Snowflake) -> Option<Snowflake>; - GetOldestMsgId : oldest_msg_id(room: String) -> Option<Snowflake>; - GetNewestMsgId : newest_msg_id(room: String) -> Option<Snowflake>; - GetOlderMsgId : older_msg_id(room: String, id: Snowflake) -> Option<Snowflake>; - GetNewerMsgId : newer_msg_id(room: String, id: Snowflake) -> Option<Snowflake>; - GetOldestUnseenMsgId : oldest_unseen_msg_id(room: String) -> Option<Snowflake>; - GetNewestUnseenMsgId : newest_unseen_msg_id(room: String) -> Option<Snowflake>; - GetOlderUnseenMsgId : older_unseen_msg_id(room: String, id: Snowflake) -> Option<Snowflake>; - GetNewerUnseenMsgId : newer_unseen_msg_id(room: String, id: Snowflake) -> Option<Snowflake>; + AddMsg : add_msg(room: String, msg: Box<Message>, prev_msg_id: Option<MessageId>, own_user_id: Option<UserId>); + AddMsgs : add_msgs(room: String, msgs: Vec<Message>, next_msg_id: Option<MessageId>, own_user_id: Option<UserId>); + GetLastSpan : last_span(room: String) -> Option<(Option<MessageId>, Option<MessageId>)>; + GetPath : path(room: String, id: MessageId) -> Path<MessageId>; + GetMsg : msg(room: String, id: MessageId) -> Option<SmallMessage>; + GetFullMsg : full_msg(room: String, id: MessageId) -> Option<Message>; + GetTree : tree(room: String, root_id: MessageId) -> Tree<SmallMessage>; + GetFirstRootId : first_root_id(room: String) -> Option<MessageId>; + GetLastRootId : last_root_id(room: String) -> Option<MessageId>; + GetPrevRootId : prev_root_id(room: String, root_id: MessageId) -> Option<MessageId>; + GetNextRootId : next_root_id(room: String, root_id: MessageId) -> Option<MessageId>; + GetOldestMsgId : oldest_msg_id(room: String) -> Option<MessageId>; + GetNewestMsgId : newest_msg_id(room: String) -> Option<MessageId>; + GetOlderMsgId : older_msg_id(room: String, id: MessageId) -> Option<MessageId>; + GetNewerMsgId : newer_msg_id(room: String, id: MessageId) -> Option<MessageId>; + GetOldestUnseenMsgId : oldest_unseen_msg_id(room: String) -> Option<MessageId>; + GetNewestUnseenMsgId : newest_unseen_msg_id(room: String) -> Option<MessageId>; + GetOlderUnseenMsgId : older_unseen_msg_id(room: String, id: MessageId) -> Option<MessageId>; + GetNewerUnseenMsgId : newer_unseen_msg_id(room: String, id: MessageId) -> Option<MessageId>; GetUnseenMsgsCount : unseen_msgs_count(room: String) -> usize; - SetSeen : set_seen(room: String, id: Snowflake, seen: bool); - SetOlderSeen : set_older_seen(room: String, id: Snowflake, seen: bool); + SetSeen : set_seen(room: String, id: MessageId, seen: bool); + SetOlderSeen : set_older_seen(room: String, id: MessageId, seen: bool); GetChunkAtOffset : chunk_at_offset(room: String, amount: usize, offset: usize) -> Vec<Message>; } @@ -417,8 +417,8 @@ fn insert_msgs( for msg in msgs { insert_msg.execute(named_params! { ":room": room, - ":id": WSnowflake(msg.id), - ":parent": msg.parent.map(WSnowflake), + ":id": WSnowflake(msg.id.0), + ":parent": msg.parent.map(|id| WSnowflake(id.0)), ":previous_edit_id": msg.previous_edit_id.map(WSnowflake), ":time": WTime(msg.time), ":content": msg.content, @@ -430,7 +430,7 @@ fn insert_msgs( ":name": msg.sender.name, ":server_id": msg.sender.server_id, ":server_era": msg.sender.server_era, - ":session_id": msg.sender.session_id, + ":session_id": msg.sender.session_id.0, ":is_staff": msg.sender.is_staff, ":is_manager": msg.sender.is_manager, ":client_address": msg.sender.client_address, @@ -445,8 +445,8 @@ fn insert_msgs( fn add_span( tx: &Transaction<'_>, room: &str, - start: Option<Snowflake>, - end: Option<Snowflake>, + start: Option<MessageId>, + end: Option<MessageId>, ) -> rusqlite::Result<()> { // Retrieve all spans for the room let mut spans = tx @@ -458,8 +458,8 @@ fn add_span( ", )? .query_map([room], |row| { - let start = row.get::<_, Option<WSnowflake>>(0)?.map(|s| s.0); - let end = row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0); + let start = row.get::<_, Option<WSnowflake>>(0)?.map(|s| MessageId(s.0)); + let end = row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)); Ok((start, end)) })? .collect::<Result<Vec<_>, _>>()?; @@ -469,7 +469,7 @@ fn add_span( spans.sort_unstable(); // Combine overlapping spans (including newly added span) - let mut cur_span: Option<(Option<Snowflake>, Option<Snowflake>)> = None; + let mut cur_span: Option<(Option<MessageId>, Option<MessageId>)> = None; let mut result = vec![]; for mut span in spans { if let Some(cur_span) = &mut cur_span { @@ -510,7 +510,11 @@ fn add_span( ", )?; for (start, end) in result { - stmt.execute(params![room, start.map(WSnowflake), end.map(WSnowflake)])?; + stmt.execute(params![ + room, + start.map(|id| WSnowflake(id.0)), + end.map(|id| WSnowflake(id.0)) + ])?; } Ok(()) @@ -564,8 +568,8 @@ impl Request for GetLastSpan { )? .query_row([self.room], |row| { Ok(( - row.get::<_, Option<WSnowflake>>(0)?.map(|s| s.0), - row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0), + row.get::<_, Option<WSnowflake>>(0)?.map(|s| MessageId(s.0)), + row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)), )) }) .optional()?; @@ -593,8 +597,8 @@ impl Request for GetPath { ORDER BY id ASC ", )? - .query_map(params![self.room, WSnowflake(self.id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_map(params![self.room, WSnowflake(self.id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) })? .collect::<rusqlite::Result<_>>()?; let path = Path::new(path); @@ -613,11 +617,11 @@ impl Request for GetMsg { WHERE room = ? AND id = ? ", - params![self.room, WSnowflake(self.id)], + params![self.room, WSnowflake(self.id.0)], |row| { Ok(SmallMessage { - id: row.get::<_, WSnowflake>(0)?.0, - parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0), + id: MessageId(row.get::<_, WSnowflake>(0)?.0), + parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)), time: row.get::<_, WTime>(2)?.0, nick: row.get(3)?, content: row.get(4)?, @@ -645,10 +649,10 @@ impl Request for GetFullMsg { )?; let msg = query - .query_row(params![self.room, WSnowflake(self.id)], |row| { + .query_row(params![self.room, WSnowflake(self.id.0)], |row| { Ok(Message { - id: row.get::<_, WSnowflake>(0)?.0, - parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0), + id: MessageId(row.get::<_, WSnowflake>(0)?.0), + parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)), previous_edit_id: row.get::<_, Option<WSnowflake>>(2)?.map(|s| s.0), time: row.get::<_, WTime>(3)?.0, content: row.get(4)?, @@ -661,7 +665,7 @@ impl Request for GetFullMsg { name: row.get(10)?, server_id: row.get(11)?, server_era: row.get(12)?, - session_id: row.get(13)?, + session_id: SessionId(row.get(13)?), is_staff: row.get(14)?, is_manager: row.get(15)?, client_address: row.get(16)?, @@ -696,10 +700,10 @@ impl Request for GetTree { ORDER BY id ASC ", )? - .query_map(params![self.room, WSnowflake(self.root_id)], |row| { + .query_map(params![self.room, WSnowflake(self.root_id.0)], |row| { Ok(SmallMessage { - id: row.get::<_, WSnowflake>(0)?.0, - parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0), + id: MessageId(row.get::<_, WSnowflake>(0)?.0), + parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)), time: row.get::<_, WTime>(2)?.0, nick: row.get(3)?, content: row.get(4)?, @@ -725,7 +729,9 @@ impl Request for GetFirstRootId { LIMIT 1 ", )? - .query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0)) + .query_row([self.room], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) + }) .optional()?; let _ = self.result.send(tree); Ok(()) @@ -744,7 +750,9 @@ impl Request for GetLastRootId { LIMIT 1 ", )? - .query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0)) + .query_row([self.room], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) + }) .optional()?; let _ = self.result.send(tree); Ok(()) @@ -764,8 +772,8 @@ impl Request for GetPrevRootId { LIMIT 1 ", )? - .query_row(params![self.room, WSnowflake(self.root_id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_row(params![self.room, WSnowflake(self.root_id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) }) .optional()?; let _ = self.result.send(tree); @@ -786,8 +794,8 @@ impl Request for GetNextRootId { LIMIT 1 ", )? - .query_row(params![self.room, WSnowflake(self.root_id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_row(params![self.room, WSnowflake(self.root_id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) }) .optional()?; let _ = self.result.send(tree); @@ -807,7 +815,9 @@ impl Request for GetOldestMsgId { LIMIT 1 ", )? - .query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0)) + .query_row([self.room], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) + }) .optional()?; let _ = self.result.send(tree); Ok(()) @@ -826,7 +836,9 @@ impl Request for GetNewestMsgId { LIMIT 1 ", )? - .query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0)) + .query_row([self.room], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) + }) .optional()?; let _ = self.result.send(tree); Ok(()) @@ -846,8 +858,8 @@ impl Request for GetOlderMsgId { LIMIT 1 ", )? - .query_row(params![self.room, WSnowflake(self.id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_row(params![self.room, WSnowflake(self.id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) }) .optional()?; let _ = self.result.send(tree); @@ -867,8 +879,8 @@ impl Request for GetNewerMsgId { LIMIT 1 ", )? - .query_row(params![self.room, WSnowflake(self.id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_row(params![self.room, WSnowflake(self.id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) }) .optional()?; let _ = self.result.send(tree); @@ -889,7 +901,9 @@ impl Request for GetOldestUnseenMsgId { LIMIT 1 ", )? - .query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0)) + .query_row([self.room], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) + }) .optional()?; let _ = self.result.send(tree); Ok(()) @@ -909,7 +923,9 @@ impl Request for GetNewestUnseenMsgId { LIMIT 1 ", )? - .query_row([self.room], |row| row.get::<_, WSnowflake>(0).map(|s| s.0)) + .query_row([self.room], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) + }) .optional()?; let _ = self.result.send(tree); Ok(()) @@ -930,8 +946,8 @@ impl Request for GetOlderUnseenMsgId { LIMIT 1 ", )? - .query_row(params![self.room, WSnowflake(self.id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_row(params![self.room, WSnowflake(self.id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) }) .optional()?; let _ = self.result.send(tree); @@ -953,8 +969,8 @@ impl Request for GetNewerUnseenMsgId { LIMIT 1 ", )? - .query_row(params![self.room, WSnowflake(self.id)], |row| { - row.get::<_, WSnowflake>(0).map(|s| s.0) + .query_row(params![self.room, WSnowflake(self.id.0)], |row| { + row.get::<_, WSnowflake>(0).map(|s| MessageId(s.0)) }) .optional()?; let _ = self.result.send(tree); @@ -989,7 +1005,7 @@ impl Request for SetSeen { WHERE room = :room AND id = :id ", - named_params! { ":room": self.room, ":id": WSnowflake(self.id), ":seen": self.seen }, + named_params! { ":room": self.room, ":id": WSnowflake(self.id.0), ":seen": self.seen }, )?; Ok(()) } @@ -1005,7 +1021,7 @@ impl Request for SetOlderSeen { AND id <= :id AND seen != :seen ", - named_params! { ":room": self.room, ":id": WSnowflake(self.id), ":seen": self.seen }, + named_params! { ":room": self.room, ":id": WSnowflake(self.id.0), ":seen": self.seen }, )?; Ok(()) } @@ -1029,8 +1045,8 @@ impl Request for GetChunkAtOffset { let messages = query .query_map(params![self.room, self.amount, self.offset], |row| { Ok(Message { - id: row.get::<_, WSnowflake>(0)?.0, - parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| s.0), + id: MessageId(row.get::<_, WSnowflake>(0)?.0), + parent: row.get::<_, Option<WSnowflake>>(1)?.map(|s| MessageId(s.0)), previous_edit_id: row.get::<_, Option<WSnowflake>>(2)?.map(|s| s.0), time: row.get::<_, WTime>(3)?.0, content: row.get(4)?, @@ -1043,7 +1059,7 @@ impl Request for GetChunkAtOffset { name: row.get(10)?, server_id: row.get(11)?, server_era: row.get(12)?, - session_id: row.get(13)?, + session_id: SessionId(row.get(13)?), is_staff: row.get(14)?, is_manager: row.get(15)?, client_address: row.get(16)?, |