Commit Graph

8825 Commits

Author SHA1 Message Date
Hocuri
a49dfeca6e refactor: Remove Message.set_file() / dc_msg_set_file() and related code (#6558)
Now that we are deduplicating everywhere, we can get rid of some code.

The old python bindings did not get an optional `name` parameter because
they are deprecated anyway, but it would be easy to add it.
2025-02-22 10:47:52 +01:00
WofWca
253331b7fd feat: jsonrpc: add MessageObject.is_edited
This is a follow-up to
https://github.com/deltachat/deltachat-core-rust/pull/6550.
Partially addresses
https://github.com/deltachat/deltachat-desktop/issues/4694.
2025-02-22 12:19:33 +04:00
bjoern
85cbfde6e4 edit message's text (#6550)
> _greetings from the ice of the deutsche bahn 🚂🚃🚃🚃 always a pleasure to
see how well delta chat meanwhile performs in bad networks :)_

this PR adds an API to request other chat members to replace the message
text of an already sent message. scope is mainly to fix typos. this
feature is known from whatsapp, telegram, signal, and is
[requested](https://support.delta.chat/t/retract-edit-sent-messages/1918)
[since](https://support.delta.chat/t/edit-messages-in-delta-chat/899)
[years](https://github.com/deltachat/deltachat-android/issues/198).

technically, a message with an
[`Obsoletes:`](https://datatracker.ietf.org/doc/html/rfc2076#section-3.6)
header is sent out.

```
From: alice@nine
To: bob@nine
Message-ID: 2000@nine
In-Reply-To: 1000@nine
Obsoletes: 1000@nine

Edited: this is the new text
```

the body is the new text, prefixed by the static text `Edited:` (which
is not a header). the latter is to make the message appear more nicely
in Non-Delta-MUA. save for the `In-Reply-To` header. the `Edited:`
prefix is removed by Delta Chat on receiving.

headers should be protected and moved to e2ee part as usual.

corrected message text is flagged, and UI should show this state, in
practise as "Edited" beside the date.

in case, the original message is not found, nothing happens and the
correction message is trashes (assuming the original was deleted).
question: is the `Obsoletes:` header a good choice? i _thought_ there is
some more specifica RFC, but i cannot find sth. in any case, it should
be an header that is not used otherwise by MUA, to make sure no wanted
messages disappear.

what is NOT done and out of scope:
- optimise if messages are not yet sent out. this is doable, but
introduces quite some cornercaes and may not be worth the effort
- replaces images or other attachments. this is also a bit cornercasy
and beyond "typo fixing", and better be handled by "delete for me and
others" (which may come soon, having the idea now, it seems easy :)
- get edit history in any way. not sure if this is worth the effort,
remember, as being a private messenger, we assume trust among chat
members. it is also questionable wrt privacy, seized devices etc.
- add text where nothing was before; again, scope is "typo fixing",
better avoid cornercases
- saved messages are not edited (this is anyway questionable)
- quoted texts, that are used for the case the original message is
deleted, are not updated
- edits are ignored when the original message is not there yet (out of
order, not yet downloaded)
- message status indicator does not show if edits are sent out or not -
similar to reactions, webxdc updates, sync messages. signal has the same
issue :) still, connectivity should show if there are messages pending

<img width="366" alt="Screenshot 2025-02-17 at 17 25 02"
src="https://github.com/user-attachments/assets/a4a53996-438b-47ef-9004-2c9062eea5d7"
/>

corresponding iOS branch (no PR yet):
https://github.com/deltachat/deltachat-ios/compare/main...r10s/edit-messages

---------

Co-authored-by: l <link2xt@testrun.org>
2025-02-21 15:25:42 +00:00
Hocuri
85cd3836e0 refactor: Move even even more tests into their own files (#6559)
With this, all the tests of the "big" files are in their own files, so
this is likely the last PR like this.
2025-02-20 20:29:11 +00:00
link2xt
bbb267331c feat: allow scanning multiple securejoin QR codes in parallel 2025-02-20 18:25:45 +00:00
link2xt
449ba4e192 ci: remove deprecated DeterminateSystems/magic-nix-cache-action 2025-02-20 12:43:48 +00:00
link2xt
1ad72fd826 build(nix): update hashes of git dependencies 2025-02-19 22:51:40 +00:00
Hocuri
4a25860e22 feat: Deduplicate blob files in the JsonRPC API (#6470)
This makes it so that files will be deduplicated when using the JsonRPC
API.

@nicodh and @WofWca you know the Desktop code and how it is using the
API, so, you can probably tell me whether this is a good way of changing
the JsonRPC code - feel free to push changes directly to this PR here!

This PR here changes the existing functions instead of creating new
ones; we can alternatively create new ones if it allows for a smoother
transition.

This brings a few changes:
- If you pass a file that is already in the blobdir, it will be renamed
to `<hash>.<extension>` immediately (previously, the filename on the
disk stayed the same)
- If you pass a file that's not in the blobdir yet, it will be copied to
the blobdir immediately (previously, it was copied to the blobdir later,
when sending)
- If you create a file and then pass it to `create_message()`, it's
better to directly create it in the blobdir, since it doesn't need to be
copied.
- You must not write to the files after they were passed to core,
because otherwise, the hash will be wrong. So, if Desktop recodes videos
or so, then the video file mustn't just be overwritten. What you can do
instead is write the recoded video to a file with a random name in the
blobdir and then create a new message with the new attachment. If
needed, we can also create a JsonRPC for `set_file_and_deduplicate()`
that replaces the file on an existing message.

In order to test whether everything still works, the desktop issue has a
list of things to test:
https://github.com/deltachat/deltachat-desktop/issues/4498
Core issue: #6265

---------

Co-authored-by: l <link2xt@testrun.org>
2025-02-19 22:57:40 +01:00
link2xt
67f768fec0 refactor: use mail-builder instead of lettre_email 2025-02-18 21:29:35 +00:00
link2xt
82ea4e2ae2 chore: update some dependencies 2025-02-18 17:29:21 +00:00
Nico de Haen
e0dfba87b6 feat: save messages API in JSON RPC (#6554)
relates to https://github.com/deltachat/deltachat-desktop/issues/4596
2025-02-18 16:41:04 +01:00
link2xt
0f449cc7eb chore: update some dependencies 2025-02-18 11:19:53 +00:00
link2xt
48fcf66002 chore(release): prepare for 1.155.6 v1.155.6 2025-02-17 20:42:48 +00:00
link2xt
8eff4f40ff fix: show padlock when the message is not sent over the network 2025-02-17 20:30:52 +00:00
link2xt
20d6f0f2ca fix: do not allow non-members to change ephemeral timer settings 2025-02-17 13:44:18 +00:00
link2xt
546d13ef72 fix: use dedicated ID for sync messages affecting device chat
Otherwise `device@localhost` chat may appear on the other device.
2025-02-17 12:33:35 +00:00
link2xt
130bef8c4a feat: use UUID v4 to generate Message-IDs
This hopefully does not trigger Apple spam filter
which seems to pass thorugh Message-IDs with hyphens.
It is not confirmed, but better blend in
by mimicking existing popular email
where possible.
2025-02-17 12:11:51 +00:00
link2xt
41c2a80bd7 feat: sort past members by the timestamp of removal 2025-02-17 09:33:31 +00:00
link2xt
4f71c77ae4 build: remove deprecated node module 2025-02-15 23:06:49 +00:00
link2xt
96704eb73d ci: audit workflows with zizmor 2025-02-15 01:36:46 +00:00
WofWca
5c3d1e7dae docs: improve docstrings (#6496)
Co-authored-by: Hocuri <hocuri@gmx.de>
2025-02-14 23:11:11 +00:00
link2xt
4fb24d05dc chore(release): prepare for 1.155.5 v1.155.5 2025-02-14 01:07:16 +00:00
Hocuri
9b6ef5e54f fix: get_filename() is now guaranteed to return a valid filename (#6537)
With iOS and Desktop copying the file to a to a temp file with the name
of `get_filename()`, it should be sanitized first.

The PR can be reviewed commit-by-commit or all at once.
2025-02-13 11:26:23 +00:00
link2xt
81e9628ab7 refactor: do not cancel the task returned from async_imap Handle.wait_with_timeout
This task is not guaranteed to be cancellation-safe
and provides a stop token for safe cancellation instead.
We should always cancel the task properly
and not by racing against another future.
Otherwise following call to Handle.done()
may work on IMAP session that is in the middle
of response, for example.
2025-02-10 20:12:36 +00:00
link2xt
aaa02968d3 chore: add RUSTSEC-2025-0006 to deny.toml 2025-02-10 20:11:47 +00:00
link2xt
302aa5a5f7 chore(release): prepare for 1.155.4 v1.155.4 2025-02-10 19:19:03 +00:00
bjoern
8bddd455a7 fix: accept QR codes with 'broken' JSON (#6528)
this converts old QR codes to the new format, in an hacky, but simple
way, see #6518 for more details and for code snippet


then QR code change is esp. bad as ppl will have different versions for
some days at least, weakening overall UX, esp. of first-time-users that
may come to delta because of praised, seamless multidevice ... :)


i tested in https://github.com/deltachat/deltachat-ios/pull/2595 that
this actually fixes the problem, and there is no deeper issue with
changed chashes or so - seemed not to be the case, at least, with this
hack, core accepts QR codes from the released 1.52-and-before series

this hack gives user time to update, it can be removed after some months
(we can also remove the old BACKUP qr code alltogether then)

we should still not wait too long with the PR as there are already
versions out with the "new/bad" QR code (and growing, as new iOS
installations will get the new format, one cannot revert a version, only
pause rollout)

---------

Co-authored-by: link2xt <link2xt@testrun.org>
2025-02-10 15:30:23 +00:00
link2xt
a0ff0d71bc fix: do not include CRLF before MIME boundary in the part body
This change adds a test and updates mailparse from 0.15.0 to 0.16.0.
mailparse 0.16.0 includes a fix for the bug
that resulted in CRLF being included at the end of the body.
Workaround for the bug in the `pk_validate` function is also removed.
2025-02-10 12:35:27 +00:00
link2xt
068726453e ci: upgrade Rust from 1.84.0 to 1.84.1 2025-02-09 17:34:41 +00:00
link2xt
0973a46245 fix: make vCard parsing more robust in case of trailing newlines
Contacts should be added only if there is an END:VCARD
detected, not because we found the end of file.
2025-02-06 22:25:47 +00:00
link2xt
e22d980845 fix: use CRLF newlines in vCards
This is a requirement from
<https://datatracker.ietf.org/doc/html/rfc6350#section-3.2>
2025-02-06 21:54:12 +00:00
Hocuri
0c0afead2c refactor: Move even more tests into their own files (#6521)
As always, I moved the tests from the biggest files. I left out
`mimefactory.rs` because @link2xt has an active PR modifying the tests.
2025-02-06 22:37:25 +01:00
WofWca
3eae9cb30c improvement: add MessageQuote.chat_id
For the "Reply Privately" feature.

Co-authored-by: Hocuri <hocuri@gmx.de>
2025-02-05 10:42:32 +00:00
link2xt
4ef6788ffd chore(release): prepare for 1.155.3 v1.155.3 2025-02-05 05:56:25 +00:00
link2xt
4198ed1efb fix: store device token in IMAP METADATA on each connection
APNS tokens never expire unless
the user uninstalls the application.
Because of this in most cases
the token remains valid forever
and chatmail server never removes the token
even if it is unencrypted
or the user has removed Delta Chat profile
from the device but not the whole application.

We want to modify chatmail servers
to remember the last time the token was stored
and remove them after some time.
Before we do this, we need to modify
the client to store the device token
each time so the server knows which tokens are used
and can update their timestamps.
2025-02-05 05:36:50 +00:00
link2xt
6f5620dad5 chore: update futures-concurrency
This removes two duplicate dependencies.
2025-02-05 03:21:13 +00:00
link2xt
1d55458781 chore: upgrade iroh from 0.31 to 0.32 2025-02-04 19:45:01 +00:00
link2xt
6297bb967a chore: upgrade iroh from 0.30 to 0.31 2025-02-04 19:16:50 +00:00
link2xt
0040c17892 test: make sure DCBACKUP2 compatibility does not break again
QR code format changed because `NodeAddr` serialization
changed between iroh 0.29.0 and iroh 0.30.0.
We have already released iroh 0.30.0,
so the test at least makes change we don't break compatibility again.
2025-02-04 19:03:46 +00:00
link2xt
258b5cde70 chore: update pgp to 0.15 2025-02-04 17:55:58 +00:00
dependabot[bot]
a58103ae4a Merge pull request #6502 from deltachat/dependabot/cargo/rustls-pki-types-1.11.0 2025-02-03 18:01:21 +00:00
dependabot[bot]
bf36a479db Merge pull request #6498 from deltachat/dependabot/cargo/log-0.4.25 2025-02-03 18:01:06 +00:00
dependabot[bot]
9a2924ed88 Merge pull request #6513 from deltachat/dependabot/cargo/uuid-1.12.1 2025-02-03 17:58:36 +00:00
dependabot[bot]
4be4a3c72f Merge pull request #6509 from deltachat/dependabot/cargo/serde_json-1.0.138 2025-02-03 17:58:16 +00:00
dependabot[bot]
7b6ba0e011 Merge pull request #6514 from deltachat/dependabot/cargo/data-encoding-2.7.0 2025-02-03 17:58:00 +00:00
dependabot[bot]
4e601c31b4 chore(cargo): bump data-encoding from 2.6.0 to 2.7.0
Bumps [data-encoding](https://github.com/ia0/data-encoding) from 2.6.0 to 2.7.0.
- [Commits](https://github.com/ia0/data-encoding/commits)

---
updated-dependencies:
- dependency-name: data-encoding
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 16:46:49 +00:00
dependabot[bot]
fa0382da2d chore(cargo): bump serde_json from 1.0.134 to 1.0.138
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.134 to 1.0.138.
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.134...v1.0.138)

---
updated-dependencies:
- dependency-name: serde_json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 16:44:22 +00:00
dependabot[bot]
64bd05aa44 chore(cargo): bump log from 0.4.22 to 0.4.25
Bumps [log](https://github.com/rust-lang/log) from 0.4.22 to 0.4.25.
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.22...0.4.25)

---
updated-dependencies:
- dependency-name: log
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 16:44:18 +00:00
dependabot[bot]
e651001a57 chore(cargo): bump rustls-pki-types from 1.10.1 to 1.11.0
Bumps [rustls-pki-types](https://github.com/rustls/pki-types) from 1.10.1 to 1.11.0.
- [Release notes](https://github.com/rustls/pki-types/releases)
- [Commits](https://github.com/rustls/pki-types/compare/v/1.10.1...v/1.11.0)

---
updated-dependencies:
- dependency-name: rustls-pki-types
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 16:44:06 +00:00
dependabot[bot]
8c251afeb1 Merge pull request #6506 from deltachat/dependabot/cargo/rustls-0.23.22 2025-02-03 16:15:14 +00:00