Files
telepathy-padfoot/README.md

127 lines
3.6 KiB
Markdown

# Telepathy for Delta Chat
## Who
Authored by [Nick Thomas](https://ur.gs) under the [MIT License](LICENSE).
## What
[Delta Chat](https://delta.chat) is IM over email.
[Telepathy](https://telepathy.freedesktop.org) 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](https://code.ur.gs/lupine/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:
- [x] Connect to DBUS
- [x] Advertise enough properties / interfaces to become visible in Empathy
- [x] Connect to deltachat-core-rust
- [x] Set up an account via autoconfiguration
- [x] Appear as online in Empathy
- [x] Disconnect!
- [ ] Set up an account manually
- [ ] Contacts handling
- [x] 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](https://github.com/rust-lang/rustup) comes highly recommended.
There is a [`rust-toolchain`](rust-toolchain) file that I try to keep synced
with the version of rust that
[`deltachat-core-rust`](https://github.com/deltachat/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](https://github.com/TelepathyIM/telepathy-spec) into
the executable code in `src/telepathy`. This is checked in, but can be
regenerated like so:
```bash
$ 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`.