Skip to content

Entwicklung

BlueFerry ist in Python geschrieben. Ein unprivilegiertes Backend pro Benutzer besitzt jede Bluetooth-Verbindung zum iPhone und alle gespeicherten Daten. Die Clients für GTK, Qt/Kirigami, Quickshell und das Terminal sowie die CLI sind schlanke Clients einer privaten D-Bus-API auf dem Session-Bus.

flowchart LR
    subgraph clients["Clients"]
        gtk["GTK"]
        qt["Qt/Kirigami"]
        tui["Terminal (TUI)"]
        cli["CLI"]
        bridge["quickshell_bridge"]
    end
    qs["Quickshell"] -- "stdin" --> bridge
    daemon["Backend-Daemon<br>blueferry-backend"]
    bluez["BlueZ<br>(System-D-Bus)"]
    obex["BlueZ OBEX<br>(Session-D-Bus)"]
    state["Private Daten<br>und Mitteilungen"]
    iphone(["iPhone"])
    clients -- "Session-D-Bus" --> daemon
    daemon --> bluez
    daemon --> obex
    daemon --> state
    bluez -- "ANCS über LE" --> iphone
    obex -- "MAP und PBAP über Classic" --> iphone

Weiterlesen

Die Entwicklerdokumentation ist auf Englisch. Auf Deutsch gibt es diesen Überblick und eine Zusammenfassung der Architektur.

Seite Maßgebliche Quelle
Architektur ARCHITECTURE.md: Modulübersicht, Prozessgrenzen, Datenschutzregeln
D-Bus API (Englisch) data/io.weirdware.BlueFerry.xml und src/blueferry/protocol.py
Testing (Englisch) TESTING.md
Bluetooth-Verhalten PROTOCOL.md: beobachtetes Verhalten von iPhone und BlueZ

Die Dokumente im Wurzelverzeichnis des Repositorys sind maßgeblich. Diese Seiten bieten einen Einstieg und verlinken darauf, statt sie zu kopieren. Issues, Pull Requests und Commit-Nachrichten bitte auf Englisch.

Aufbau des Repositorys

Pfad Inhalt
src/blueferry/ Backend, gemeinsame Client-Schicht, CLI, TUI, GTK (ui/), Qt (qt/)
data/ D-Bus-Schnittstellen-XML, Desktop-Dateien, AppStream-Metadaten, Quickshell-Client
systemd/ User-Service und die Hilfs-Unit für die Class of Device mit ihrer Polkit-Regel
packaging/ Rezepte für Arch, DEB und RPM
tests/ Hermetische Testsuite
po/ Übersetzungsinventar
website/public/ Statische Projekt-Website
docs/ Diese Seiten