mldonkey-next: New Native Android and Linux Clients for mldonkey
In this article, I presented a new client for the great mldonkey service. That client is a WebApp, so it needs to be served by a specific backend. The backend also served as a bridge to allow the WebApp to connect to the mldonkey core. I provided the backend and a fork of the mldonkey core, with additional features and fixes as a docker image.
Now, I built for myself a native app, which is able to connect to an existing mldonkey installation, without the need for a specific backend to serve the WebApp, and without the need for a bridge to connect to the mldonkey core. This native app is cross-platform, but I only tested it on Android and Linux, which are the only systems that I use. If you want to use it on other OSes, you’ll have to adapt it.
As usual, the native app is open source, and you can find it in this repository.
Architecture
The WebApp is an Angular application, which can run in any browser. It is served by a nodejs backend, which is also a bridge to the mldonkey core. mldonkey does not provide a REST interface; it provides a TCP interface and uses a binary protocol to communicate (more info here). The WebApp connects to the bridge, which then forwards the stream to mldonkey.
The native app is a wrapper to this Angular WebApp written in C++ (Qt), which includes a WebView and the bridge. The WebView is the native Android WebView on Android and WebEngine on Linux. The Angular WebApp is embedded into this C++ app, together with a C++ implementation of the bridge needed by the WebApp.
Result
Using the native app is faster and does not require the nodejs backend to work. However, the log stream view won’t be available for the moment. Any official build of mldonkey should properly work out of the box with the native app, without the need for the backend, but, for the time being, you won’t be able to see the system info page, cause that require my fork of mldonkey (the patch I proposed is still pending). So using the docker image I provide is still a bit better.
Installation
Installing the native app is extremely simple. On Linux, an AppImage is provided for x64, so downloading and running it should be sufficient. For Android, an apk is provided for armv7, arm64, x86 and x64.
To automate the updates on Android, you can use Obtainium.