Compare commits
95
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b41f63d12 | ||
|
|
91efff75bc | ||
|
|
fd0393bf7b | ||
|
|
6b939db37b | ||
|
|
4743c3eb8e | ||
|
|
5c99f3eb77 | ||
|
|
817ecf67be | ||
|
|
1da3c08bbe | ||
|
|
5112338c0f | ||
|
|
960eab965d | ||
|
|
848f4e7de7 | ||
|
|
f22438d960 | ||
|
|
174d10772d | ||
|
|
badffe9b8d | ||
|
|
5a4e11a459 | ||
|
|
45b878545a | ||
|
|
d5e8fdcaaa | ||
|
|
38bac5b8e6 | ||
|
|
e07a24c7c8 | ||
|
|
ea2354fad5 | ||
|
|
ba64cb53fa | ||
|
|
3622243271 | ||
|
|
67e5c1ed7a | ||
|
|
218afbb998 | ||
|
|
d2e82caf54 | ||
|
|
1cde1e63d9 | ||
|
|
cbc3463643 | ||
|
|
3d349f05b6 | ||
|
|
36ce1ed451 | ||
|
|
a4a7464354 | ||
|
|
5e1c10cea3 | ||
|
|
c82c9ad9e9 | ||
|
|
294420ed65 | ||
|
|
10cd5c6a1b | ||
|
|
cb205fa9ee | ||
|
|
9125f7f6f3 | ||
|
|
4d8e882735 | ||
|
|
d60fd6bb5e | ||
|
|
557dc6c900 | ||
|
|
fe353e1c5d | ||
|
|
a61f976546 | ||
|
|
05391ea1fe | ||
|
|
5884453c42 | ||
|
|
d896bfb720 | ||
|
|
96832608b0 | ||
|
|
ecb4057e99 | ||
|
|
1490be467c | ||
|
|
b1fddbbcad | ||
|
|
7e7887d1f2 | ||
|
|
665b6fa736 | ||
|
|
1cf605e5db | ||
|
|
542a854612 | ||
|
|
f8e7773e4c | ||
|
|
832176866b | ||
|
|
fab2dfce4a | ||
|
|
d3f32fc053 | ||
|
|
2aa141b410 | ||
|
|
eea3d2af8a | ||
|
|
f3dafb451d | ||
|
|
1da69dd44e | ||
|
|
df8606251f | ||
|
|
bfd91104f7 | ||
|
|
6eb50998fa | ||
|
|
1372d42350 | ||
|
|
500fa45c73 | ||
|
|
0d24ea7795 | ||
|
|
d4ac469ac0 | ||
|
|
f649b8eb9f | ||
|
|
0ef4c239f8 | ||
|
|
e69c5f7a7c | ||
|
|
abf61f5c32 | ||
|
|
b72398d090 | ||
|
|
a9ccc91090 | ||
|
|
40f7f12834 | ||
|
|
870ef2a739 | ||
|
|
539a570bd0 | ||
|
|
5b8c9d76cf | ||
|
|
9e086b8a4b | ||
|
|
ee5de0ff47 | ||
|
|
2604e35a8c | ||
|
|
4969d0638d | ||
|
|
0a200c22bd | ||
|
|
4a9de759b9 | ||
|
|
718fd88351 | ||
|
|
76209c9cad | ||
|
|
905f5987fd | ||
|
|
5077b35068 | ||
|
|
784415834e | ||
|
|
19e4844a8e | ||
|
|
7d4a9d9c95 | ||
|
|
c43c2b73ba | ||
|
|
682ae73ab7 | ||
|
|
667f0eb1c2 | ||
|
|
d256c008f4 | ||
|
|
e5d1bd8590 |
-137
@@ -1,137 +0,0 @@
|
||||
# Contributing to Driftwood
|
||||
|
||||
## Building from source
|
||||
|
||||
### Dependencies
|
||||
|
||||
- Rust 1.75+ and Cargo
|
||||
- GTK 4.16+ development headers (`libgtk-4-dev` or `gtk4-devel`)
|
||||
- libadwaita 1.6+ development headers (`libadwaita-1-dev` or `libadwaita-devel`)
|
||||
- SQLite 3 development headers
|
||||
- gettext development headers
|
||||
- `glib-compile-resources` and `glib-compile-schemas` (from `libglib2.0-dev-bin`)
|
||||
|
||||
### Quick start
|
||||
|
||||
```sh
|
||||
git clone https://github.com/driftwood-app/driftwood
|
||||
cd driftwood
|
||||
cargo build
|
||||
cargo run
|
||||
```
|
||||
|
||||
### Running tests
|
||||
|
||||
```sh
|
||||
cargo test
|
||||
```
|
||||
|
||||
## Project structure
|
||||
|
||||
```
|
||||
driftwood/
|
||||
Cargo.toml # Rust package manifest
|
||||
build.rs # GResource and GSettings compilation
|
||||
meson.build # Meson build system for installation
|
||||
|
||||
src/
|
||||
main.rs # Entry point, GResource init, CLI dispatch
|
||||
application.rs # GtkApplication subclass, CSS loading, app actions
|
||||
window.rs # Main window, navigation, scanning orchestration
|
||||
config.rs # App ID and version constants
|
||||
cli.rs # Command-line interface (clap)
|
||||
i18n.rs # Internationalization (gettext wrappers)
|
||||
|
||||
core/ # Backend logic (no GTK dependencies)
|
||||
database.rs # SQLite database (rusqlite), all queries
|
||||
discovery.rs # Filesystem scanning, AppImage detection, SHA256
|
||||
inspector.rs # AppImage metadata extraction (icon, desktop entry)
|
||||
integrator.rs # Desktop integration (.desktop files, icons)
|
||||
launcher.rs # AppImage launching with FUSE/sandbox support
|
||||
updater.rs # Update checking and applying (GitHub, zsync)
|
||||
fuse.rs # FUSE status detection
|
||||
wayland.rs # Wayland compatibility analysis
|
||||
security.rs # CVE scanning via OSV.dev API
|
||||
duplicates.rs # Duplicate and multi-version detection
|
||||
footprint.rs # Disk footprint analysis (config/data/cache)
|
||||
orphan.rs # Orphaned desktop entry detection and cleanup
|
||||
|
||||
ui/ # GTK4/libadwaita UI components
|
||||
library_view.rs # Main grid/list view of AppImages
|
||||
app_card.rs # Individual AppImage card widget
|
||||
detail_view.rs # Full detail page for a single AppImage
|
||||
dashboard.rs # System health dashboard
|
||||
preferences.rs # Preferences dialog
|
||||
update_dialog.rs # Update check and apply dialog
|
||||
duplicate_dialog.rs # Duplicate resolution dialog
|
||||
cleanup_wizard.rs # Disk space reclamation wizard
|
||||
security_report.rs # Security scan results view
|
||||
integration_dialog.rs # Desktop integration confirmation
|
||||
widgets.rs # Shared utility widgets (badges, sections)
|
||||
|
||||
data/
|
||||
app.driftwood.Driftwood.gschema.xml # GSettings schema
|
||||
app.driftwood.Driftwood.desktop # Desktop entry for Driftwood itself
|
||||
app.driftwood.Driftwood.metainfo.xml # AppStream metadata
|
||||
resources.gresource.xml # GResource manifest
|
||||
resources/style.css # Application CSS
|
||||
|
||||
po/ # Translation files
|
||||
POTFILES.in # Files with translatable strings
|
||||
LINGUAS # Available translations
|
||||
|
||||
build-aux/ # Build helpers
|
||||
app.driftwood.Driftwood.json # Flatpak manifest
|
||||
build-appimage.sh # AppImage build script
|
||||
|
||||
packaging/
|
||||
PKGBUILD # Arch Linux AUR package
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
The codebase is split into three layers:
|
||||
|
||||
1. **core/** - Pure Rust business logic. No GTK dependencies. Can be tested
|
||||
independently. Each module handles one concern.
|
||||
|
||||
2. **ui/** - GTK4/libadwaita widgets. Each view is a function that builds a
|
||||
widget tree. Uses `Rc<Database>` for shared database access.
|
||||
|
||||
3. **window.rs / application.rs** - Orchestration layer. Connects UI to core,
|
||||
handles navigation, spawns background threads for scanning.
|
||||
|
||||
Background work (scanning, update checks, security scans) runs on
|
||||
`gio::spawn_blocking` threads. Results are sent back to the main thread
|
||||
via `glib::spawn_future_local`.
|
||||
|
||||
## Coding conventions
|
||||
|
||||
- Follow standard Rust formatting (`cargo fmt`)
|
||||
- All new code must compile with zero warnings
|
||||
- Add tests for core/ modules (81+ tests currently)
|
||||
- Use `log::info!`, `log::warn!`, `log::error!` for diagnostics
|
||||
- User-facing strings should be wrapped in `i18n()` for translation
|
||||
- Use `adw::` widgets over raw `gtk::` when an Adwaita equivalent exists
|
||||
- Status badges use CSS classes: `badge-success`, `badge-warning`, `badge-error`
|
||||
|
||||
## Database
|
||||
|
||||
SQLite database stored at `~/.local/share/driftwood/driftwood.db`. Schema
|
||||
migrates automatically (v1 through v4). All queries are in `core/database.rs`.
|
||||
|
||||
## Testing
|
||||
|
||||
```sh
|
||||
# Run all tests
|
||||
cargo test
|
||||
|
||||
# Run tests for a specific module
|
||||
cargo test core::database
|
||||
cargo test core::updater
|
||||
|
||||
# Run with output
|
||||
cargo test -- --nocapture
|
||||
```
|
||||
|
||||
Tests use `Database::open_in_memory()` for isolation.
|
||||
@@ -5,7 +5,7 @@
|
||||
<policyconfig>
|
||||
|
||||
<vendor>Driftwood</vendor>
|
||||
<vendor_url>https://github.com/driftwood-appimage</vendor_url>
|
||||
<vendor_url>https://git.lashman.live/lashman/driftwood</vendor_url>
|
||||
|
||||
<action id="app.driftwood.Driftwood.system-install">
|
||||
<description>Install AppImage system-wide</description>
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ pkgver=0.1.0
|
||||
pkgrel=1
|
||||
pkgdesc='Modern AppImage manager for GNOME desktops'
|
||||
arch=('x86_64')
|
||||
url='https://github.com/driftwood-app/driftwood'
|
||||
license=('GPL-3.0-or-later')
|
||||
url='https://git.lashman.live/lashman/driftwood'
|
||||
license=('CC0-1.0')
|
||||
depends=(
|
||||
'gtk4'
|
||||
'libadwaita'
|
||||
|
||||
@@ -51,7 +51,7 @@ pub struct AppImageRecord {
|
||||
pub tags: Option<String>,
|
||||
pub pinned: bool,
|
||||
pub avg_startup_ms: Option<i64>,
|
||||
// Phase 9 fields - comprehensive metadata
|
||||
// Phase 9 fields - extended metadata
|
||||
pub appstream_id: Option<String>,
|
||||
pub appstream_description: Option<String>,
|
||||
pub generic_name: Option<String>,
|
||||
|
||||
Reference in New Issue
Block a user