darkfi 2ae24ea767 app: add chatview2 which supports rich content, no more O(n) scans (worst case O(log n) usually better), and a single chat screen which can be switched between different channel trees. still requires more review. преди 2 седмици
..
assets 1ed1dd35fc app: final bg vid tweaks for release. darken bg on actual chats with a subtle gradient, diff sizes for mobile and desktop. преди 10 месеца
data d1a732b7bf app: reorganize netstatus icon inside chat node to clean up schema and add extra proj assets преди 3 седмици
java 572ddeba22 app: on android use system long press timeout otherwise 400ms consistently for long holds everywhere преди 1 месец
pydrk 5fd59e27a4 app: pydrk CLI update with missing shape fns преди 2 седмици
release c95d1e24e1 app: add `make win64-msvc` target, see README.md, test with `wine darkfi-app.exe` преди 3 седмици
script 2ae24ea767 app: add chatview2 which supports rich content, no more O(n) scans (worst case O(log n) usually better), and a single chat screen which can be switched between different channel trees. still requires more review. преди 2 седмици
src 2ae24ea767 app: add chatview2 which supports rich content, no more O(n) scans (worst case O(log n) usually better), and a single chat screen which can be switched between different channel trees. still requires more review. преди 2 седмици
.gitignore 4e8f200222 app: Add .zip and assets to gitignore преди 9 месеца
Cargo.lock b10532e335 app: on android keeping a handle to the audiomixer open will constantly play a 'silent' side which keeps a wakelock that stops suspend and drains the battery. here to solve the issue we use an experimental api from rodio which enables us to pause the mixer on android. we do this with a special reaper thread that activates 6s after starting a sound to pause the mixer. fucking android преди 2 седмици
Cargo.toml 2ae24ea767 app: add chatview2 which supports rich content, no more O(n) scans (worst case O(log n) usually better), and a single chat screen which can be switched between different channel trees. still requires more review. преди 2 седмици
Dockerfile 30baa2abc5 chore: updated repo links преди 3 седмици
Dockerfile.windows 8c42cc1bb3 app: add missing Dockerfile.windows преди 8 месеца
Makefile 2ae24ea767 app: add chatview2 which supports rich content, no more O(n) scans (worst case O(log n) usually better), and a single chat screen which can be switched between different channel trees. still requires more review. преди 2 седмици
README.md fb3d9ed0ed app: cleanup Makefile targets and add MacOS build instructions to README преди 3 седмици
app.sql 116b3bba4c app: migrate all kvdbs (except chatview) to a unified turso sql db. is easier to work with преди 3 седмици
build.rs c95d1e24e1 app: add `make win64-msvc` target, see README.md, test with `wine darkfi-app.exe` преди 3 седмици
quad.toml 6e23e98d26 app: replace androidx with just normal android classes so we dont need to bundle androidx jar преди 8 месеца
rust-toolchain.toml 33d18f11dd app: migrate from nightly to stable toolchain преди 1 година

README.md

Unix (Linux/Mac)

Install rustup and cargo install cargo-limit, then run:

make

Windows

Built by cross-compiling on Linux using cargo-xwin. Also install rustup.

Distro packages needed (example uses Void Linux):

# xbps-install -S clang lld ninja nasm wget \
    cross-x86_64-w64-mingw32 cross-x86_64-w64-mingw32-crt

The mingw packages provide windres, which is used to embed the app icon and the Windows version resource turso needs (rc.exe does not exist on Linux). On Arch the equivalents are clang lld ninja nasm mingw-w64-gcc, on Debian clang lld ninja-build nasm gcc-mingw-w64-x86-64, and on Fedora clang lld ninja-build nasm mingw64-gcc.

Then set up the Rust side:

$ rustup target add x86_64-pc-windows-msvc
$ rustup component add llvm-tools
$ cargo install --locked cargo-xwin

And build:

$ make win64-msvc

The first run downloads the Windows SDK and MSVC CRT (a couple of GB) and caches them. Using cargo-xwin implies accepting Microsoft's SDK license. The resulting darkfi-app.exe is placed in bin/app/, and can be tested on Linux using wine darkfi-app.exe.

If you get the error "VCRUNTIME140.dll was not found", then install Microsoft Visual C++ Redistributable.

MacOS

Building for MacOS is done on a Mac. The macos target builds a universal (aarch64 + x86_64) binary using cargo-zigbuild. Also install rustup, then:

$ rustup target add aarch64-apple-darwin x86_64-apple-darwin
$ cargo install cargo-zigbuild
$ make macos

The resulting darkfi-app.macos is placed in bin/app/. It is ad-hoc signed and runs as-is.

Android

Make sure you have podman installed. Then run:

# You only need to build the container once
podman build -t apk .

make android

To debug any issues, you can enter an interactive terminal using make podman-cli.

To delete everything, run podman system reset.

Users who prefer to build locally can follow the commands in the Dockerfile. Note that the build.rs hardcodes the SDK/NDK paths so either you follow it exactly (recommended) or modify build.rs.

GrapheneOS

$ adb shell pm list users
    UserInfo{10:Work:30}
$ adb install --user 10 darkfi-app.apk

ADB Over Wifi

Useful for reading the logs without having to be plugged in. First get your local IP addr using adb shell ip -f inet a show wlan0. Make sure "Wireless debugging" is enabled in Developer options. Then run:

adb tcpip 5555
adb connect IPADDR

Copying the APK takes a long time over wifi so best to install APK via USB, then use this just for debugging the app.

In the Makefile, make sure to put the USB device for ADB_DEVICES so the ADB commands work over USB.

Useful Dev Commands

This is just for devs. Users ignore this.

Debugging Missing Symbols

"hb_ft_font_create_referenced"

nm libharfbuzz_rs-5d6b743170eb0207.rlib | grep hb_ | less

Resolve Dependency Issues

cargo tree --target aarch64-linux-android --invert openssl-sys

Examine the APK

apktool d target/android-artifacts/release/apk/darkwallet.apk -o dw-apk