Skip to content

Commit a288b16

Browse files
committed
feat: add transport column to imap table
1 parent b778cea commit a288b16

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

src/ephemeral/ephemeral_tests.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,8 @@ async fn test_delete_expired_imap_messages() -> Result<()> {
451451
let t = TestContext::new_alice().await;
452452
const HOUR: i64 = 60 * 60;
453453
let now = time();
454+
let transport_id = 1;
455+
let uidvalidity = 12345;
454456
for (id, timestamp, ephemeral_timestamp) in &[
455457
(900, now - 2 * HOUR, 0),
456458
(1000, now - 23 * HOUR - MIN_DELETE_SERVER_AFTER, 0),
@@ -470,8 +472,8 @@ async fn test_delete_expired_imap_messages() -> Result<()> {
470472
.await?;
471473
t.sql
472474
.execute(
473-
"INSERT INTO imap (rfc724_mid, folder, uid, target) VALUES (?,'INBOX',?, 'INBOX');",
474-
(&message_id, id),
475+
"INSERT INTO imap (transport_id, rfc724_mid, folder, uid, target, uidvalidity) VALUES (?, ?,'INBOX',?, 'INBOX', ?);",
476+
(transport_id, &message_id, id, uidvalidity),
475477
)
476478
.await?;
477479
}

src/imap.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -649,15 +649,16 @@ impl Imap {
649649
&_target
650650
};
651651

652+
let transport_id = 1; // FIXME
652653
context
653654
.sql
654655
.execute(
655-
"INSERT INTO imap (rfc724_mid, folder, uid, uidvalidity, target)
656-
VALUES (?1, ?2, ?3, ?4, ?5)
657-
ON CONFLICT(folder, uid, uidvalidity)
656+
"INSERT INTO imap (transport_id, rfc724_mid, folder, uid, uidvalidity, target)
657+
VALUES (?, ?, ?, ?, ?, ?)
658+
ON CONFLICT(transport_id, folder, uid, uidvalidity)
658659
DO UPDATE SET rfc724_mid=excluded.rfc724_mid,
659660
target=excluded.target",
660-
(&message_id, &folder, uid, uid_validity, target),
661+
(transport_id, &message_id, &folder, uid, uid_validity, target),
661662
)
662663
.await?;
663664

@@ -886,6 +887,7 @@ impl Session {
886887
uid_validity = 0;
887888
}
888889

890+
let transport_id = 1; // FIXME
889891
// Write collected UIDs to SQLite database.
890892
context
891893
.sql
@@ -895,12 +897,12 @@ impl Session {
895897
// This may detect previously undetected moved
896898
// messages, so we update server_folder too.
897899
transaction.execute(
898-
"INSERT INTO imap (rfc724_mid, folder, uid, uidvalidity, target)
899-
VALUES (?1, ?2, ?3, ?4, ?5)
900-
ON CONFLICT(folder, uid, uidvalidity)
900+
"INSERT INTO imap (transport_id, rfc724_mid, folder, uid, uidvalidity, target)
901+
VALUES (?, ?, ?, ?, ?, ?)
902+
ON CONFLICT(transport_id, folder, uid, uidvalidity)
901903
DO UPDATE SET rfc724_mid=excluded.rfc724_mid,
902904
target=excluded.target",
903-
(rfc724_mid, folder, uid, uid_validity, target),
905+
(transport_id, rfc724_mid, folder, uid, uid_validity, target),
904906
)?;
905907
}
906908
Ok(())

src/sql/migrations.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,33 @@ CREATE INDEX gossip_timestamp_index ON gossip_timestamp (chat_id, fingerprint);
13271327
.await?;
13281328
}
13291329

1330+
inc_and_check(&mut migration_version, 138)?;
1331+
if dbversion < migration_version {
1332+
sql.execute_migration(
1333+
"CREATE TABLE new_imap (
1334+
id INTEGER PRIMARY KEY AUTOINCREMENT,
1335+
transport_id INTEGER NOT NULL, -- ID of the transport in the `transports` table.
1336+
rfc724_mid TEXT NOT NULL, -- Message-ID header
1337+
folder TEXT NOT NULL, -- IMAP folder
1338+
target TEXT NOT NULL, -- Destination folder, empty to delete.
1339+
uid INTEGER NOT NULL, -- UID
1340+
uidvalidity INTEGER NOT NULL,
1341+
UNIQUE (transport_id, folder, uid, uidvalidity)
1342+
) STRICT;
1343+
1344+
INSERT OR IGNORE INTO new_imap SELECT
1345+
id, 1, rfc724_mid, folder, target, uid, uidvalidity
1346+
FROM imap;
1347+
DROP TABLE imap;
1348+
ALTER TABLE new_imap RENAME TO imap;
1349+
CREATE INDEX imap_folder ON imap(folder);
1350+
CREATE INDEX imap_messageid ON imap(rfc724_mid);
1351+
",
1352+
migration_version,
1353+
)
1354+
.await?;
1355+
}
1356+
13301357
let new_version = sql
13311358
.get_raw_config_int(VERSION_CFG)
13321359
.await?

0 commit comments

Comments
 (0)