Alexander Krotov
e9967c32e6
chat: filter parent messages by state instead of UID
...
Since introduction of server message deletion, message may not have
server UID even when it is not a draft or pending message. To handle
such messages correctly, we explicitly check message state.
2020-04-13 17:38:42 +02:00
Alexander Krotov
493a213d41
sql: move QueryReturnedNoRows and NULL handling into query_row_optional()
2020-04-13 17:38:42 +02:00
Alexander Krotov
f65dbee74b
Add basic test for ChatId.parent_is_encrypted()
2020-04-13 17:38:42 +02:00
Alexander Krotov
f51fd1267f
chat: move parent_query() and related methods from Chat to ChatId
2020-04-13 17:38:42 +02:00
Hocuri
711f3f69da
Emit an event when SMTP fails (the same is already done for IMAP)
2020-04-12 18:17:24 +03:00
Friedel Ziegelmayer
24f4cbbb27
refactor: replace failure
...
- failure is deprecated
- thiserror for deriving Error impl
- anyhow for highlevel error handling
2020-04-10 22:39:28 +02:00
Alexander Krotov
d31265895d
Update rPGP to 0.5.2
2020-04-03 12:57:13 +03:00
bjoern
6e35a879a3
Merge pull request #1375 from deltachat/robust-hide-device-expired-messages
...
Make "hide_device_expired_messages" more robust
2020-04-03 11:48:09 +02:00
Alexander Krotov
9c2a3b8a82
Chatlist::try_load: make hide_device_expired_messages errors non-fatal
2020-04-03 12:13:42 +03:00
Alexander Krotov
916fab7d4b
hide_device_expired_messages: allow missing self or device chat
2020-04-03 12:12:56 +03:00
Alexander Krotov
3163ef87c6
imap: display errors with {}, not {:?}
2020-04-01 23:27:15 +03:00
Alexander Krotov
1934181b52
Terminate new SQL statement lines with \
...
This way rustfmt can change indentation. However, care should be taken
to keep a space before each \
2020-04-01 20:06:27 +03:00
Alexander Krotov
1b815a7d96
Display an error if message cannot be trashed
2020-04-01 20:06:27 +03:00
Alexander Krotov
4e0a08106d
ChatId.get_param: remove unnecessary type annotation
2020-04-01 20:06:27 +03:00
Alexander Krotov
e8cc739fbd
Reload chatlist when "delete_device_after" is set
2020-04-01 20:06:27 +03:00
Alexander Krotov
fc57cbfb49
Refactor hiding of expired messages
...
Now there is only one function: hide_device_expired_messages().
If any messages are hidden event DC_EVENT_MSGS_CHANGED(0,0) is emitted
now, which is more correct than DC_EVENT_CHAT_MODIFIED and also triggers
chatlist reload.
2020-04-01 20:06:27 +03:00
Alexander Krotov
7522fec044
Do not emit "chat modified" events when loading chatlist
...
Otherwise chatlist will be loaded twice, once right after hiding expired
messages, and once in response to event emitted by try_load().
2020-04-01 20:06:27 +03:00
Alexander Krotov
237dabb907
Do not hide hidden messages in ChatId.delete_device_expired_messages()
...
This prevents infinite event loop, when chatlist is reloaded in response
to event, and event is emitted by hiding messages before chatlist reload.
2020-04-01 20:06:27 +03:00
Alexander Krotov
3686048ab6
chatlist: hide all expired messages before loading
2020-04-01 20:06:27 +03:00
Alexander Krotov
2bf4c5d7e7
Emit "chat modified" event when messages expire
2020-04-01 20:06:27 +03:00
Alexander Krotov
051d80b2f3
Move delete_device_expired_messages() to ChatId
...
This allows to check if chat is a self-talk or device chat.
Messages are deleted only in viewed chats now.
2020-04-01 20:06:27 +03:00
Alexander Krotov
adaa1e856c
chat: add ChatId.is_self_talk() and ChatId.is_device_talk()
2020-04-01 20:06:27 +03:00
Alexander Krotov
4daa57c98e
delete_device_expired_messages: set text to DELETED for hidden messages
...
This makes debugging easier: DELETED messages should never be shown.
2020-04-01 20:06:27 +03:00
Alexander Krotov
7e67b2cbb3
Do not delete messages from special chats
2020-04-01 20:06:27 +03:00
Alexander Krotov
270d18a88a
Move prune_tombstones() to sql:: and call from housekeeping()
2020-04-01 20:06:27 +03:00
Alexander Krotov
25f8a735a9
get_chat_msgs: remove locally expired messages
...
Expired messages are hidden right before retrieving messages from the
database, so expired messages are not shown to the user.
2020-04-01 20:06:27 +03:00
Alexander Krotov
9eb672ea17
Move removal of chat message tombstones to a separate function
...
DELETE operation may be slow compared to UPDATE. It is better to do in
a separate job.
2020-04-01 20:06:27 +03:00
Alexander Krotov
9febc762da
Add chat::delete_device_expired_messages() function
2020-04-01 20:06:27 +03:00
Alexander Krotov
4b742c220c
Add Context.get_config_delete_device_after() method
...
In contrast to get_config_delete_server_after(), value 1 does not mean
"delete at once", because it does not make sense to delete messages
immediately after receivning them.
2020-04-01 20:06:27 +03:00
Alexander Krotov
9d03d441e1
Add Config::DeleteDeviceAfter option
2020-04-01 20:06:27 +03:00
B. Petersen
ff8b249cc6
For now, 'Saved messages' are auto-deleted from the server, but not from device
2020-04-01 20:06:27 +03:00
B. Petersen
248e6ea5e7
make clippy happy
2020-04-01 20:06:27 +03:00
B. Petersen
be0afdebfd
target comments of @link2xt, fix ci
2020-04-01 20:06:27 +03:00
B. Petersen
9f19d20344
implement message estimating
2020-04-01 20:06:27 +03:00
B. Petersen
aea8a32ba5
add 'estimatedeletion' to repl tool
2020-04-01 20:06:27 +03:00
B. Petersen
d1a4c82937
prototype ffi for ephemeral messages
2020-04-01 20:06:27 +03:00
Alexander Krotov
4f73812673
Prioritize message deletion over message moving
...
If Delta Chat goes online and gets an expired message is in the Inbox,
it should delete it instead of moving and then deleting.
2020-04-01 20:06:27 +03:00
Alexander Krotov
33150615a1
Improve logging for server UID updates in precheck_imf()
...
Log all folders and UIDs and warn about UID changes without folder change.
2020-04-01 20:06:27 +03:00
Alexander Krotov
491f83c86d
Remove ServerFolder and ServerUid job parameters
...
They were used by MarkseenMdnOnImap
2020-04-01 20:06:27 +03:00
Alexander Krotov
41f776763b
Remove MarkseenMdnOnImap
...
MarkseenMdnOnImap stored server folder and UID which are never updated
by update_server_uid. Now hidden entries are created for MDNs, so they
should be handled as ordinary messages.
2020-04-01 20:06:27 +03:00
Alexander Krotov
65fdfac866
Remove unused dest_uid argument from Imap.mv()
...
It was always set to 0 because we don't know the destination UID.
2020-04-01 20:06:27 +03:00
Alexander Krotov
cb0c00bc6d
Log rfc724_mid in DeleteMsgOnImap
2020-04-01 20:06:27 +03:00
Alexander Krotov
ad53678c19
Remove msgs.unlinked column
...
It is not used anymore.
Database version 64 migration introducing this column is also removed.
2020-04-01 20:06:27 +03:00
Alexander Krotov
62097765a6
update_server_uid: set server_uid even for unlinked messages
...
Sometimes message deletion job marks message as unlinked without
actually deleting it. It is possible if the message was already moved
into another folder, possibly by second device, but not detected there
yet. It should be detected later in the other folder, and the
server_uid in the database should be set.
Since introduction of add_imap_deletion_jobs() any expired message
record will be marked as unlinked eventually, because another message
deletion job will be scheduled even if update_server_uid() resurrects
the message once.
2020-04-01 20:06:27 +03:00
Alexander Krotov
efb7280e99
Do not schedule delayed DeleteMsgOnImap jobs
...
All IMAP deletion jobs are scheduled either immediately, or later by
job::add_imap_deletion_jobs().
2020-04-01 20:06:27 +03:00
Alexander Krotov
bdb2a47743
Revert "Automatically delete messages in 2 weeks window only"
...
This may result in messages not being deleted. Optimization and
traffic-saving is postponed for later, one idea is to optimize message
deletion to avoid checking if Message-ID on the server matches
Message-ID in the database.
2020-04-01 20:06:27 +03:00
Alexander Krotov
c4677190be
Postpone DeleteMsgOnImap on error
...
If job returns Status::Finished, it will be deleted. Then
add_imap_deletion_jobs will recreate it immediately if the message is
expired. To actually backoff the job, we should postpone it instead of
removing.
2020-04-01 20:06:27 +03:00
Alexander Krotov
055aba189c
Automatically delete messages in 2 weeks window only
...
This is to avoid creating thousands of jobs when user enables
"delete_server_after" setting for the first time.
If device is offline for more than 2 weeks, some messages may not be
deleted.
2020-04-01 20:06:27 +03:00
Alexander Krotov
314c3d5e78
add_imap_deletion_jobs: check only for DeleteMsgOnImap jobs
...
Other jobs may have different meaning for foreign_id.
Also removed " \" at the end of lines.
2020-04-01 20:06:27 +03:00
Alexander Krotov
6db03356b5
Return AlreadyDone from Imap.delete_msg if message is gone
...
This way DeleteMsgOnImap will remove invalid server_uid from the database.
2020-04-01 20:06:27 +03:00