Telepathy for Delta Chat
Who
Authored by Nick Thomas under the MIT License.
What
Delta Chat is IM over email. Telepathy is a framework for abstracting over multiple IM protocols. This project glues the two together, allowing Telepathy clients to send/receive Delta messages.
Telepathy CMs should have a name that is not the same as their protocol; so this CM is hereby named "padfoot".
My first attempt was purple-plugin-delta. This has some licensing issues (linking libpurple with OpenSSL) that will be resolved with OpenSSL v3.0.0. At least until then, I've lost interest in it; my efforts are going into this version instead.
When
When it's ready.
Where
Here's where we're at right now:
- Connect to DBUS
- Advertise enough properties / interfaces to become visible in Empathy
- Connect to deltachat-core-rust
- Set up an account via autoconfiguration
- Appear as online in Empathy
- Disconnect!
- Set up an account manually
- Contacts handling
- Text messages
- Multimedia messages
- Setup messages
- Import/Export
- Group chats
- Geolocation messages
Why
Mobile IM, mostly. Desktop IM, also. It's ideal for my pinephone, and lighter than the electron desktop client.
At this point, I don't know Rust, I don't know DBUS, I don't know Telepathy, and I don't know Deltachat particularly well either. So this also functions as a learning exercise!
How
Compiling
This project is written in Rust, so you'll need a rust compiler to build it. Rustup comes highly recommended.
There is a rust-toolchain
file that I try to keep synced
with the version of rust that
deltachat-core-rust
uses.
Once you have a working rust compiler, just:
$ cargo build --release
to get a `telepathy-padfoot binary. Drop the release flag to make it build fast.
Cross-compiling amd64 -> i386
If you need a 32-bit binary and you're on an am64 bit system, this seems to
work, as long as you have 32-bit versions of libdbus-1
and libssl
installed.
On Debian, the full sequence looks like:
$ dpkg --print-architecture
amd64
# dpkg --add-architecture i386
$ dpkg --print-foreign-architectures
i386
# apt update
# apt install libdbus-1-dev:i386 libssl-dev:i386
$ rustup target install i686-unknown-linux-gnu
$ PKG_CONFIG_ALLOW_CROSS=1 cargo build --target=i686-unknown-linux-gnu --release
This creates a 32-bit executable at target/i686-unknown-linux-gnu/release/telepathy-padfoot
I don't have a 32-bit machine to test this on, but happy to take fixes for it.
Installing
There is a share/
directory in this project that contains a bunch of files.
They should be placed into /usr/share
, following the same layout. Then put
the binary into /usr/lib/telepathy/telepathy-padfoot
.
I should probably put this into the makefile.
Autogenerated telepathy DBUS bindings
It makes use of the dbus-codegen-rust
crate to convert the
telepathy interface specs into
the executable code in src/telepathy
. This is checked in, but can be
regenerated like so:
$ git submodule init telepathy-spec
$ git submodule update telepathy-spec
$ cargo install dbus-codegen
$ ./scripts/dbus-codegen
dbus-codegen-rust
doesn't seem to handle namespaced attributes properly, so
we modify the XML files in telepathy-spec
... with sed
. The tp:type
attribute is renamed to tp:typehint
.