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>
This commit is contained in:
Tarasov Aleksandr
2026-03-27 15:46:06 +03:00
committed by GitHub
parent f01a0e656c
commit b2b83f5c32
12 changed files with 570 additions and 205 deletions
+18 -12
View File
@@ -19,13 +19,13 @@ enum TrackAction {
impl SoundpadGui {
fn get_volume_icon(volume: f32) -> &'static str {
if volume > 0.7 {
ICON_VOLUME_UP
ICON_VOLUME_UP.codepoint
} else if volume <= 0.0 {
ICON_VOLUME_OFF
ICON_VOLUME_OFF.codepoint
} else if volume < 0.3 {
ICON_VOLUME_MUTE
ICON_VOLUME_MUTE.codepoint
} else {
ICON_VOLUME_DOWN
ICON_VOLUME_DOWN.codepoint
}
}
@@ -313,7 +313,7 @@ impl SoundpadGui {
let path = item.clone();
ui.horizontal(|ui| {
handle.ui(ui, |ui| {
ui.label(ICON_DRAG_INDICATOR);
ui.label(ICON_DRAG_INDICATOR.codepoint);
});
let name = path
.file_name()
@@ -345,7 +345,7 @@ impl SoundpadGui {
// Context menu
dir_button_response.context_menu(|ui| {
if ui
.button(format!("{} {}", ICON_OPEN_IN_NEW, "Show"))
.button(format!("{} {}", ICON_OPEN_IN_NEW.codepoint, "Show"))
.clicked()
{
self.open_dir(&path);
@@ -354,7 +354,7 @@ impl SoundpadGui {
if ui
.button(format!(
"{} {}",
ICON_OPEN_IN_BROWSER, "Open in File Manager"
ICON_OPEN_IN_BROWSER.codepoint, "Open in File Manager"
))
.clicked()
{
@@ -365,7 +365,10 @@ impl SoundpadGui {
ui.separator();
if ui.button(format!("{} {}", ICON_DELETE, "Remove")).clicked() {
if ui
.button(format!("{} {}", ICON_DELETE.codepoint, "Remove"))
.clicked()
{
self.app_state.dirs_to_remove.insert(path.clone());
}
});
@@ -452,20 +455,23 @@ impl SoundpadGui {
// Context menu
file_button_response.context_menu(|ui| {
if ui
.button(format!("{} {}", ICON_BOLT, "Play Solo"))
.button(format!("{} {}", ICON_BOLT.codepoint, "Play Solo"))
.clicked()
{
self.play_file(&entry_path, false);
self.app_state.selected_file = Some(entry_path.clone());
}
if ui.button(format!("{} {}", ICON_ADD, "Add New")).clicked() {
if ui
.button(format!("{} {}", ICON_ADD.codepoint, "Add New"))
.clicked()
{
self.play_file(&entry_path, true);
self.app_state.selected_file = Some(entry_path.clone());
}
if ui
.button(format!("{} {}", ICON_SWAP_HORIZ, "Replace Last"))
.button(format!("{} {}", ICON_SWAP_HORIZ.codepoint, "Replace Last"))
.clicked()
&& let Some(last_track) = self.audio_player_state.tracks.last()
{
@@ -479,7 +485,7 @@ impl SoundpadGui {
if ui
.button(format!(
"{} {}",
ICON_OPEN_IN_BROWSER, "Show in File Manager"
ICON_OPEN_IN_BROWSER.codepoint, "Show in File Manager"
))
.clicked()
{