mirror of
https://github.com/chatmail/core.git
synced 2026-05-17 05:46:30 +03:00
Add IMAP_INBOX_IDLE event
This commit is contained in:
@@ -23,6 +23,10 @@
|
|||||||
- Do not emit "Failed to run incremental vacuum" warnings on success. #4160
|
- Do not emit "Failed to run incremental vacuum" warnings on success. #4160
|
||||||
- Ability to send backup over network and QR code to setup second device #4007
|
- Ability to send backup over network and QR code to setup second device #4007
|
||||||
- Disable buffering during STARTTLS setup. #4190
|
- Disable buffering during STARTTLS setup. #4190
|
||||||
|
- Add `DC_EVENT_IMAP_INBOX_IDLE` event to wait until the account
|
||||||
|
is ready for testing.
|
||||||
|
It is used to fix race condition between fetching
|
||||||
|
existing messages and starting the test.
|
||||||
|
|
||||||
## [1.111.0] - 2023-03-05
|
## [1.111.0] - 2023-03-05
|
||||||
|
|
||||||
|
|||||||
@@ -5705,6 +5705,14 @@ void dc_event_unref(dc_event_t* event);
|
|||||||
*/
|
*/
|
||||||
#define DC_EVENT_IMAP_MESSAGE_MOVED 105
|
#define DC_EVENT_IMAP_MESSAGE_MOVED 105
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted before going into IDLE on the Inbox folder.
|
||||||
|
*
|
||||||
|
* @param data1 0
|
||||||
|
* @param data2 0
|
||||||
|
*/
|
||||||
|
#define DC_EVENT_IMAP_INBOX_IDLE 106
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emitted when a new blob file was successfully written
|
* Emitted when a new blob file was successfully written
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -500,6 +500,7 @@ pub unsafe extern "C" fn dc_event_get_id(event: *mut dc_event_t) -> libc::c_int
|
|||||||
EventType::SmtpMessageSent(_) => 103,
|
EventType::SmtpMessageSent(_) => 103,
|
||||||
EventType::ImapMessageDeleted(_) => 104,
|
EventType::ImapMessageDeleted(_) => 104,
|
||||||
EventType::ImapMessageMoved(_) => 105,
|
EventType::ImapMessageMoved(_) => 105,
|
||||||
|
EventType::ImapInboxIdle => 106,
|
||||||
EventType::NewBlobFile(_) => 150,
|
EventType::NewBlobFile(_) => 150,
|
||||||
EventType::DeletedBlobFile(_) => 151,
|
EventType::DeletedBlobFile(_) => 151,
|
||||||
EventType::Warning(_) => 300,
|
EventType::Warning(_) => 300,
|
||||||
@@ -544,6 +545,7 @@ pub unsafe extern "C" fn dc_event_get_data1_int(event: *mut dc_event_t) -> libc:
|
|||||||
| EventType::SmtpMessageSent(_)
|
| EventType::SmtpMessageSent(_)
|
||||||
| EventType::ImapMessageDeleted(_)
|
| EventType::ImapMessageDeleted(_)
|
||||||
| EventType::ImapMessageMoved(_)
|
| EventType::ImapMessageMoved(_)
|
||||||
|
| EventType::ImapInboxIdle
|
||||||
| EventType::NewBlobFile(_)
|
| EventType::NewBlobFile(_)
|
||||||
| EventType::DeletedBlobFile(_)
|
| EventType::DeletedBlobFile(_)
|
||||||
| EventType::Warning(_)
|
| EventType::Warning(_)
|
||||||
@@ -594,6 +596,7 @@ pub unsafe extern "C" fn dc_event_get_data2_int(event: *mut dc_event_t) -> libc:
|
|||||||
| EventType::SmtpMessageSent(_)
|
| EventType::SmtpMessageSent(_)
|
||||||
| EventType::ImapMessageDeleted(_)
|
| EventType::ImapMessageDeleted(_)
|
||||||
| EventType::ImapMessageMoved(_)
|
| EventType::ImapMessageMoved(_)
|
||||||
|
| EventType::ImapInboxIdle
|
||||||
| EventType::NewBlobFile(_)
|
| EventType::NewBlobFile(_)
|
||||||
| EventType::DeletedBlobFile(_)
|
| EventType::DeletedBlobFile(_)
|
||||||
| EventType::Warning(_)
|
| EventType::Warning(_)
|
||||||
@@ -653,6 +656,7 @@ pub unsafe extern "C" fn dc_event_get_data2_str(event: *mut dc_event_t) -> *mut
|
|||||||
EventType::MsgsChanged { .. }
|
EventType::MsgsChanged { .. }
|
||||||
| EventType::ReactionsChanged { .. }
|
| EventType::ReactionsChanged { .. }
|
||||||
| EventType::IncomingMsg { .. }
|
| EventType::IncomingMsg { .. }
|
||||||
|
| EventType::ImapInboxIdle
|
||||||
| EventType::MsgsNoticed(_)
|
| EventType::MsgsNoticed(_)
|
||||||
| EventType::MsgDelivered { .. }
|
| EventType::MsgDelivered { .. }
|
||||||
| EventType::MsgFailed { .. }
|
| EventType::MsgFailed { .. }
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ pub enum JSONRPCEventType {
|
|||||||
msg: String,
|
msg: String,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// Emitted before going into IDLE on the Inbox folder.
|
||||||
|
ImapInboxIdle,
|
||||||
|
|
||||||
/// Emitted when an new file in the $BLOBDIR was created
|
/// Emitted when an new file in the $BLOBDIR was created
|
||||||
NewBlobFile {
|
NewBlobFile {
|
||||||
file: String,
|
file: String,
|
||||||
@@ -293,6 +296,7 @@ impl From<EventType> for JSONRPCEventType {
|
|||||||
EventType::SmtpMessageSent(msg) => SmtpMessageSent { msg },
|
EventType::SmtpMessageSent(msg) => SmtpMessageSent { msg },
|
||||||
EventType::ImapMessageDeleted(msg) => ImapMessageDeleted { msg },
|
EventType::ImapMessageDeleted(msg) => ImapMessageDeleted { msg },
|
||||||
EventType::ImapMessageMoved(msg) => ImapMessageMoved { msg },
|
EventType::ImapMessageMoved(msg) => ImapMessageMoved { msg },
|
||||||
|
EventType::ImapInboxIdle => ImapInboxIdle,
|
||||||
EventType::NewBlobFile(file) => NewBlobFile { file },
|
EventType::NewBlobFile(file) => NewBlobFile { file },
|
||||||
EventType::DeletedBlobFile(file) => DeletedBlobFile { file },
|
EventType::DeletedBlobFile(file) => DeletedBlobFile { file },
|
||||||
EventType::Warning(msg) => Warning { msg },
|
EventType::Warning(msg) => Warning { msg },
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ class EventType(str, Enum):
|
|||||||
SMTP_MESSAGE_SENT = "SmtpMessageSent"
|
SMTP_MESSAGE_SENT = "SmtpMessageSent"
|
||||||
IMAP_MESSAGE_DELETED = "ImapMessageDeleted"
|
IMAP_MESSAGE_DELETED = "ImapMessageDeleted"
|
||||||
IMAP_MESSAGE_MOVED = "ImapMessageMoved"
|
IMAP_MESSAGE_MOVED = "ImapMessageMoved"
|
||||||
|
IMAP_INBOX_IDLE = "ImapInboxIdle"
|
||||||
NEW_BLOB_FILE = "NewBlobFile"
|
NEW_BLOB_FILE = "NewBlobFile"
|
||||||
DELETED_BLOB_FILE = "DeletedBlobFile"
|
DELETED_BLOB_FILE = "DeletedBlobFile"
|
||||||
WARNING = "Warning"
|
WARNING = "Warning"
|
||||||
|
|||||||
@@ -55,6 +55,11 @@ class ACFactory:
|
|||||||
async def get_online_account(self) -> Account:
|
async def get_online_account(self) -> Account:
|
||||||
account = await self.new_configured_account()
|
account = await self.new_configured_account()
|
||||||
await account.start_io()
|
await account.start_io()
|
||||||
|
while True:
|
||||||
|
event = await account.wait_for_event()
|
||||||
|
print(event)
|
||||||
|
if event.type == EventType.IMAP_INBOX_IDLE:
|
||||||
|
break
|
||||||
return account
|
return account
|
||||||
|
|
||||||
async def get_online_accounts(self, num: int) -> List[Account]:
|
async def get_online_accounts(self, num: int) -> List[Account]:
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ class FFIEventTracker:
|
|||||||
- ac2 is still running FetchExsistingMsgs job and thinks it's an existing, old message
|
- ac2 is still running FetchExsistingMsgs job and thinks it's an existing, old message
|
||||||
- therefore no DC_EVENT_INCOMING_MSG is sent
|
- therefore no DC_EVENT_INCOMING_MSG is sent
|
||||||
"""
|
"""
|
||||||
self.get_info_contains("INBOX: Idle entering")
|
self.get_matching("DC_EVENT_IMAP_INBOX_IDLE")
|
||||||
|
|
||||||
def wait_next_incoming_message(self):
|
def wait_next_incoming_message(self):
|
||||||
"""wait for and return next incoming message."""
|
"""wait for and return next incoming message."""
|
||||||
|
|||||||
@@ -133,6 +133,9 @@ pub enum EventType {
|
|||||||
/// Emitted when an IMAP message has been moved
|
/// Emitted when an IMAP message has been moved
|
||||||
ImapMessageMoved(String),
|
ImapMessageMoved(String),
|
||||||
|
|
||||||
|
/// Emitted before going into IDLE on the Inbox folder.
|
||||||
|
ImapInboxIdle,
|
||||||
|
|
||||||
/// Emitted when an new file in the $BLOBDIR was created
|
/// Emitted when an new file in the $BLOBDIR was created
|
||||||
NewBlobFile(String),
|
NewBlobFile(String),
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ use crate::config::Config;
|
|||||||
use crate::contact::{ContactId, RecentlySeenLoop};
|
use crate::contact::{ContactId, RecentlySeenLoop};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::ephemeral::{self, delete_expired_imap_messages};
|
use crate::ephemeral::{self, delete_expired_imap_messages};
|
||||||
|
use crate::events::EventType;
|
||||||
use crate::imap::{FolderMeaning, Imap};
|
use crate::imap::{FolderMeaning, Imap};
|
||||||
use crate::job;
|
use crate::job;
|
||||||
use crate::location;
|
use crate::location;
|
||||||
@@ -477,6 +478,7 @@ async fn fetch_idle(
|
|||||||
|
|
||||||
connection.connectivity.set_connected(ctx).await;
|
connection.connectivity.set_connected(ctx).await;
|
||||||
|
|
||||||
|
ctx.emit_event(EventType::ImapInboxIdle);
|
||||||
if let Some(session) = connection.session.take() {
|
if let Some(session) = connection.session.take() {
|
||||||
if !session.can_idle() {
|
if !session.can_idle() {
|
||||||
info!(
|
info!(
|
||||||
|
|||||||
Reference in New Issue
Block a user