Compare commits

...
10 Commits
Author SHA1 Message Date
dependabot[bot] a1184588a0 chore(deps): bump pipewire from 0.10.0 to 0.10.1 (#188)
* chore(deps): bump pipewire from 0.10.0 to 0.10.1

Bumps pipewire from 0.10.0 to 0.10.1.

---
updated-dependencies:
- dependency-name: pipewire
  dependency-version: 0.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

* chore(flatpak): automatically update cargo-sources.json

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-29 13:39:17 +03:00
arabianq 9b65384cfd cargo update 2026-08-10 16:37:05 +03:00
dependabot[bot] 59c7f25a38 chore(deps): bump clap from 4.6.5 to 4.6.6 in the clap-stack group (#185)
* chore(deps): bump clap from 4.6.5 to 4.6.6 in the clap-stack group

Bumps the clap-stack group with 1 update: [clap](https://github.com/clap-rs/clap).


Updates `clap` from 4.6.5 to 4.6.6
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.5...clap_complete-v4.6.6)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.6.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: clap-stack
...

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

* chore(flatpak): automatically update cargo-sources.json

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 16:30:43 +03:00
dependabot[bot] 2b544d2e63 chore(deps): bump the egui-stack group with 5 updates (#184)
* chore(deps): bump the egui-stack group with 5 updates

Bumps the egui-stack group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [egui](https://github.com/emilk/egui) | `0.35.0` | `0.36.0` |
| [eframe](https://github.com/emilk/egui) | `0.35.0` | `0.36.0` |
| [egui_extras](https://github.com/emilk/egui) | `0.35.0` | `0.36.0` |
| [egui_material_icons](https://github.com/lucasmerlin/hello_egui) | `0.7.0` | `0.8.0` |
| [egui_dnd](https://github.com/lucasmerlin/hello_egui) | `0.16.0` | `0.17.0` |


Updates `egui` from 0.35.0 to 0.36.0
- [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.35.0...0.36.0)

Updates `eframe` from 0.35.0 to 0.36.0
- [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.35.0...0.36.0)

Updates `egui_extras` from 0.35.0 to 0.36.0
- [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.35.0...0.36.0)

Updates `egui_material_icons` from 0.7.0 to 0.8.0
- [Release notes](https://github.com/lucasmerlin/hello_egui/releases)
- [Changelog](https://github.com/lucasmerlin/hello_egui/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lucasmerlin/hello_egui/compare/egui_material_icons-v0.7.0...egui_material_icons-v0.8.0)

Updates `egui_dnd` from 0.16.0 to 0.17.0
- [Release notes](https://github.com/lucasmerlin/hello_egui/releases)
- [Changelog](https://github.com/lucasmerlin/hello_egui/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lucasmerlin/hello_egui/compare/egui_dnd-v0.16.0...egui_dnd-v0.17.0)

---
updated-dependencies:
- dependency-name: egui
  dependency-version: 0.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: egui-stack
- dependency-name: eframe
  dependency-version: 0.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: egui-stack
- dependency-name: egui_extras
  dependency-version: 0.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: egui-stack
- dependency-name: egui_material_icons
  dependency-version: 0.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: egui-stack
- dependency-name: egui_dnd
  dependency-version: 0.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: egui-stack
...

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

* chore(flatpak): automatically update cargo-sources.json

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 16:30:28 +03:00
dependabot[bot] b939709047 chore(deps): bump clap from 4.6.4 to 4.6.5 in the clap-stack group (#183)
* chore(deps): bump clap from 4.6.4 to 4.6.5 in the clap-stack group

Bumps the clap-stack group with 1 update: [clap](https://github.com/clap-rs/clap).


Updates `clap` from 4.6.4 to 4.6.5
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.4...clap_complete-v4.6.5)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.6.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: clap-stack
...

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

* chore(flatpak): automatically update cargo-sources.json

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-05 14:58:22 +03:00
arabianq c75e073774 change version to 1.16.0 2026-07-30 11:20:44 +03:00
arabianq 464baa20ce cargo update 2026-07-30 11:20:16 +03:00
Tarasov Aleksandr 051e81d9f7 feat: add some helpers for in-app hotkeys (#182) 2026-07-30 11:18:01 +03:00
Tarasov Aleksandr 8854c401a9 fix(gui): add translation for "No tracks playing" (#181) 2026-07-30 10:36:57 +03:00
Tarasov Aleksandr c9f30e09d7 feat(lib, daemon, gui): daemon version in fullstate and gui (#180)
* add daemon_version field to the FullState

* add daemon version to the pwsp-gui settings page
2026-07-30 10:30:31 +03:00
16 changed files with 699 additions and 729 deletions
Generated
+218 -242
View File
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -8,7 +8,7 @@ members = [
resolver = "2" resolver = "2"
[workspace.package] [workspace.package]
version = "1.15.0" version = "1.16.0"
edition = "2024" edition = "2024"
authors = ["arabian"] authors = ["arabian"]
homepage = "https://pwsp.arabianq.ru" homepage = "https://pwsp.arabianq.ru"
@@ -59,19 +59,19 @@ rodio = { git = "https://github.com/RustAudio/rodio.git", rev = "c5f1e94290922fe
] } ] }
pipewire = "0.10.0" pipewire = "0.10.0"
egui = { version = "0.35.0", default-features = false, features = [ egui = { version = "0.36.0", default-features = false, features = [
"default_fonts", "default_fonts",
"rayon", "rayon",
] } ] }
eframe = { version = "0.35.0", default-features = false, features = [ eframe = { version = "0.36.0", default-features = false, features = [
"default_fonts", "default_fonts",
"glow", "glow",
"x11", "x11",
"wayland", "wayland",
] } ] }
egui_extras = "0.35.0" egui_extras = "0.36.0"
egui_material_icons = "0.7.0" egui_material_icons = "0.8.0"
egui_dnd = "0.16.0" egui_dnd = "0.17.0"
reqwest = { version = "0.13.4", default-features = false, features = ["native-tls"] } reqwest = { version = "0.13.4", default-features = false, features = ["native-tls"] }
percent-encoding = "2.3.2" percent-encoding = "2.3.2"
+4 -4
View File
@@ -1,6 +1,6 @@
pkgbase = pwsp-bin pkgbase = pwsp-bin
pkgdesc = Lets you play audio files through your microphone (Pre-built binaries) pkgdesc = Lets you play audio files through your microphone (Pre-built binaries)
pkgver = 1.15.0 pkgver = 1.16.0
pkgrel = 1 pkgrel = 1
url = https://github.com/arabianq/pipewire-soundpad url = https://github.com/arabianq/pipewire-soundpad
arch = x86_64 arch = x86_64
@@ -10,11 +10,11 @@ pkgbase = pwsp-bin
depends = alsa-lib depends = alsa-lib
provides = pwsp provides = pwsp
conflicts = pwsp conflicts = pwsp
source = pipewire-soundpad-1.15.0.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.15.0.tar.gz source = pipewire-soundpad-1.16.0.tar.gz :: https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.16.0.tar.gz
sha256sums = SKIP sha256sums = SKIP
source_x86_64 = pwsp-1.15.0-x86_64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.15.0/pwsp-v1.15.0-linux-x64.zip source_x86_64 = pwsp-1.16.0-x86_64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.16.0/pwsp-v1.16.0-linux-x64.zip
sha256sums_x86_64 = SKIP sha256sums_x86_64 = SKIP
source_aarch64 = pwsp-1.15.0-aarch64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.15.0/pwsp-v1.15.0-linux-arm64.zip source_aarch64 = pwsp-1.16.0-aarch64.zip :: https://github.com/arabianq/pipewire-soundpad/releases/download/v1.16.0/pwsp-v1.16.0-linux-arm64.zip
sha256sums_aarch64 = SKIP sha256sums_aarch64 = SKIP
pkgname = pwsp-bin pkgname = pwsp-bin
+1 -1
View File
@@ -1,7 +1,7 @@
# Maintainer: Alexander Tarasov <a.tevg@ya.ru> # Maintainer: Alexander Tarasov <a.tevg@ya.ru>
pkgname=pwsp-bin pkgname=pwsp-bin
_pkgname=pipewire-soundpad _pkgname=pipewire-soundpad
pkgver=1.15.0 pkgver=1.16.0
pkgrel=1 pkgrel=1
pkgdesc="Lets you play audio files through your microphone (Pre-built binaries)" pkgdesc="Lets you play audio files through your microphone (Pre-built binaries)"
arch=('x86_64' 'aarch64') arch=('x86_64' 'aarch64')
+2 -2
View File
@@ -1,6 +1,6 @@
pkgbase = pwsp pkgbase = pwsp
pkgdesc = Lets you play audio files through your microphone pkgdesc = Lets you play audio files through your microphone
pkgver = 1.15.0 pkgver = 1.16.0
pkgrel = 1 pkgrel = 1
url = https://github.com/arabianq/pipewire-soundpad url = https://github.com/arabianq/pipewire-soundpad
arch = x86_64 arch = x86_64
@@ -12,7 +12,7 @@ pkgbase = pwsp
makedepends = cmake makedepends = cmake
makedepends = pipewire makedepends = pipewire
makedepends = alsa-lib makedepends = alsa-lib
source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.15.0.tar.gz source = https://github.com/arabianq/pipewire-soundpad/archive/refs/tags/v1.16.0.tar.gz
sha256sums = SKIP sha256sums = SKIP
pkgname = pwsp pkgname = pwsp
+1 -1
View File
@@ -1,7 +1,7 @@
# Maintainer: Alexander Tarasov <a.tevg@ya.ru> # Maintainer: Alexander Tarasov <a.tevg@ya.ru>
pkgsubn=pwsp pkgsubn=pwsp
pkgname=pwsp pkgname=pwsp
pkgver=1.15.0 pkgver=1.16.0
pkgrel=1 pkgrel=1
pkgdesc="Lets you play audio files through your microphone" pkgdesc="Lets you play audio files through your microphone"
arch=('x86_64' 'aarch64') arch=('x86_64' 'aarch64')
File diff suppressed because it is too large Load Diff
@@ -31,7 +31,7 @@
<name>arabian</name> <name>arabian</name>
</developer> </developer>
<releases> <releases>
<release version="1.15.0" date="2026-07-26" /> <release version="1.16.0" date="2026-07-30" />
</releases> </releases>
<content_rating type="oars-1.1" /> <content_rating type="oars-1.1" />
</component> </component>
+1 -1
View File
@@ -13,7 +13,7 @@
Name: pwsp Name: pwsp
Version: 1.15.0 Version: 1.16.0
Release: %autorelease Release: %autorelease
Summary: Lets you play audio files through your microphone Summary: Lets you play audio files through your microphone
+58 -36
View File
@@ -4,6 +4,17 @@ _version = 2
# Main page # Main page
# ---------------- # ----------------
[gui.no_tracks_playing]
en = "No tracks playing"
ru = "Не запущено ни одного трека"
es = "No hay pistas en reproducción"
fr = "Aucune piste en cours de lecture"
zh = "没有正在播放的曲目"
ar = "لا يوجد مسارات قيد التشغيل"
kz = "Ешқандай трек ойнатылып жатқан жоқ"
he = "אין רצועות שמנוגנות"
pt-BR = "Nenhuma faixa reproduzindo"
[gui.play_file_button] [gui.play_file_button]
en = "Play file" en = "Play file"
ru = "Выбрать файл" ru = "Выбрать файл"
@@ -27,15 +38,15 @@ he = "בחר מיקרופון"
pt-BR = "Selecionar microfone" pt-BR = "Selecionar microfone"
[gui.search_placeholder] [gui.search_placeholder]
en = "Search files..." en = "Search files... [Ctrl + F]"
ru = "Поиск файлов..." ru = "Поиск файлов... [Ctrl + F]"
es = "Buscar archivos..." es = "Buscar archivos... [Ctrl + F]"
fr = "Rechercher des fichiers..." fr = "Rechercher des fichiers... [Ctrl + F]"
zh = "搜索文件..." zh = "搜索文件... [Ctrl + F]"
ar = "البحث عن ملفات..." ar = "البحث عن ملفات... [Ctrl + F]"
kz = "Файлдарды іздеу..." kz = "Файлдарды іздеу... [Ctrl + F]"
he = "חפש קבצים..." he = "חפש קבצים... [Ctrl + F]"
pt-BR = "Buscar arquivos..." pt-BR = "Buscar arquivos... [Ctrl + F]"
[gui.context.dirs.open] [gui.context.dirs.open]
en = "Open" en = "Open"
@@ -126,37 +137,37 @@ he = "תאריך שינוי (הישן ביותר ראשון)"
pt-BR = "Data de modificação (Mais antigo primeiro)" pt-BR = "Data de modificação (Mais antigo primeiro)"
[gui.context.files.play_solo] [gui.context.files.play_solo]
en = "Play Solo" en = "Play Solo [LMB]"
ru = "Играть" ru = "Играть [ЛКМ]"
es = "Reproducir solo" es = "Reproducir solo [LMB]"
fr = "Jouer en solo" fr = "Jouer en solo [LMB]"
zh = "单独播放" zh = "单独播放 [LMB]"
ar = "تشغيل منفرد" ar = "تشغيل منفرد [LMB]"
kz = "Жалғыз ойнату" kz = "Жалғыз ойнату [ЛКМ]"
he = "נגן סולו" he = "נגן סולו [LMB]"
pt-BR = "Reproduzir" pt-BR = "Reproduzir [LMB]"
[gui.context.files.add_new] [gui.context.files.add_new]
en = "Add New" en = "Add New [Ctrl + LMB]"
ru = "Добавить" ru = "Добавить [Ctrl + ЛКМ]"
es = "Añadir nuevo" es = "Añadir nuevo [Ctrl + LMB]"
fr = "Ajouter un nouveau" fr = "Ajouter un nouveau [Ctrl + LMB]"
zh = "添加新项" zh = "添加新项 [Ctrl + LMB]"
ar = "إضافة جديد" ar = "إضافة جديد [Ctrl + LMB]"
kz = "Жаңасын қосу" kz = "Жаңасын қосу [Ctrl + ЛКМ]"
he = "הוסף חדש" he = "הוסף חדש [Ctrl + LMB]"
pt-BR = "Adicionar" pt-BR = "Adicionar [Ctrl + LMB]"
[gui.context.files.replace_last] [gui.context.files.replace_last]
en = "Replace Last" en = "Replace Last [Shift + LMB]"
ru = "Заменить Последний" ru = "Заменить Последний [Shift + ЛКМ]"
es = "Reemplazar último" es = "Reemplazar último [Shift + LMB]"
fr = "Remplacer le dernier" fr = "Remplacer le dernier [Shift + LMB]"
zh = "替换上一个" zh = "替换上一个 [Shift + LMB]"
ar = "استبدال الأخير" ar = "استبدال الأخير [Shift + LMB]"
kz = "Соңғысын ауыстыру" kz = "Соңғысын ауыстыру [Shift + ЛКМ]"
he = "החלף אחרון" he = "החלף אחרון [Shift + LMB]"
pt-BR = "Substituir" pt-BR = "Substituir [Shift + LMB]"
[gui.context.files.show_in_fm] [gui.context.files.show_in_fm]
en = "Show in File Manager" en = "Show in File Manager"
@@ -283,6 +294,17 @@ kz = "GUI нұсқасы: %{version}"
he = "גרסת ממשק משתמש: %{version}" he = "גרסת ממשק משתמש: %{version}"
pt-BR = "Versão da GUI: %{version}" pt-BR = "Versão da GUI: %{version}"
[gui.settings.daemon_version]
en = "Daemon version: %{version}"
ru = "Версия демона: %{version}"
es = "Versión del demonio: %{version}"
fr = "Version du démon: %{version}"
zh = "守护进程版本: %{version}"
ar = "إصدار démon: %{version}"
kz = "Демон нұсқасы: %{version}"
he = "גרסת השרת: %{version}"
pt-BR = "Versão do daemon: %{version}"
[gui.settings.theme.label] [gui.settings.theme.label]
en = "Color Scheme" en = "Color Scheme"
ru = "Цветовая схема" ru = "Цветовая схема"
+2 -1
View File
@@ -3,6 +3,7 @@ use egui::{Button, CollapsingHeader, FontFamily, Label, RichText, Slider, Ui};
use egui_material_icons::icons::*; use egui_material_icons::icons::*;
use pwsp_lib::types::{audio_player::TrackInfo, gui::AppState}; use pwsp_lib::types::{audio_player::TrackInfo, gui::AppState};
use pwsp_lib::utils::gui::format_time_pair; use pwsp_lib::utils::gui::format_time_pair;
use rust_i18n::t;
pub(crate) enum TrackAction { pub(crate) enum TrackAction {
Pause(u32), Pause(u32),
@@ -15,7 +16,7 @@ impl SoundpadGui {
pub fn draw_header(&mut self, ui: &mut Ui) { pub fn draw_header(&mut self, ui: &mut Ui) {
ui.vertical_centered_justified(|ui| { ui.vertical_centered_justified(|ui| {
if self.audio_player_state.tracks.is_empty() { if self.audio_player_state.tracks.is_empty() {
ui.label("No tracks playing"); ui.label(t!("gui.no_tracks_playing"));
return; return;
} }
+10 -4
View File
@@ -120,10 +120,16 @@ impl SoundpadGui {
// -------------------------------- // --------------------------------
ui.with_layout(Layout::bottom_up(Align::Min), |ui| { ui.with_layout(Layout::bottom_up(Align::Min), |ui| {
ui.label(t!( ui.horizontal(|ui| {
"gui.settings.version", ui.label(t!(
version = env!("CARGO_PKG_VERSION") "gui.settings.version",
)); version = env!("CARGO_PKG_VERSION")
));
ui.label(t!(
"gui.settings.daemon_version",
version = self.audio_player_state.daemon_version
))
});
}); });
}); });
} }
+1
View File
@@ -59,6 +59,7 @@ pub struct FullState {
pub all_inputs: HashMap<String, String>, pub all_inputs: HashMap<String, String>,
pub current_output: String, pub current_output: String,
pub all_outputs: HashMap<String, String>, pub all_outputs: HashMap<String, String>,
pub daemon_version: String,
} }
/// Which of the two independent output paths a volume applies to. /// Which of the two independent output paths a volume applies to.
+1
View File
@@ -684,6 +684,7 @@ impl Executable for GetFullStateCommand {
all_inputs, all_inputs,
current_output: audio_player.output_device_name.clone().unwrap_or_default(), current_output: audio_player.output_device_name.clone().unwrap_or_default(),
all_outputs, all_outputs,
daemon_version: env!("CARGO_PKG_VERSION").into(),
}; };
match serde_json::to_string(&full_state) { match serde_json::to_string(&full_state) {
+1
View File
@@ -130,6 +130,7 @@ pub struct AudioPlayerState {
pub all_outputs_sorted: Vec<(String, String)>, pub all_outputs_sorted: Vec<(String, String)>,
pub is_daemon_running: bool, pub is_daemon_running: bool,
pub daemon_version: String,
pub hotkey_config: Option<HotkeyConfig>, pub hotkey_config: Option<HotkeyConfig>,
} }
+1
View File
@@ -148,6 +148,7 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc<Mutex<AudioPlayerSt
} }
guard.is_daemon_running = true; guard.is_daemon_running = true;
guard.daemon_version = full_state.daemon_version;
} }
// Poll hotkey config at a lower frequency (~every 2 seconds) // Poll hotkey config at a lower frequency (~every 2 seconds)