From b57c70dd0152f68eef66170f9bcc2ca6a5c91209 Mon Sep 17 00:00:00 2001 From: Joscha Date: Wed, 3 Aug 2022 00:22:07 +0200 Subject: [PATCH] Store room times as epoch time Resets migrations because nobody except me is using cove anyways and this is easier than keeping backwards compatibility. --- src/euph/room.rs | 4 ++-- src/vault/euph.rs | 6 +++--- src/vault/migrate.rs | 21 ++++++++------------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/euph/room.rs b/src/euph/room.rs index e183d99..70afdae 100644 --- a/src/euph/room.rs +++ b/src/euph/room.rs @@ -7,7 +7,6 @@ use anyhow::bail; use cookie::{Cookie, CookieJar}; use log::{error, info, warn}; use parking_lot::Mutex; -use time::OffsetDateTime; use tokio::sync::{mpsc, oneshot}; use tokio::{select, task}; use tokio_tungstenite::tungstenite; @@ -15,6 +14,7 @@ use tokio_tungstenite::tungstenite::client::IntoClientRequest; use tokio_tungstenite::tungstenite::handshake::client::Response; use tokio_tungstenite::tungstenite::http::{header, HeaderValue}; +use crate::euph::api::Time; use crate::macros::ok_or_return; use crate::ui::UiEvent; use crate::vault::{EuphVault, Vault}; @@ -212,7 +212,7 @@ impl State { } Data::SnapshotEvent(d) => { info!("e&{}: successfully joined", self.name); - self.vault.join(OffsetDateTime::now_utc()); + self.vault.join(Time::now()); self.last_msg_id = Some(d.log.last().map(|m| m.id)); self.vault.add_messages(d.log, None); } diff --git a/src/vault/euph.rs b/src/vault/euph.rs index 863f77a..982e4a3 100644 --- a/src/vault/euph.rs +++ b/src/vault/euph.rs @@ -86,7 +86,7 @@ impl EuphVault { &self.room } - pub fn join(&self, time: OffsetDateTime) { + pub fn join(&self, time: Time) { let request = EuphRequest::Join { room: self.room.clone(), time, @@ -221,7 +221,7 @@ pub(super) enum EuphRequest { }, Join { room: String, - time: OffsetDateTime, + time: Time, }, Delete { room: String, @@ -382,7 +382,7 @@ impl EuphRequest { Ok(()) } - fn join(conn: &mut Connection, room: String, time: OffsetDateTime) -> rusqlite::Result<()> { + fn join(conn: &mut Connection, room: String, time: Time) -> rusqlite::Result<()> { conn.execute( " INSERT INTO euph_rooms (room, first_joined, last_joined) diff --git a/src/vault/migrate.rs b/src/vault/migrate.rs index 4a0904f..5b9762f 100644 --- a/src/vault/migrate.rs +++ b/src/vault/migrate.rs @@ -7,6 +7,7 @@ pub fn migrate(conn: &mut Connection) -> rusqlite::Result<()> { tx.query_row("SELECT * FROM pragma_user_version", [], |r| r.get(0))?; let total = MIGRATIONS.len(); + assert!(user_version <= total, "malformed database schema"); for (i, migration) in MIGRATIONS.iter().enumerate().skip(user_version) { println!("Migrating vault from {} to {} (out of {})", i, i + 1, total); migration(&mut tx)?; @@ -16,15 +17,15 @@ pub fn migrate(conn: &mut Connection) -> rusqlite::Result<()> { tx.commit() } -const MIGRATIONS: [fn(&mut Transaction<'_>) -> rusqlite::Result<()>; 2] = [m1, m2]; +const MIGRATIONS: [fn(&mut Transaction<'_>) -> rusqlite::Result<()>; 1] = [m1]; fn m1(tx: &mut Transaction<'_>) -> rusqlite::Result<()> { tx.execute_batch( " CREATE TABLE euph_rooms ( room TEXT NOT NULL PRIMARY KEY, - first_joined TEXT NOT NULL, - last_joined TEXT NOT NULL + first_joined INT NOT NULL, + last_joined INT NOT NULL ) STRICT; CREATE TABLE euph_msgs ( @@ -67,6 +68,10 @@ fn m1(tx: &mut Transaction<'_>) -> rusqlite::Result<()> { CHECK (start IS NULL OR end IS NOT NULL) ) STRICT; + CREATE TABLE euph_cookies ( + cookie TEXT NOT NULL + ) STRICT; + CREATE INDEX euph_idx_msgs_room_id_parent ON euph_msgs (room, id, parent); @@ -75,13 +80,3 @@ fn m1(tx: &mut Transaction<'_>) -> rusqlite::Result<()> { ", ) } - -fn m2(tx: &mut Transaction<'_>) -> rusqlite::Result<()> { - tx.execute_batch( - " - CREATE TABLE euph_cookies ( - cookie TEXT NOT NULL - ) STRICT; - ", - ) -}