this changes the behavior when scanning a setup-contact qr-code. instead of waiting, until the whole protocol is finished, which may take something between 10 seconds and several minutes, the dc_join_secure_join() returns instantly; the uis typically show the created chat then. the returned chat-id is the same than if we wait for the protocol to finish, it is the opportunistic one-to-one chat-id, so no changes there. all this works even when both devices are offline. after dc_join_secure_join() returns, however, the usual setup-contact continues. ux-wise, once the protocol finishes, a system-info-messages is added to the chat (also unchanged), this is directly visible, in the chat as well as in the chatlist. while the prococol runs, the user can alredy send message to the chat, or do other things in the app. if the user scans a new qr-code while an existing protocol is not finished yet, the old join will be aborted (however, of course, created chats are kept). we could also allow multiple joins at the same time, however, this would be much more effort that this little change and i am not sure if it is worth the effort. finally, if a verified-group shall be joined, this is not possible instantly, this is not affected by this pr. same for unverified-groups, however, this could maybe be improved, but also here, not sure if it is worth the effort (i think most scans are setup-contact scans)
Delta Chat Rust
Deltachat-core written in Rust
Installing Rust and Cargo
To download and install the official compiler for the Rust programming language, and the Cargo package manager, run the command in your user environment:
curl https://sh.rustup.rs -sSf | sh
Using the CLI client
Compile and run Delta Chat Core command line utility, using cargo:
cargo run --example repl -- /path/to/db
Configure your account (if not already configured):
Delta Chat Core is awaiting your commands.
> set addr your@email.org
> set mail_pw yourpassword
> configure
Connect to your mail server (if already configured):
> connect
Create a contact:
> addcontact yourfriends@email.org
Command executed successfully.
List contacts:
> listcontacts
Contact#10: <name unset> <yourfriends@email.org>
Contact#1: Me √√ <your@email.org>
Create a chat with your friend and send a message:
> createchat 10
Single#10 created successfully.
> chat 10
Single#10: yourfriends@email.org [yourfriends@email.org]
> send hi
Message sent.
If yourfriend@email.org uses DeltaChat, but does not receive message just
sent, it is advisable to check Spam folder. It is known that at least
gmx.com treat such test messages as spam, unless told otherwise with web
interface.
List messages when inside a chat:
> chat
For more commands type:
> help
Development
# run tests
$ cargo test --all
# build c-ffi
$ cargo build -p deltachat_ffi --release
Debugging environment variables
-
DCC_IMAP_DEBUG: if set IMAP protocol commands and responses will be printed -
DCC_MIME_DEBUG: if set outgoing and incoming message will be printed
Expensive tests
Some tests are expensive and marked with #[ignore], to run these
use the --ignored argument to the test binary (not to cargo itself):
$ cargo test -- --ignored
Features
vendored: When using Openssl for TLS, this bundles a vendored version.nightly: Enable nightly only performance and security related features.ringbuf: Enable the use ofslice_dequein pgp.
Language bindings and frontend projects
Language bindings are available for:
The following "frontend" projects make use of the Rust-library or its language bindings: