summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoscha <joscha@plugh.de>2022-09-26 10:20:47 +0200
committerJoscha <joscha@plugh.de>2022-09-26 10:20:47 +0200
commit374c4c4f799d05017d4903ca808442ec923ede65 (patch)
treeb1814f2a04a3b80d5c2f155d758ab569b7131749
parent2d88513a283594187c2ce57827dc8d232a94794c (diff)
Update euphoxide to version with id newtype wrappers
-rw-r--r--CHANGELOG.md1
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--src/euph/room.rs14
-rw-r--r--src/euph/small_message.rs10
-rw-r--r--src/export/text.rs4
-rw-r--r--src/ui/euph/inspect.rs6
-rw-r--r--src/ui/euph/nick_list.rs12
-rw-r--r--src/ui/euph/room.rs8
-rw-r--r--src/vault/euph.rs186
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
diff --git a/Cargo.lock b/Cargo.lock
index 5a9960f..c11b6ae 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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",
diff --git a/Cargo.toml b/Cargo.toml
index 16d4141..6ba3aad 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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)?,