Commit Graph

99 Commits

Author SHA1 Message Date
dependabot[bot] 88995f6fd1 chore(deps): bump pipewire from 0.9.2 to 0.10.0 (#116)
* chore(deps): bump pipewire from 0.9.2 to 0.10.0

Bumps pipewire from 0.9.2 to 0.10.0.

---
updated-dependencies:
- dependency-name: pipewire
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* deps: update cargo-sources.json

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: arabian <a.tevg@ya.ru>
2026-05-21 22:36:23 +03:00
Tarasov Aleksandr fe655be59a fix: insecure fallback directory and secure file creation (#111)
* 🔒 Fix insecure fallback directory and secure file creation

The daemon's fallback runtime directory `get_runtime_dir()` was hardcoded to `/run/pwsp`, creating a risk of shared, insecure access in multi-user systems.
This commit secures the fallback logic by:
1. Creating a user-specific temporary directory (`/tmp/pwsp-$UID`).
2. Ensuring directory creation happens atomically with `0o700` permissions using `std::fs::DirBuilder`.
3. Validating the fallback directory strictly (checking UID, 0o700 permissions, and symlink status) if it already exists to mitigate symlink attacks.
4. Using `libc::geteuid()` for robust cross-platform UID extraction.
5. Fixing `is_daemon_running` and locking logic to use `fs::OpenOptions` instead of `fs::File::create` to prevent accidental file truncation on active lock files.

Co-authored-by: arabianq <55220741+arabianq@users.noreply.github.com>

* 🔒 Fix insecure fallback directory and secure file creation

The daemon's fallback runtime directory `get_runtime_dir()` was hardcoded to `/run/pwsp`, creating a risk of shared, insecure access in multi-user systems.
This commit secures the fallback logic by:
1. Creating a user-specific temporary directory (`/tmp/pwsp-$UID`).
2. Ensuring directory creation happens atomically with `0o700` permissions using `std::fs::DirBuilder`.
3. Validating the fallback directory strictly (checking UID, 0o700 permissions, and symlink status) if it already exists to mitigate symlink attacks.
4. Using safe `rustix::process::geteuid()` for robust cross-platform UID extraction, avoiding `unsafe` blocks.
5. Fixing `is_daemon_running` and locking logic to use `fs::OpenOptions` instead of `fs::File::create` to prevent accidental file truncation on active lock files.

Co-authored-by: arabianq <55220741+arabianq@users.noreply.github.com>

* small refactor

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-05-17 17:43:51 +03:00
arabianq 930857312d change version to 1.9.0 2026-05-15 22:18:21 +03:00
Tarasov Aleksandr c6d9f2d6e7 feat/localization (#104)
* initial i18n setup for PWSP-GUI

* add Russian locale

* add missing entries

* add Spanish locale

* add French locale

* add Chinese locale

* add Arabic locale

* update cargo-sources.json
2026-05-15 20:29:39 +03:00
Tarasov Aleksandr dc1ecc81ea refactor: replace all rust Result with anyhow::Result (#103) 2026-05-15 19:32:26 +03:00
arabianq a07025b1f6 change version to 1.8.1 2026-05-15 15:02:15 +03:00
Tarasov Aleksandr c1d145fbc8 Revert "chore(deps): bump tokio from 1.52.1 to 1.52.3 (#99)" (#101)
* Revert "chore(deps): bump tokio from 1.52.1 to 1.52.3 (#99)"

This reverts commit 911417af40.

* deps: update cargo-sources.json
2026-05-15 14:55:52 +03:00
arabianq 958a3efde5 change version to 1.8.0 2026-05-13 23:06:08 +03:00
Tarasov Aleksandr 30e75e924c fix: Opus audio does not work in mkv files (#95)
* change rodio to the fork with symphonia-adapter-libopus-v0.2.8

* update flatpak sources

* deps: update arabianq/rodio rev
2026-05-13 23:02:31 +03:00
arabianq 2b4b7ea730 cargo update
Adding audio_thread_priority v0.35.1
    Updating cc v1.2.61 -> v1.2.62
    Updating color v0.3.2 -> v0.3.3
    Updating coreaudio-rs v0.14.1 -> v0.14.2
    Updating cpal v0.18.0 (https://github.com/RustAudio/cpal#f938e338) -> #2c7acf8e
      Adding dbus v0.6.5
    Updating egui_extras v0.34.1 -> v0.34.2
    Updating hashbrown v0.17.0 -> v0.17.1
    Updating js-sys v0.3.97 -> v0.3.98
    Updating kurbo v0.13.0 -> v0.13.1
      Adding libdbus-sys v0.2.7
      Adding mach2 v0.4.3
    Updating naga v29.0.1 -> v29.0.3
    Updating no_std_io2 v0.9.3 -> v0.9.4
    Updating normpath v1.5.0 -> v1.5.1
    Updating opusic-sys v0.6.0 -> v0.7.3
    Updating orbclient v0.3.53 -> v0.3.54
    Updating pin-project v1.1.11 -> v1.1.13
    Updating pin-project-internal v1.1.11 -> v1.1.13
      Adding polycool v0.4.0
    Updating profiling v1.0.17 -> v1.0.18
    Updating quick-xml v0.39.2 -> v0.39.4
    Updating redox_syscall v0.7.4 -> v0.7.5
    Updating siphasher v1.0.2 -> v1.0.3
    Updating symphonia-adapter-libopus v0.2.7 -> v0.2.9
    Updating wasm-bindgen v0.2.120 -> v0.2.121
    Updating wasm-bindgen-futures v0.4.70 -> v0.4.71
    Updating wasm-bindgen-macro v0.2.120 -> v0.2.121
    Updating wasm-bindgen-macro-support v0.2.120 -> v0.2.121
    Updating wasm-bindgen-shared v0.2.120 -> v0.2.121
    Updating web-sys v0.3.97 -> v0.3.98
    Updating wgpu v29.0.1 -> v29.0.3
    Updating wgpu-core v29.0.1 -> v29.0.3
    Updating wgpu-core-deps-windows-linux-android v29.0.0 -> v29.0.3
    Updating wgpu-hal v29.0.1 -> v29.0.3
    Updating wgpu-naga-bridge v29.0.1 -> v29.0.3
    Updating wgpu-types v29.0.1 -> v29.0.3
    Updating zerofrom v0.1.7 -> v0.1.8
    Updating zvariant v5.10.1 -> v5.11.0
    Updating zvariant_derive v5.10.1 -> v5.11.0
2026-05-13 23:00:10 +03:00
arabianq d72eaabf54 feat: load system fonts 2026-05-13 22:02:24 +03:00
dependabot[bot] 911417af40 chore(deps): bump tokio from 1.52.1 to 1.52.3 (#99)
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.52.1 to 1.52.3.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.1...tokio-1.52.3)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.52.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 21:44:25 +03:00
dependabot[bot] 573958c05b chore(deps): bump eframe from 0.34.1 to 0.34.2 (#98)
Bumps [eframe](https://github.com/emilk/egui) from 0.34.1 to 0.34.2.
- [Release notes](https://github.com/emilk/egui/releases)
- [Changelog](https://github.com/emilk/egui/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emilk/egui/compare/0.34.1...0.34.2)

---
updated-dependencies:
- dependency-name: eframe
  dependency-version: 0.34.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 21:44:09 +03:00
dependabot[bot] 0bb7ef3f33 chore(deps): bump egui from 0.34.1 to 0.34.2 (#97)
Bumps [egui](https://github.com/emilk/egui) from 0.34.1 to 0.34.2.
- [Release notes](https://github.com/emilk/egui/releases)
- [Changelog](https://github.com/emilk/egui/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emilk/egui/compare/0.34.1...0.34.2)

---
updated-dependencies:
- dependency-name: egui
  dependency-version: 0.34.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 21:43:54 +03:00
Tarasov Aleksandr e6c8d720d5 update deps and change version to 1.7.6 (#92)
* change version to 1.7.6

* cargo update

cpal v0.18.0 #e5d618c6 -> #f938e338
fax v0.2.6 -> v0.2.7
fax_derive -
idna_adapter v1.2.1 -> v1.2.2
js-sys v0.3.95 -> v0.3.97
wasm-bindgen v0.2.118 -> v0.2.120
wasm-bindgen-futures v0.4.68 -> v0.4.70
wasm-bindgen-macro v0.2.118 -> v0.2.120
wasm-bindgen-macro-support v0.2.118 -> v0.2.120
wasm-bindgen-shared v0.2.118 -> v0.2.120
web-sys v0.3.95 -> v0.3.97
winnow -
zbus v5.14.0 -> v5.15.0
zbus_macros v5.14.0 -> v5.15.0
zbus_names v4.3.1 -> v4.3.2
zvariant v5.10.0 -> v5.10.1
zvariant_derive v5.10.0 -> v5.10.1
zvariant_utils v3.3.0 -> v3.3.1

* deps: update cargo-sources.json
2026-04-28 14:31:27 +03:00
Tarasov Aleksandr 86b38a250e change version to 1.7.5 (#83)
* deps: rodio v0.22.2 -> 57ad9d8a9f30398f634fbf8e4e1d53dde7243c21 with symphonia-libopus

* change version to 1.7.5

* deps: update cargo-sources.json
2026-04-26 19:32:12 +03:00
Tarasov Aleksandr 54fa278cea feat: opus support (#82)
* deps: rodio v0.22.2 -> 57ad9d8a9f30398f634fbf8e4e1d53dde7243c21 with symphonia-libopus

* deps: update cargo-sources.json

* feat(gui): add .opus file extension support
2026-04-26 19:27:36 +03:00
Tarasov Aleksandr 9adc6cfbda update dependencies and change version to 1.7.4 (#75)
* deps: cargo update

cc v1.2.60 -> v1.2.61
libc v0.2.185 -> v0.2.186
winnow v1.0.1 -> v1.0.2

* deps: update cargo-sources.json for flatpak

* change version to 1.7.4
2026-04-25 15:58:49 +03:00
Tarasov Aleksandr 76b1d4f345 fix(gui): footer and hotkeys table are no longer clipped because of long filenames (#74)
* fix: truncate file button text in draw function so footer is no clipped

* fix(gui): fix hotkeys table clipping with egui_extras::TableBuilder

fully reworked hotkeys page

* deps: update flatpak cargo-sources.json
2026-04-25 15:44:50 +03:00
Tarasov Aleksandr 78e0a133b6 Bump version to 1.7.3 and update dependencies (#70)
* change version to 1.7.3

* deps: cargo update

orbclient -> v0.3.53
wasip2 -> v1.0.3+wasi-0.2.9
wit-bindgen + v0.57.1

* deps: update cargo-sources.json for flatpak
2026-04-21 19:41:19 +03:00
Tarasov Aleksandr 949307fcf8 Update dependencies and change version to 1.7.2 (#63)
* deps: bump tokio to 1.52.1

* deps: bump clap to 4.6.1

* deps: cargo update

bitflags -> v2.11.1
core2 -
dary_heap -> v0.3.9
font-types -> v0.11.3
include-flate -> v0.3.3
include-flate-codegen -> v0.3.3
include-flate-compress -> v0.3.3
libc -> v0.2.185
libflate -> v2.3.0
libflate_lz77 -> v2.3.0
no_std_io2 + v0.9.3
portable-atomic-util -> v0.2.7
pxfm -> v0.1.29
rayon -> v1.12.0
uuid -> v1.23.1
webbrowser -> v1.2.1

* change version to 1.7.2
2026-04-17 14:42:59 +03:00
Tarasov Aleksandr 5367a3daae version 1.7.1, update deps, update docs (#57)
* refactor: removed garbage

* change version to 1.7.1

* cargo fmt

* cargo update

* docs: add information about hotkeys to README

* docs: small refactor
2026-04-12 17:23:04 +03:00
Tarasov Aleksandr 5a2418325d change version to 1.7.0 (#52) 2026-04-09 10:10:50 +03:00
RiDDiX a156df346b feat: add hotkey system (#48)
* feat: add hotkey system for playing individual sounds

Slot-based hotkey mappings stored in ~/.config/pwsp/hotkeys.json.
Daemon serves hotkey IPC commands for CLI/compositor bindings.
GUI supports focused hotkey triggers, a dedicated Hotkeys panel
with search and conflict detection, file badges, and a key chord
capture dialog. CLI gains play-hotkey, get hotkeys, set hotkey,
set hotkey-key, and clear-hotkey subcommands.

* feat: add global hotkey support via evdev

Listen for keyboard events directly from /dev/input using evdev,
enabling hotkeys to work system-wide regardless of window focus
or display server (X11, GNOME, KDE Plasma, Hyprland).

The daemon spawns async listeners for each keyboard device at
startup, tracks modifier state, and triggers playback when a
configured chord matches. Requires the user to be in the 'input'
group; logs a warning and continues without global hotkeys if
devices are inaccessible.

* various changes

* refactor: route hotkey mutations through daemon IPC

GUI no longer writes hotkey config directly to disk. Instead, all
mutations (set slot, set key chord, clear chord, remove slot) are
sent to the daemon via IPC, which persists the changes. The state
thread periodically syncs the hotkey config back from the daemon,
so CLI-made changes are reflected in the GUI.

New IPC commands: set_hotkey_action (arbitrary action per slot),
clear_hotkey_key (remove key chord without removing the slot).

Also removes unreachable capture overlay from draw_hotkeys().

* small refactor

---------

Co-authored-by: arabian <a.tevg@ya.ru>
2026-04-06 21:43:41 +03:00
Tarasov Aleksandr b2b83f5c32 merge dev
* cargo fmt

* deps: bump clap to 4.6.0

* deps: cargo update

* Fix daemon autostart issue caused by sync pipewire retry loop (#43) (#44)

At boot time, PipeWire takes some time to register the `pwsp-daemon` and `pwsp-virtual-mic` devices. Previously, the daemon's retry loop for `link_player_to_virtual_mic()` was synchronous and limited to 5 attempts (1.5 seconds total). This caused systemd autostarts to fail with a code 1 if the devices were not yet available.

This change replaces the synchronous wait with an asynchronous `tokio::spawn` task. It will retry the link attempt up to 60 times with a 1-second delay without blocking the startup of the rest of the daemon. This prevents it from exiting abruptly during autostart.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* deps: bump egui & eframe version to 0.34.1

* feat: replaced App::update with new App::logic and App::ui

* deps: bump egui_material_icons to 0.6.0

* deps: bump egui_dnd to 0.15.0

* fix: use .codepoint for icons

* refactor

* refactor: replaced deprecated CentralPanel::show with CentralPanel::show_inside

* refactor

* change version to 1.6.3

* update rust toolchain in github actions

* update freedesktop platform version to 25.08 for flaptak

* update github actions for flatpak builds

* add flatpak-builder installation inside actions

* add flathub configuration to actions

* add --user flag to flathub configuration

* remove sudo from flatpak actions

* Fix/dev flatpak actions 6082245116761610541 (#47)

* remove sudo

* remove steps

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-03-27 15:46:06 +03:00
Tarasov Aleksandr c649ef5410 merge dev (#21)
* change version to 1.6.2

* deps: bump tokio to 1.50.0

* deps: bump rodio to 0.22.2

* cargo update
2026-03-07 15:34:19 +03:00
Tarasov Aleksandr 0dfd841e6d change version to 1.6.2 (#20) 2026-03-07 15:28:10 +03:00
arabianq 7e66a9241b change version to 1.6.1 2026-02-23 14:01:40 +03:00
arabianq 02ad7337a1 cargo update 2026-02-23 13:59:42 +03:00
arabianq c08898e4f2 deps: bump rodio to 0.22.1 2026-02-23 13:58:08 +03:00
arabianq ed8b04caa9 deps: bump clap to 4.5.60 2026-02-23 13:53:13 +03:00
arabianq 81da36f03c bump version to 1.6.0 2026-02-14 15:50:06 +03:00
arabianq e3bc1fd55f deps: cargo update 2026-02-14 15:16:43 +03:00
arabianq 15964f205b deps: bump clap version to 4.5.58 2026-02-14 15:15:36 +03:00
arabianq baae7a1ccf feat: you can now open dirs/files in system's file manager using context menus 2026-02-14 15:09:05 +03:00
arabianq 9fbe42c201 update version to 1.5.1 2026-01-28 23:34:12 +03:00
arabianq 330c3d79d4 cargo update 2026-01-28 03:40:43 +03:00
arabianq dff20daace deps: bump clap to 4.5.55 2026-01-28 03:39:39 +03:00
arabianq ac61a71dcb feat: bump version to 1.5.0 2026-01-28 03:35:04 +03:00
arabianq 4499b1d3aa feat(gui): now directories can be reordered using drag and drop 2026-01-28 02:10:36 +03:00
arabianq 2f33c48bcc change version to 1.4.0 2026-01-25 00:34:21 +03:00
arabianq 1f48dad71c cargo update 2026-01-25 00:33:49 +03:00
arabianq dc61342af8 change version to 1.3.2 2026-01-16 16:19:17 +03:00
arabianq fded7f7b3f deps: cargo update 2026-01-16 16:18:44 +03:00
arabianq ec83680333 deps: bump rfd to 0.17.2 2026-01-16 16:18:11 +03:00
arabianq 56040934e9 cargo update 2026-01-08 02:56:37 +03:00
arabianq 89975cb124 change version to 1.3.1 2026-01-08 02:53:50 +03:00
arabianq 03e20ffa7e deps: bump rfd to 0.17.1 2026-01-08 02:53:16 +03:00
arabianq 8f7ea09ef5 deps: bump clap to 4.5.54 2026-01-08 02:49:54 +03:00
arabianq c639721f2a deps: bump serde_json to 1.0.149 2026-01-08 02:49:11 +03:00