* ci: refactor and optimize GitHub Actions workflows\n\n- **Consolidate build processes (`build.yml`, `release.yml`)**: Merged the standalone `.zip` (linux-build) and `.deb` (deb-build) jobs into a single matrix job (`build-and-package` / `build-release`).
This prevents compiling the Rust binaries twice per architecture, effectively cutting the build time in half and saving CI runner minutes.
- **Parallelize and fix Flatpak deployment (`flatter.yml`)**:
- Converted `x86_64` and `aarch64` flatpak jobs to run concurrently via a matrix strategy, removing the sequential bottleneck.
- Resolved an issue where GitHub Pages would only host the `aarch64` repository. Introduced a new `prepare-repo` job that downloads the `.flatpak` bundles from both architectures, merges them into a
single OSTree repository locally, signs it with GPG, and deploys the unified multi-arch repository to GitHub Pages.
- Configured `flatter.yml` to automatically attach the offline `.flatpak` bundles to GitHub Releases when triggered by a release event.
- **Toolchain and cleanup**: Switched hardcoded Rust toolchain version (`1.96.0`) to `stable` across all workflows to prevent manual bumps in the future. Simplified bash scripts and removed redundant
dependency installation steps.
* Extract Copr trigger into a separate job: Copr build now starts immediately in parallel with GitHub Actions builds, eliminating unnecessary waiting time.
* use ubuntu 22.04 to build binaries instead of ubuntu-latest
* fix cache poisoning
* another attemp to fix cache poisoning
* disable cache in setup-rust-toolchain
* use ubuntu-latest
* optimize dependencies in debug profile
* remove --release flag from build.yml and CARGO env vars
* fix flatter names collision
* better flatter key changing
* auto formatting
* add auto updating cargo-sources for dependabot pull requests
* add groups to dependabot.yml
* add github-actions to dependabot
* add ppa deb repo
* add concurrency: gh-pages-deploy
* ⚡ [performance] pre-filter directory contents by supported extension
💡 **What:** Moved the check for supported audio file extensions from the GUI rendering loop into the directory read/caching layer.
🎯 **Why:** The file extension string parsing and check was executing on every frame of the render loop for every file listed, causing unnecessary CPU overhead. By caching the pre-filtered items, we only execute the check once per directory load.
📊 **Measured Improvement:** In a micro-benchmark simulating 10k files (with 50% matching extensions), the unoptimized loop took ~14.2ms to execute, while the optimized loop takes ~5.8ms. This yields a ~59% speed improvement in the iteration logic over the baseline.
Co-authored-by: arabianq <55220741+arabianq@users.noreply.github.com>
* ⚡ [performance] pre-filter directory contents by supported extension
💡 **What:** Moved the check for supported audio file extensions from the GUI rendering loop into the directory read/caching layer.
🎯 **Why:** The file extension string parsing and check was executing on every frame of the render loop for every file listed, causing unnecessary CPU overhead. By caching the pre-filtered items, we only execute the check once per directory load.
📊 **Measured Improvement:** In a micro-benchmark simulating 10k files (with 50% matching extensions), the unoptimized loop took ~14.2ms to execute, while the optimized loop takes ~5.8ms. This yields a ~59% speed improvement in the iteration logic over the baseline.
Flatpak cargo-sources.json regenerated to include criterion dependency to fix CI.
Co-authored-by: arabianq <55220741+arabianq@users.noreply.github.com>
* chore: remove criterion bench dependency from gui app
This removes the `bench.rs` and `criterion` dependencies, which failed to compile in offline flatpak builds.
CI build is now fixed.
Co-authored-by: arabianq <55220741+arabianq@users.noreply.github.com>
* cargo fmt
* deps: update cargo-sources.json
* chore: update cargo lock and flatpak sources
After removing criterion, the cargo lockfile and flatpak sources have been refreshed to properly remove the offline build dependencies issue.
Co-authored-by: arabianq <55220741+arabianq@users.noreply.github.com>
* Revert "chore: update cargo lock and flatpak sources"
This reverts commit 27379d8e78.
[no ci]
---------
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Replaces the previous approach of spawning new PipeWire main loops and
awaiting a 100ms timeout for every `get_all_devices` call. Instead,
this introduces a `PipeWireManager` which maintains a single, persistent
background thread with a PipeWire main loop and registry listener. The
actor caches `AudioDevice`s and `Port`s continuously in a `HashMap`,
providing instantaneous responses to device queries via a channel.
This architectural change replaces `Sender<Terminate>` with a simple
`PwTerminator` drop-guard to manage the lifetimes of PipeWire objects
(virtual mic and links) via `PwCommand::DestroyObject` without creating
additional OS threads or PipeWire contexts.
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>