Skip to content

Commit 7d5bedd

Browse files
committed
fix: take transport_id into account when using imap table
1 parent e34fee7 commit 7d5bedd

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/download.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,15 @@ pub(crate) async fn download_msg(
153153
return Ok(());
154154
};
155155

156+
let transport_id = session.transport_id();
156157
let row = context
157158
.sql
158159
.query_row_optional(
159-
"SELECT uid, folder FROM imap WHERE rfc724_mid=? AND target!=''",
160-
(&msg.rfc724_mid,),
160+
"SELECT uid, folder FROM imap
161+
WHERE rfc724_mid=?
162+
AND transport_id=?
163+
AND target!=''",
164+
(&msg.rfc724_mid, transport_id),
161165
|row| {
162166
let server_uid: u32 = row.get(0)?;
163167
let server_folder: String = row.get(1)?;

src/imap.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -916,7 +916,7 @@ impl Session {
916916
context
917917
.sql
918918
.transaction(move |transaction| {
919-
transaction.execute("DELETE FROM imap WHERE folder=?", (folder,))?;
919+
transaction.execute("DELETE FROM imap WHERE transport_id=? AND folder=?", (transport_id, folder,))?;
920920
for (uid, (rfc724_mid, target)) in &msgs {
921921
// This may detect previously undetected moved
922922
// messages, so we update server_folder too.
@@ -1054,14 +1054,16 @@ impl Session {
10541054
///
10551055
/// This is the only place where messages are moved or deleted on the IMAP server.
10561056
async fn move_delete_messages(&mut self, context: &Context, folder: &str) -> Result<()> {
1057+
let transport_id = self.transport_id();
10571058
let rows = context
10581059
.sql
10591060
.query_map_vec(
10601061
"SELECT id, uid, target FROM imap
1061-
WHERE folder = ?
1062-
AND target != folder
1063-
ORDER BY target, uid",
1064-
(folder,),
1062+
WHERE folder = ?
1063+
AND transport_id = ?
1064+
AND target != folder
1065+
ORDER BY target, uid",
1066+
(folder, transport_id),
10651067
|row| {
10661068
let rowid: i64 = row.get(0)?;
10671069
let uid: u32 = row.get(1)?;
@@ -1277,10 +1279,10 @@ impl Session {
12771279
};
12781280
let is_seen = fetch.flags().any(|flag| flag == Flag::Seen);
12791281
if is_seen
1280-
&& let Some(chat_id) = mark_seen_by_uid(context, folder, uid_validity, uid)
1282+
&& let Some(chat_id) = mark_seen_by_uid(context, transport_id, folder, uid_validity, uid)
12811283
.await
12821284
.with_context(|| {
1283-
format!("failed to update seen status for msg {folder}/{uid}")
1285+
format!("Transport {transport_id}: Failed to update seen status for msg {folder}/{uid}")
12841286
})?
12851287
{
12861288
updated_chat_ids.insert(chat_id);
@@ -2359,6 +2361,7 @@ pub(crate) async fn prefetch_should_download(
23592361
/// Returns updated chat ID if any message was marked as seen.
23602362
async fn mark_seen_by_uid(
23612363
context: &Context,
2364+
transport_id: u32,
23622365
folder: &str,
23632366
uid_validity: u32,
23642367
uid: u32,
@@ -2369,12 +2372,13 @@ async fn mark_seen_by_uid(
23692372
"SELECT id, chat_id FROM msgs
23702373
WHERE id > 9 AND rfc724_mid IN (
23712374
SELECT rfc724_mid FROM imap
2372-
WHERE folder=?1
2373-
AND uidvalidity=?2
2374-
AND uid=?3
2375+
WHERE transport_id=?
2376+
AND folder=?
2377+
AND uidvalidity=?
2378+
AND uid=?
23752379
LIMIT 1
23762380
)",
2377-
(&folder, uid_validity, uid),
2381+
(transport_id, &folder, uid_validity, uid),
23782382
|row| {
23792383
let msg_id: MsgId = row.get(0)?;
23802384
let chat_id: ChatId = row.get(1)?;

0 commit comments

Comments
 (0)