Bedrud مستندات

کلاینت دسکتاپ بدرود یک اپلیکیشن بومی Windows و Linux ساخته شده با Rust و جعبه ابزار UI Slint است. همان تجربه جلسه اصلی فرانت‌اند وب و موبایل را فراهم می‌کند، به یک باینری تکی کامپیل شده بدون وابستگی‌های زمان اجرا.

پشته فناوری

کامپوننتفناوری
زبانRust (پایدار)
جعبه ابزار UISlint 1.x
کلاینت HTTPreqwest (async، TLS)
مدیاLiveKit Rust SDK
ذخیره‌سازیserde_json + keyring سیستم‌عامل (libsecret / Windows Credential Store)
سیستم ساختفضای کار Cargo

پشتیبانی پلتفرم

پلتفرمرندرباینری
Windows 10/11Direct3D 11bedrud-desktop.exe
Linux x86_64OpenGL / Vulkan (از طریق EGL/Wayland/X11)bedrud-desktop
macOS(هنوز نه - از اپلیکیشن وب استفاده کنید)-

طرح منبع

apps/desktop/
├── Cargo.toml              # تعریف crate
├── build.rs                # مرحله کامپایل Slint
├── src/
│   ├── main.rs             # نقطه ورودی - مقداردهی اولیه اپ + حلقه رویداد
│   ├── app.rs              # AppState سطح بالا و منطق راه‌اندازی
│   ├── api/
│   │   ├── client.rs       # کلاینت HTTP مشترک (URL پایه، تزریق JWT)
│   │   ├── auth.rs         # ورود، ثبت‌نام، تازه‌سازی
│   │   ├── rooms.rs        # لیست اتاق، پیوستن، ایجاد
│   │   └── admin.rs        # نقاط پایانی ادمین
│   ├── auth/
│   │   ├── session.rs      # ذخیره JWT و حلقه تازه‌سازی
│   │   └── passkey.rs      # stub کلید عبور FIDO2
│   ├── livekit/
│   │   ├── room.rs         # چرخه عمر اتصال اتاق
│   │   ├── tracks.rs       # مدیریت ترک صوتی/ویدیویی
│   │   └── devices.rs      # شمارش میکروفون / دوربین
│   ├── store/
│   │   ├── instance.rs     # پایداری چند نمونه
│   │   └── settings.rs     # ترجیحات کاربر
│   └── ui/
│       ├── mod.rs
│       └── bridge.rs       # سیم‌کشی callback Slint ↔ Rust
└── ui/
    ├── app.slint            # کامپوننت ریشه، مسیریاب صفحه
    ├── theme.slint          # رنگ‌ها، تایپوگرافی، توکن‌های فاصله
    ├── components/          # Button, Input, Card, Avatar
    ├── auth/                # صفحات ورود و ثبت‌نام
    ├── dashboard/           # لیست اتاق، دیالوگ ایجاد اتاق
    ├── meeting/             # نوار کنترل‌ها، کاشی شرکت‌کننده، چت
    ├── admin/               # پنل ادمین، جدول کاربر
    └── settings.slint       # صفحه تنظیمات

معماری

flowchart TB
    subgraph UI ["Slint UI Layer"]
        direction TB
        SLINT[app.slint<br/>theme.slint<br/>components/ + screens]
    end
 
    subgraph Bridge ["Bridge Layer"]
        BRIDGE[ui/bridge.rs<br/>Slint ↔ Rust wiring]
    end
 
    subgraph Core ["Core Modules"]
        direction TB
        API[api/<br/>client.rs • auth.rs • rooms.rs • admin.rs]
        LIVEKIT[livekit/<br/>room.rs • tracks.rs • devices.rs]
        AUTH[auth/<br/>session.rs • passkey.rs]
        STORE[store/<br/>instance.rs • settings.rs]
    end
 
    SLINT -->|"callbacks /<br/>property bindings"| BRIDGE
    BRIDGE <-->|"async tasks<br/>+ Weak&lt;AppWindow&gt;"| Core
    API <--> LIVEKIT
    AUTH <--> STORE

تصمیمات طراحی کلیدی

  • UI زمان کامپایل Slint - فایل‌های .slint در زمان ساخت از طریق build.rs به Rust کامپایل می‌شوند. هیچ موتور طرح‌بندی در زمان اجرا وجود ندارد؛ UI کاملاً بومی است.
  • bridge.rs به عنوان تنها مرز UI↔logic - تمام callbackهای Slint در یک مکان سیم‌کشی می‌شوند، منطق کسب و کار را خارج از لایه UI نگه می‌دارد و بررسی پل را آسان می‌کند.
  • Weak<AppWindow> در callbackها - هندل‌های UI Slint !Send هستند، بنابراین وظایفان پس‌زمینه یک مرجع Weak ذخیره شده را در نخ UI ارتقا می‌دهند تا ویژگی‌ها را تنظیم کنند، به جای اشتراک‌گذاری هندل در سراسر نخ‌ها.
  • چند نمونه از طریق store/instance.rs - مشابه اپلیکیشن‌های موبایل: نمونه‌ها به یک فایل JSON در دایرکتوری پیکربندی سیستم‌عامل سریالی می‌شوند؛ هر نمونه APIClient و AuthSession خود را دارد.

ساخت محلی

پیش‌نیازها

  • زنجیره ابزار Rust پایدار (rustup toolchain install stable)

  • Linux: libfontconfig، libxkbcommon، libwayland، libgles2، libdbus، libsecret

    sudo apt-get install -y \
      libfontconfig1-dev libxkbcommon-dev libxkbcommon-x11-dev \
      libwayland-dev libgles2-mesa-dev libegl1-mesa-dev \
      libdbus-1-dev libsecret-1-dev \
      libasound2-dev
  • Windows: ابزارهای ساخت Visual Studio (MSVC) با بار کاری C++

ساخت

# ساخت Debug (کامپایل سریع، بدون بهینه‌سازی)
make dev-desktop          # بلافاصله پس از ساخت اپ را اجرا می‌کند
 
# ساخت Release
make build-desktop        # → target/release/bedrud-desktop (Linux)
                           # → target/release/bedrud-desktop.exe (Windows)

یا مستقیماً با Cargo:

cargo build -p bedrud-desktop                          # debug
cargo build -p bedrud-desktop --release                # بهینه‌سازی شده
cargo run   -p bedrud-desktop                          # اجرای فوری

CI

اپلیکیشن دسکتاپ در CI روی هر push به main و در pull requests ساخته می‌شود:

JobRunnerچه چیزی را بررسی می‌کند
Desktop – Build & Testubuntu-latestcargo build، cargo test

ساخت‌های Release دو artifact تولید می‌کنند:

ArtifactRunnerفرمت
bedrud-desktop-linux-x86_64.tar.xzubuntu-latesttar.xz
bedrud-desktop-windows-x86_64.zipwindows-latestzip