کلاینت دسکتاپ بدرود یک اپلیکیشن بومی Windows و Linux ساخته شده با Rust و جعبه ابزار UI Slint است. همان تجربه جلسه اصلی فرانتاند وب و موبایل را فراهم میکند، به یک باینری تکی کامپیل شده بدون وابستگیهای زمان اجرا.
پشته فناوری
| کامپوننت | فناوری |
|---|---|
| زبان | Rust (پایدار) |
| جعبه ابزار UI | Slint 1.x |
| کلاینت HTTP | reqwest (async، TLS) |
| مدیا | LiveKit Rust SDK |
| ذخیرهسازی | serde_json + keyring سیستمعامل (libsecret / Windows Credential Store) |
| سیستم ساخت | فضای کار Cargo |
پشتیبانی پلتفرم
| پلتفرم | رندر | باینری |
|---|---|---|
| Windows 10/11 | Direct3D 11 | bedrud-desktop.exe |
| Linux x86_64 | OpenGL / 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<AppWindow>"| 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،libsecretsudo 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 ساخته میشود:
| Job | Runner | چه چیزی را بررسی میکند |
|---|---|---|
Desktop – Build & Test | ubuntu-latest | cargo build، cargo test |
ساختهای Release دو artifact تولید میکنند:
| Artifact | Runner | فرمت |
|---|---|---|
bedrud-desktop-linux-x86_64.tar.xz | ubuntu-latest | tar.xz |
bedrud-desktop-windows-x86_64.zip | windows-latest | zip |